آماده‌ کردن برنامه برای انتشار

در این صفحه کارهای اصلی را که لازم است پیش از انتشار برنامه‌تان انجام دهید با هم مرور می‌کنیم. بعد از انجام این چند قدم ساده، شما فایل apk رمزگذاری شده‌ای در اختیار خواهید داشت که می‌توانید در کافه‌بازار بارگذاری نمایید و برای نصب در اختیار کاربران قرار دهید.

 

۱.  قبل از هرکاری اطمینان حاصل کنید که نام‌بسته (package name) مناسبی برای برنامه‌تان انتخاب کرده‌اید:

با توجه به اینکه پس از انتشار برنامه امکان تغییر نام‌بسته وجود نخواهد داشت، پیش از اینکه اولین نسخهٔ برنامه را در اختیار کاربران قرار دهید، حتماً از مناسب بودن package nameای که انتخاب کرده‌اید اطمینان حاصل نمایید. برای یادگیری نحوهٔ انتخاب package name می‌توانید مقالهٔ «اصول نام‌گذاری بستهٔ برنامه» را مطالعه نمایید.

۲. رمزگذاری بسته

سیستم‌عامل اندروید قبل از اینکه اجازه بدهد برنامه‌ای روی دستگاه نصب شود، بررسی می‌کند که برنامه با یک certificate    به‌ صورت دیجیتالی امضا شده باشد. پس اگر برنامه‌ای به این صورت رمزگذاری نشده باشد، امکان نصب آن روی دستگاه کاربران وجود نخواهد داشت. حالا این certificate چه اطلاعاتی را در خودش نگهداری می‌کند و اصلاً چیست؟

این سند، گواهی، certificate یا هر چه که دوست دارید آن را خطاب کنید برای تشخیص هویت صاحب اصلی برنامه استفاده می‌شود و فقط توسعه‌دهندهٔ برنامه هست که private key لازم برای دسترسی به این certificate را دارد. مجموعه‌ای که این certificate و کلید آن را در بر می‌گیرد KeyStore نام دارد و از اینجا به بعد بیشتر با این اسم سروکار خواهیم داشت.

نگاه کلی به روش‌های امضا کردن برنامه


برای امضا کردن برنامه ۲ راه وجود دارد که هرکدام در شرایط متفاوتی استفاده می‌شوند؛ شما می‌توانید برنامه را در debug mode یا release mode امضا کنید. 

زمانی که در حال ساخت برنامهٔ خودتان هستید، آن را در debug mode امضا می‌کنید و زمانی که قصد انتشار برنامه را دارید، آن را در release mode امضا می‌کنید. اولین روش که فقط برای تست برنامه است، استفاده از کلید دیباگ اندروید است. این کلید توسط android SDK ساخته و در زمان ساخت و تست برنامه استفاده می‌شود؛ هدف از استفاده از این کلید سرعت دادن به تست برنامه است. برای امضای برنامه در release mode شما باید KeyStore مختص خودتان را بسازید.

 

امضای برنامه در debug mode


در زمان ساخت و تست برنامه، شما آن را با فایل کلیدی که توسط android SDK tools ساخته شده امضا می‌کنید. این فایل کلید، یک private key با پسوردی شناخته شده‌ دارد تا شما بدون اینکه هر بار برای اجرا و تست برنامه پسورد را تایپ کنید بتوانید به کار خود سرعت دهید.

برای مثال Android Studio به‌صورت خودکار برنامهٔ شما را زمانی که آن را برای تست اجرا می‌کنید از محیط توسعه‌ٔ نرم‌افزار امضا می‌کند و ممکن است در این حالت شما متوجه فرآیند امضا شدن برنامه نشوید.

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

به‌صورت پیش‌فرض، تنظیمات دیباگ از یک Debug KeyStore با پسوردی شناخته شده و یک private key با پسوردی شناخته شده استفاده می‌کند. شما می‌توانید Debug KeyStore را در مسیر زیر پیدا کنید:

 $HOME/.android/debug.keystore

 

امضای برنامه در release mode 


بعد از اینکه مراحل ساخت و تست برنامه را انجام دادید لازم است بسته‌ای را که مناسب ارائه به کاربران است تولید کنید. در این حالت شما باید برنامه را با certificateای تنها مختص شماست و فقط خودتان از پسورد و private key آن آگاه هستید امضا نمایید. به‌ صورت کلی این کار شامل مراحل زیر می‌شود:

۱. یک KeyStore بسازید. 

KeyStore یک فایل باینری است که مجموعه‌ای از private keyها را در بر می‌گیرد. بعد از ساخت این فایل، شما باید از آن مراقبت نمایید و ترجیجاً در چند جای امن نگهدارید تا احتمال از دست دادن آن را تا حد ممکن کاهش دهید.

