Mahdyar's Blog

My Thoughts

بیلد، امضاکردن و ریلیز یک برنامه اندروید در فلاتر

ریلیز یک برنامه اندروید در فلاتر رو قراره برای گوگل‌پلی، بازار و مایکت با هم بررسی کنیم. با من همراه باشید.

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

اضافه کردن آیکون به برنامه

اولین قدم در ریلیز یک برنامه اندروید در فلاتر برای گوگل پلی، بازار یا مایکت اضافه کردن آیکون به اون هست. به صورت پیش‌فرض اپلیکیشن شما آیکون فلاتر رو داره:

ریلیز یک برنامه اندروید در فلاتر

برای تغییر آیکون می‌تونید از پکیج flutter_launcher_icons استفاده کنید. ولی خب به صورت دستی هم می‌تونید:

۱- سعی کنید از اصول متریال برای طراحی آیکون استفاده کنید: اطلاعات بیشتر

۲- در مسیر زیر فایل آیکون‌تون رو می‌تونید اضافه کنید:

<app dir>/android/app/src/main/res/

برای این منظور، هم می‌تونید از این پروژه استفاده کنید، هم با راست کلیک روی فولدر app و گزینه add asset خود اندروید استودیو براتون زحمت تهیه‌ش توی سایزهای مختلف رو می‌کشه. 🙂

اگر آیکون‌تون رو هم‌نام با آیکون قبلی نذاشتید، باید اون رو هم در AndroidManifest.xml آپدیت کنید:

<application android:icon="@mipmap/my_customized_icon"...

در آخر هم برنامه‌تون رو یک‌بار ران کنید تا مطمئن بشید تغییرات اعمال شدن.

امضای برنامه برای ریلیز یک برنامه اندروید در فلاتر

برای انتشار برنامه در مارکت‌های اندرویدی، نیاز هست که برنامه‌تون امضاشده باشه. مراحلش به این ترتیبه:

در مک/لینوکس:

keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

در ویندوز:

keytool -genkey -v -keystore c:\Users\USER_NAME\key.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias key

این دستور، یک فایل به نام key.jks به home directory شما اضافه می‌کنه.

اگر این فایل رو در جای دیگه‌ای هم دوست داشتید می‌تونید ذخیره کنید، ولی حواستون باشه توی .gitignore باشه و پیش خودتون نگه‌ش دارید! اگر این فایل رو از دست بدید، دیگه نمی‌تونید آپدیت برای برنامه‌تون منتشر کنید.

اگر دستور keytool در ویندوز براتون کار نمی‌کنه، باید به pathتون اضافه‌ش کنید.

با دستور flutter doctor -v می‌تونید مسیر جاوا رو ببینید، keytool در همون مسیر قراره داره و کافیه در آخر خط java رو با keytool جایگزین کنید و بعدش pathتون رو آپدیت کنید.

یک فایل به نام key.properties در مسیر زیر بسازید:

 <app dir>/android/key.properties

که اشاره می‌کنه به keystore شما:

storePassword=<password from previous step>
keyPassword=<password from previous step>
keyAlias=key
storeFile=<location of the key store file, such as /Users/<user name>/key.jks>

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

۱. به مسیر زیر برید:

<app dir>/android/app/build.gradle

و قبل از بلاک زیر:

   android {
      ...
   }

اطلاعات ketstore خودتون رو قرار بدید:

   def keystoreProperties = new Properties()
   def keystorePropertiesFile = rootProject.file('key.properties')
   if (keystorePropertiesFile.exists()) {
       keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
   }

   android {
         ...
   }

۲. کد رو قبل از بلاک زیر قرار بدید:

   buildTypes {
       release {
           // TODO: Add your own signing config for the release build.
           // Signing with the debug keys for now,
           // so `flutter run --release` works.
           signingConfig signingConfigs.debug
       }
   }

با اطلاعات امضاتون:

   signingConfigs {
       release {
           keyAlias keystoreProperties['keyAlias']
           keyPassword keystoreProperties['keyPassword']
           storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
           storePassword keystoreProperties['storePassword']
       }
   }
   buildTypes {
       release {
           signingConfig signingConfigs.release
       }
   }

حواستون باشه که signingConfigs.debug هم به signingConfigs.release باید تغییر کنه.

قبل از بیلد حتماُ فایل AndroidManifest.xml رو دوباره چک کنید و مطمئن بشید همونی هست که می‌خواید.

ریلیز یک برنامه اندروید در فلاتر

قبل از بیلد، حتما دستور زیر رو اجرا کنید تا مطمئن بشید نسخهٔ قبلی برنامه‌تون نمونده:

flutter clean

با دستور زیر می‌تونید فایل apk نسخهٔ ریلیزتون رو بیلد کنید:

flutter build apk --release

اگر اولین برنامه‌تون رو دارید امضا می‌کنید، احتمالاً با مشکل unknown developer مواجه می‌شید. برای حل این مشکل می‌تونید به گوگل درخواست بدید که امضای شما رو بشناسه. البته اگر در پلی‌استور قراره منتشر بشه نیازی به این‌کار نیست.

شاد باشید 😉