ساخت فایل (گرفتن خروجی) APK و AAB در اندروید استودیو

ساخت فایل (گرفتن خروجی) APK و AAB در اندروید استودیو
در این مبحث ابتدا به معرفی پکیج فایل‌های APK و AAB پرداخته سپس نحوه گرفتن خروجی و یا به عبارتی ساخت فایل APK و AAB از پروژه اندرویدی در محیط اندروید استودیو به همراه نحوه ساخت امضای برنامه را بررسی خواهیم کرد.

فرمت‌های APK و AAB

به نام خدا. اگر با سیستم عامل اندروید آشنایی مختصری داشته باشید حتما پسوند apk (مخفف Android application package) برایتان آشناست. کاربر چه به صورت مستقیم و چه از طریق اپ استورهای اندرویدی (مانند گوگل پلی، بازار و…) بخواهد اپلیکیشنی را روی دیوایس خود نصب کند، ابتدا می‌بایست فایل نصبی آن را در اختیار داشته باشد. در واقع در حالت نصب از طریق اپ استور نیز ابتدا بسته نصبی با پسوند apk روی دیوایس بارگذاری و سپس عملیات نصب آغاز می شود. بنابراین شما به عنوان توسعه دهنده اندروید باید در مرحله نهایی از پروژه خود خروجی apk گرفته و سپس به مشتری عرضه کنید. در این جلسه از پروژه ای که قبلا ساخته‌ام استفاده می‌کنم.

آشنایی با build.gradle

ابتدا به بررسی build.gradle (Module: app) می پردازم:

فایل build.gradle (Module:app) در پروژه اندرویدی

محتویات build.gradle من به اینصورت است:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "ir.android_studio.simpleretrofit"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
}

اگر به خاطر داشته باشید موقع ساخت پروژه جدید، فقط Minimum SDK را تعیین کردیم. من API 19 را به عنوان Minimum API این پروژه درنظر گرفته بودم که در کد بالا با minSdkVersion مشخص شده. compileSdkVersion و targetSdkVersion هردو در هنگام ساخت پروژه به صورت پیش فرض روی آخرین API ایی که در SDK نصب شده و با سایر ابزار مانند Build Tools سازگار است، تنظیم می‌شود. compileSdkVersion تعیین می‌کند پروژه با چه API ایی کامپایل شود و targetSdkVersion نیز تعیین می کند هدف ما چه نسخه‌ای از اندروید است که معمولا نسخه هدف توسعه دهندگان، آخرین نسخه منتشر شده از اندروید است (مگر در مواقع خاص که نسخه‌ای پایین‌تر از نسخه نهایی مدنظر توسعه دهنده می‌باشد).
versionCode و versionName مربوط به ورژن اپلیکیشن منتشر شده هستند. ما اولین نسخه از اپلیکیشن خود را با ورژن ۱ برای کاربران منتشر می‌کنیم. در آینده هربار که نیاز به بروزرسانی اپ و انتشار مجدد آن باشد، لازم است ورژن را یک واحد بالا ببریم. یعنی در انتشار اولین بروزرسانی اپلیکیشن برای کاربر، باید versionCode 1 را با versionCode 2 جایگزین کرد و به همین ترتیب برای سایر بروزرسانی ها. سیستم عامل اندروید از این طریق تشخیص می دهد بسته نصبی که کاربر قصد نصب آن را دارد و نسخه ای از آن قبلا روی دیوایس نصب شده، ورژن جدیدتر است و آنرا جایگزین نسخه قبل می‌کند.
versionName هم مرتبط با versionCode است با این تفاوت که فقط برای نمایش به کاربر استفاده شده و تاثیری در عملکرد بروزرسانی ندارد. مقدار versionCode از نوع عدد صحیح و versionName از نوع رشته‌ای می‌باشد. یعنی versionCode را قبل از هر انتشار نسخه جدید باید یک واحد عددی اضافه کنیم اما versionName به اختیار توسعه دهنده است. به عنوان مثال ممکن است یک توسعه دهنده برای انتشار پنجمین نسخه اپلیکیشن برای هردو گزینه Code و Name مقدار ۵ را بکار ببرد. اما عموما بیشتر توسعه دهندگان آپدیت های جزئی (که عمدتا رفع اشکالات است) را در واحدهای اعشار به کاربر نشان می دهند و افزایش واحد اصلی را به انتشار آپدیت‌های کلی و بزرگ اختصاص می‌دهند.
به عنوان مثال من نسخه ۱ اپلیکیشن را منتشر کرده‌ام. یک باگ گزارش شده و آن را رفع می‌کنم. Name را از ۱٫۰ به ۱٫۱ تغییر می دهم. به همین ترتیب ۴ مرتبه دیگر نیاز به اصلاحات و انتشار نسخه جدید دارم که هربار اعشار را یک واحد افزایش داده‌ام و نهایتا به ۱٫۵ می‌رسد. حالا بعد از مدتی تصمیم دارم تغییرات گسترده‌ای در اپلیکیشن لحاظ کرده و امکانات جدیدی به آن اضافه کنم. در اینجا ترجیح می‌دهم به جای ۱٫۶، ورژن ۲٫۰ را به کاربر نمایش دهم.
مانند versionCode و versionName سایر مواردی که به بررسی آنها پرداختم نیز قابل تغییر هستند. به عنوان مثال ممکن است بخواهم minSdkVersion را از ۱۹ به ۲۰ تغییر دهم و … که پس از اعمال تغییرات با زدن گزینه Sync، پروژه سینک و تغییرات اعمال می‌شود.

