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

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

فایل build.gradle

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

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "26.0.0"

    defaultConfig {
        applicationId "ir.android_studio.myappseven"
        minSdkVersion 10
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:25.3.1'
}

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

گرفتن خروجی apk

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

Generate Signed APK

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

Signature information

Key store path مربوط به تعیین محل ذخیره شدن فایل امضا است. توسط گزینه “…” سمت راست فیلد، وارد پنجره انتخاب مسیر شده و مسیری دلخواه انتخاب می کنم. در انتهای پنجره در قسمت File Name برای فایل امضای خود یک نام وارد می‌کنم. سپس یک پسورد تعیین و به جهت تایید دوبار تکرار می کنم. در دفعات بعد که نیاز به استفاده از این امضا داشته باشم این رمز عبور از من پرسیده خواهد.
قسمت بعد Alias یا نام مستعار است که یک نام دلخواه وارد می کنم و در خط بعد برای نام مستعار هم نیاز به تعریف رمز عبور دارم. گزینه Validity اشاره به زمان معتبر بودن امضا بر حسب سال است که پیش فرض عدد ۲۵ قرار داده شده. در قسمت Certificate اطلاعاتی از جمله نام و نام خانوادگی، ارگان، شهر، استان و کد کشور از ما خواسته شده که تکمیل یک مورد الزامیست.

Signature information

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

کلید امضا ساخته شد

امضای من با نام mysignature.jks ایجاد شد و برای دفعات بعد کافیست با انتخاب گزینه Choose existing بتوانم از این امضا مجدد استفاده کنم.
با تیک زدن Remember passwords برای دفعات بعد کار ساده تر شده و هربار لازم نیست رمز عبور و Alias را وارد کنیم و تنها وارد کردن Master Password که در مرحله بعد تعیین می کنیم کفایت می کند (با این حال این گزینه اختیاری است).

ساخت APK

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

APK ساخته شد

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

مسیر ذخیره سازی APK

حالا اپلیکیشن من آماده انتشار و نصب روی دیوایس کاربران است.

دانلود فایل آموزشی با فرمت PDF
تعداد صفحات : ۹
حجم : ۱ مگابایت
قیمت : رایگان

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

    سلام من وقتی که در اندروید استودیو میخوام خروجی بگیرم قسمت build type خالی هست و هیچ گزینه ای نداره ک انتخاب کنم و ب همین دلیل خروجی نمیزنه.
    لطفا راهنمایی کنید

    1. سید مهدی مطهری (مدیر) گفت:

      کامنت های قبل رو بررسی کنید راهنمایی کرده بودم (اگه اینجا نبود، کامنتای پرسش های رایج)

  • سروش گفت:

    با سلام و احترام نسخه استادیو من ۲٫۳٫۳ اما گزینه signature version ,اکتیو نیست بعدش اینجا قید نشده flavors روی چی بذاریم که برنامه روی تمامی پردازنده ها کار کنه من ی بار روی arm ی بار arm_v7a و x86 گذاشتم هر سه بار سورس تلگرام کرش شد اینو بفرمایین روی چی بذارم اگر نیازه ب آموزش اضافه بشه

    1. سید مهدی مطهری (مدیر) گفت:

      تاکید شده کامنتهای قبلی رو مرور کنید

  • کاوه گفت:

    با سلام و خسته نباشید استاد من فایلی اماده دارم برای ایم که سایت وردپرس خودم را تبدیل به برنامه اندورید کنم ولی هر تغیراتی که ایجاد میکنم در فایلی که برای سایتم میخواهم اماده کنم ایجاد نمیشه
    در قسمت Build Type گزینه release – وجود نداره و طبق اموزشی که داده بودید پیش رفتم ولی نتیجه همان نسخه ازمایشی هست که دانلود کردم
    ممنون میشم راهنمایی کنید

    1. سید مهدی مطهری (مدیر) گفت:

      از نسخه قدیم اندروید استودیو استفاده میکنید؟

      1. کاوه گفت:

        متشکرم از پیگیری و جوابتان
        ورژنی که استفاده میکنم ۲٫۳٫۳ هست که مستقیم از سایت دانلود کردم و بعد دانلود نیز به روز شود وافزونه هایی مورد نیاز را نصب کردم ولی در قسمتی که گفتم
        قسمت اخر ۲ گزینه signature version فعال نیست
        قسمت Build Type گزینه release – وجود نداره
        ممنون میشم راهنمایی کنید
        بدورد

        1. سید مهدی مطهری (مدیر) گفت:

          یه تست بکنید از سمت راست اندروید استودیو (حاشیه محیط توسعه) گزینه Build Variants رو بزندی و ببینید اونجا میشه release انتخاب کرد؟ و آیا مشکل مرتفع میشه؟
          یه اسکرین شات هم از build.gradle بدید ببینم

  • علیرضا گفت:

    سلام
    یک سوال داشتم زمانی که میخواهم یک پروژه میخواهم خروجی بگیرم در قسمت اخر ۲ گزینه signature version فعال نیست
    چگونه فعال کنم؟

    1. سید مهدی مطهری (مدیر) گفت:

      اندروید استودیو نسخه قدیم هست؟

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

کد امنیتی *