یادداشت: در برخی ابزارهای توسعه‌ٔ برنامه مانند Basic4android ممکن است به‌جای KeyStore گزینه‌های معادل مانند Private Sign Key را مشاهده نمایید.

 ۲. یک private key بسازید.

این کلید نشان‌دهندهٔ هویت شخص یا کمپانی توسعه‌دهندهٔ برنامه است.

۳. پیکر‌بندی امضا را به فایل build اضافه کنید:

...
android{
       ...
       defaultConfig { ... }
       signingConfigs {
              release {
                    storeFile file("myreleasekey.keystore")
                    storePassword "password"
                    keyAlias "MyReleaseKey"
                    KeyPassword "password"
               }
       }
       buildTypes {
             release {
                  ...
                  signingConfig signingConfigs.elease
              }
        }
}
...

 

۴. پس از ساخت KeyStore و private key، در اندروید استودیو assembleRelease را فراخوانی کنید.

یادداشت: بعد از امضای برنامه، می‌توانید بستهٔ آماده شده را در مسیر app/build/apk/app-release.apk پیدا کنید.

 

هشدار: حتماً از KeyStore و private key خود چند backup تهیه کنید و آن‌ها را در جایی امن نگهدای کنید. اگر برنامه‌ای را از طریق کافه‌بازار منتشر نمایید و کلید آن را گم کنید، در آینده نمی‌توانید برای آن آپدیت ارائه دهید.

 نحوهٔ امضای برنامه در Android Studio


برای اینکه برنامهٔ خود را در release mode در Android Studio امضا کنید، مراحل زیر را انجام دهید:

۱. در نوار بالای صفحه، گزینهٔ Build و سپس Generate Signed APK را انتخاب کنید.

۲. در پنجره‌ای که باز می‌شود گزینهٔ Create New را انتخاب کنید تا یک KeyStore جدید ایجاد شود.

۳. در پنجرهٔ ایجاد KeyStore جدید، اطلاعات مورد نیاز را ثبت کنید. 

احتیاط: در کادر validity باید مدت زمانی را که این کلید اعتبار دارد ثبت کنید. برای اینکه مطمئن باشید در آینده می‌توانید برای برنامهٔ خود آپدیت ارائه دهید، حداقل زمان اعتبار کلید را ۲۵ سال ثبت نمایید.

 ۴. بعد از تکمیل تمام اطلاعات و انتخاب یک private key مختص خودتان، مسیر ذخیرهٔ فایل APK امضا شده را تعیین کنید و دکمهٔ Finish را انتخاب کنید.

 

نحوه امضای برنامه در Command line

برای امضای برنامه الزاماً به Android Studio نیاز ندارید و می‌توانید در command line با استفاده از ابزار استانداردی که Android SDK و JDK در اختیار شما قرار می‌دهند، بستهٔ برنامه  را امضا کنید. برای امضای برنامه از طریق command line مراحل زیر را انجام دهید:

 

۱. ابتدا با استفاده از keytool یک private key مختص خود تولید نمایید:

 

keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

پس از اجرای دستور فوق، از شما درخواست می‌شود که برای keystore و private key رمز عبور تعیین نمایید و هم‌چنین نام متمایزی برای کلید وارد کنید.

نامی که بجای عبارت alias_name می‌نویسید، در مراحل بعدی و زمان امضای بستهٔ‌ برنامه مورد استفاده قرار خواهد گرفت.

احتیاط: keystore تولید شده در این مرحله در بردارندهٔ یک کلید است که به مدت ۱۰۰۰۰ روز معتبر است. برای اینکه کلید ساخته شده برای استفاده در آپدیت‌های بعدی برنامه معتبر باشد، پیشنهاد می‌کنیم مقدار validity را کمتر از این مقدار در نظر نگیرید.
پس از اینکه تمامی مقادیر خواسته شده را تعیین نمودید، فایل my-release-key.keystore تولید می‌شود.

۲. برنامهٔ خود را در release mode کامپایل کنید تا فایل امضا نشدهٔ APK در اختیار شما قرار گیرد.

۳. در این مرحله می‌بایست با استفاده از ابزاری که jarsigner نام دارد، برنامهٔ خود را با private key که ساخته‌اید امضا نمایید:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name

با اجرای دستور فوق، از شما درخواست می‌شود رمز عبوری را که در مرحلهٔ ۱ برای keystore انتخاب کرده‌ بودید وارد نمایید. چنانچه رمز عبور صحیح را وارد نمایید، فایل APK مورد نظر شما با فایل کلیدی که پیش‌تر ساخته‌اید امضا خواهد شد.

۴. پیشنهاد می‌کنیم که در پایان از امضا شدن APK اطمینان حاصل نمایید.