نکته: در نسخه ۳ اندروید استودیو، علاوه بر apk فرمت جدیدی با پسوند aab (مخفف Android App Bundle) معرفی شده که برای انتشار اپلیکیشن در فروشگاه Google Play Store می‌توان بجای فرمت apk از این فرمت استفاده کرد. استفاده از این فرمت برتری‌هایی نسبت به فرمت apk دارد ازجمله کاهش حجم دانلود توسط کاربر. در صورتی که توسعه دهنده خروجی aab را جهت انتشار اپلیکیشن در Play Store آپلود کند، برای هر کاربر و با توجه به مشخصات دیوایس او، تنها منابع و فایل‌های مورد نیاز آن دیوایس دانلود می‌شود در صورتی که اگر توسعه دهنده خروجی apk را آپلود کرده باشد، همه کاربران با هر نوع دیوایس باید تمام محتویات فایل apk را از سرور فروشگاه Play Store دریافت کنند که در نهایت باعث افزایش حجم دانلود می‌شود. تاکید می‌کنم استفاده از این فرمت فقط در Google Play Store امکانپذیر است و برای انتشار اپلیکیشن در سایر فروشگاه‌ها (مانند نمونه های وطنی) باید از فرمت apk استفاده کرد. ضمن اینکه فرمت aab بر خلاف apk قابلیت نصب مستقیم روی دیوایس را ندارد.

ساخت فایل خروجی APK یا AAB

حالا می خواهم از پروژه خروجی apk یا aab بگیرم:

ساخت فایل apk یا aab در اندروید استودیو

برای گرفتن خروجی دو گزینه Build Bundle / APK و Generate Signed Bundle / APK در اختیار داریم.
جهت انتشار اپلیکیشن در اپ استورها، لازم است آنرا امضا (Sign) کنیم و اپ استورها اپلیکیشنی که امضا نشده باشد را نمی‌پذیرند. بنابراین گزینه Build Bundle / APK تنها زمانی کاربرد دارد که بخواهیم اپلیکیشن را روی دیوایس خودمان تست کنیم. لذا برای انتشار اپلیکیشن، خروجی امضا شده می‌گیریم یعنی Generate Signed Bundle / APK:

ساخت فایل امضا شده Bundle یا apk

در این مرحله نوع خروجی را تعیین می‌کنیم که از نوع aab باشد یا apk. من گزینه دوم را انتخاب می‌کنم.
امضایی که می‌سازیم به صورت یک فایل با پسوند jks ذخیره می‌شود. این امضا را می‌توانیم برای سایر اپلیکیشن‌های خود نیز استفاده کنیم. گزینه Create new را انتخاب کرده و در پنجره جدید اطلاعات لازم برای ساخت کلید امضا را وارد می‌کنم:

ساخت امضا برای فایل نرم افزار اندروید

ساخت Signature key در اندروید استودیو

Key store path مربوط به تعیین محل ذخیره شدن فایل امضا است. توسط گزینه “…” سمت راست فیلد، وارد پنجره انتخاب مسیر شده و مسیری دلخواه انتخاب می‌کنم:

ساخت فایل امضا jks در اندروید استودیو

در انتهای پنجره در قسمت File name برای فایل امضای خود یک نام تعیین می‌کنم. سپس یک پسورد تعیین و به جهت تایید دوبار تکرار می کنم. در دفعات بعد که نیاز به استفاده از این امضا داشته باشم این رمز عبور از من پرسیده می‌شود.
قسمت بعد Alias یا نام مستعار است که یک نام دلخواه وارد می کنم و در خط بعد برای نام مستعار هم نیاز به تعریف رمز عبور دارم. گزینه Validity اشاره به زمان معتبر بودن امضا بر حسب سال است که پیش فرض عدد ۲۵ قرار داده شده. در قسمت Certificate اطلاعاتی از جمله نام و نام خانوادگی، ارگان، شهر، استان و کد کشور از ما خواسته شده که تکمیل حداقل یک مورد الزامیست.

مشخصات امضای پروژه اندروید

