ساخت فایل 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
تعداد صفحات : ۹
حجم : ۱ مگابایت
قیمت : رایگان

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

    با سلام
    دلیل امدن این پیام چیه من ide شو هم درست نصب کردم Missing Gradle Project Information.Please check if the IDE successfully synchronized its state with the Gradle Project Model

  • amir گفت:

    سلام
    لطفا توضیحی برای ارور این خروجی که در مرحله آخر کامپایل میده را به من بدید…
    Specify the output path in Configure Project

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

      ظاهرا که گفته مسیر خروجی رو داخل تنظیمات پروژه مشخص کنید اما فکر نمیکنم داخل اندروید استودیو همچین اروری بگیرید. احیانا از IntelliJ IDEA استفاده نمیکنید؟

  • مرتضی موسوی گفت:

    سلام.
    در ورژن ۳ به بالا اندروید استدیو چطور باید خروجی بگیرم؟
    اصلا چیزی بنام Generate Signed APK در منوی build وجود نداره.

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

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

  • امیر گفت:

    با سلام خدمت همه دوستان عزیز.compile sdk version برنامه من رو ۲۵ هستش که شامل اندروید های ۶ و ۷ می باشد.من میخوام این ورژن رو پایین تر بیارم ولی هر کاری میکنم ارور میده و میگه باید از sdkversion 25 و یا ۲۶ استفاده کنی.راه حل چیست دوستان؟با تشکر

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

      اخطارهایی که میدونه رو به دقت بررسی بفرمایید. ممکنه برای تغییر CompileSDK ابزار نسخه مربوطه رو نصب نداشته باشید

  • نازنین گفت:

    سلام خسته نباشید ، من قبلا از قسمت output فایل نصبی رو برمیداشتم و برای دوستام میفرستادم اما ی بار مسیر ساخت پروژه هامو عوض کردم دیگه از اون به بعد پروژه هایی که میفرستم اجرا نمیشه و موقع باز شدن ارور force میدن . در ضمن حجمشون هم تو output کم شده مثلا اگه قبلا بعد اجرا فایل apk توی output حدود یک و خورده ایی mg بود الان به ۱mgهم نمیرسه ، خواهش میکنم کمکم کنید.

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

      فکر نمیکنم تفاوت خاصی بین این فایل و فایلی که موقع خروجی گرفتن مسیر رو مشخص میکنید باشه. فایلی که اندروید استودیو بهتون مسیر میده رو تست کردین؟

  • محمد گفت:

    سلام. ممنون از آموزشهای کامل و عالیتون.
    میشه کاری کرد که اپلیکیشن فقط روی گوشی های مثلا سامسونگ نصب بشه و رو گوشیهای دیگه نصب نشه ؟

  • شایان گفت:

    سلام وقت بخیر.
    من میخوام پکیج نیم رو تغییر بدم این کارو با موفقیت انجام میدم اما برای خروجی تمام مراحل رو میرم مشکل دارم :
    این اخطارمیاد :
    Cannot start compiler: the SDK is not specified for module “main”.
    Specify the SDK at Project Structure dialog.

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

      مطابق متن اخطار Project Structure رو چک کنید

  • Hamid گفت:

    سلام
    من یه پروژه درست کردم
    خروجی هم گرفتم ولی خاستم که برنامه رو اجرا کنم ،اجرا نشد
    مشکل من از کجا بوده
    راهنمایی کنید خاهشن

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

      سوالی که شما پرسیدید رو کسی نمیتونه راهنمایی کنه. به هیچ یک از جزئیات اشاره نکردید (اروری که میگیرید، اینکه در کدوم مرحله مشکل دارید و…)

  • رضا گفت:

    سلام من وقتی که در اندروید استودیو میخوام خروجی بگیرم قسمت 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. سید مهدی مطهری (مدیر) گفت:

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

پاسخ دهید

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

کد امنیتی *