تذکر: تمام اطلاعات ثبت شده در کلید به همراه فایل امضاء را در جایی امن نگهداری کنید (ترجیحا یک نسخه را در فضای ذخیره سازی جانبی یا فضاهای ابری به عنوان پشتیبان داشته باشید). در انتشار نسخه های جدید اپلیکیشن به این کلید نیاز داریم و در صورت استفاده از امضایی غیر از امضای با مشخصات اولیه، کاربر قادر به بروزرسانی اپلیکیشن نصب شده روی دیوایس خود نخواهد بود. همچنین در صورت مغایرت بین امضای اولیه با امضاهای بعدی، امکان انتشار نسخه جدید اپلیکیشن در اپ استورها وجود نداشته و نسخه جدید توسط اپ استور تایید نمی‌شود مگر آنکه امضاء نسخه جدید با نسخه فعلی یکسان باشد.

با تایید فرم ، امضا ایجاد شده و به پنجره قبل باز می‌گردم:

امضا کردن فایل apk

امضای من با نام mysignature.jks ایجاد شد و برای دفعات بعد یا سایر پروژه‌ها با انتخاب گزینه Choose existing می‌توانیم مجدد از این امضاء استفاده کنیم.
با تیک زدن Remember passwords در دفعات بعد نیاز به وارد کردن مجدد رمزهای عبور نیست (این قابلیت باعث نشود تا رمز عبوری که تعیین کرده اید را فراموش کنید. مجدد تاکید می‌کنم این رمز عبور را حتما در جایی یادداشت کنید).

انتخاب release در قسمت Build Type

نکته: برای سازگاری برنامه با نسخه‌های قدیم و جدید سیستم عامل اندروید و همچنین انتشار آن در فروشگاه Google Play لازم است هردو گزینه V1 (Jar Signature) و V2(Full APK Signature) انتخاب شده باشد.

Destination Folder مربوط به محل ذخیره سازی خروجی apk یا aab است:

انتخاب محل ذخیره فایل apk یا aab در اندروید استودیو

با توجه به اینکه قصد انتشار اپلیکیشن را دارم، در قسمت Build Type گزینه release باید انتخاب شده باشد. در بخش Signature Versions دو گزینه Jar Signature و Full APK Signature وجود دارد. من هردو گزینه را انتخاب کرده، منتظر می مانم تا عمل Generate انجام شود.

ساختن فایل apk در اندروید استودیو

ساخت apk با موفقیت انجام شد:

ساختن فایل apk در اندروید استودیو

حالا اپلیکیشن من آماده انتشار و نصب روی دیوایس کاربران است.
در کنار فایل apk یک فایل دیگر با نام output.json ساخته شده که حاوی اطلاعات فایل نصبی (مانند ورژن و..) است. اگر درباره JSON اطلاعاتی ندارید، این فایل را نادیده بگیرید. جهت آشنایی با فرمت JSON این مطلب را دنبال کنید.

نکته: اگر در هنگام گرفتن خروجی با ارور SSL peer shut down incorrectly مواجه شدید ایراد مربوط به عدم برقراری ارتباط اینترنت یا ارتباط ضعیف است (یا ممکن است نیاز به تغییر IP داشته باشید):
ارور SSL peer shut down incorrectly در اندروید استودیو

گرفتن خروجی aab نیز به همین صورت است با این تفاوت که در مرحله اول گزینه Android App Bundle را انتخاب می‌کنیم:

ساخت خروجی فایل aab در اندروید استودیو

امضای فایل aab در اندروید استودیو

گرفتن خروجی از پروژه اندرویدی با فرمت aab

دانلود فایل این آموزش با فرمت PDF
تعداد صفحات : ۱۴
حجم : ۱ مگابایت
قیمت : رایگان
تاریخ بروزرسانی آموزش : ۹۹/۱۱/۱۲
دانلود رایگان با حجم ۱ مگابایت لینک کمکی
این مطلب چقدر برایتان مفید بود؟ لطفا امتیاز دهید
4.5/5 - (63 امتیاز)
پرسش‌ها و دیدگاه‌های کاربران
دوره آموزش برنامه نویسی اندروید
دوره آموزش برنامه نویسی اندروید

با دریافت این دوره به تمامی آموزش‌های غیر رایگان و رایگان موجود در وب سایت دسترسی دارید که تخفیفی برای آموزش‌های غیر رایگان نیز درنظر گرفته شده. این پکیج به دو صورت دانلودی و ارسال پستی ارائه می‌گردد.
آموزش‌های اندروید استودیو در دو دسته «پایه» و «تکمیلی» منتشر می‌شوند.
آموزش‌های پایه شامل مباحث اصلی و ضروری و آموزش‌های تکمیلی مطالبی است که می‌بایست در کنار مطالب اصلی بررسی شود.
با خرید این دوره، به تمامی آموزش‌های غیر رایگانی که در آینده منتشر می‌شود نیز به صورت رایگان دسترسی خواهید داشت!

یک دیدگاه بنویسید

پرسش‌های زیر تایید و پاسخ داده نـــخواهند شد:
۱: جزء موارد مطرح شده در صفحات مشکلات و پرسش‌های رایج و بروزرسانی‌های محتوای آموزشی باشد
۲: سوال قبلا توسط کاربران در دیدگاه‌ها مطرح و پاسخ داده شده باشد
۳: پرسش خارج از مبحث آموزشی موجود در این صفحه باشد