کنترل ورژن apk اندروید با گردل

میشه گفت یکی از اون دردسرهاییه که همیشه داریم و هممون مجبور شدیم یجوری دستی کنترلش کنیم. ولی خب مثلا برنامه نویسیم هااا چرا دستی؟!؟! میتونیم با یه تیکه کد گردل حلش کنیم و دیگه از بقیه نشنویم "برنامه ات نصب نمیشه!!" :| what da ffffffffff

وقتی نسخه جدیدی تولید میکنیم، versionCode رو افزایش میدیم و apk رو تولید میکنیم ولی همه فایلهایی که تولید میشن اسمشون app-release.apk و گاها اشتباهی رخ میده و نسخه قدیمی میره برای تست و نتیجه این میشه که یا نصب نمیشه یا هیچی تغییر نکرده. واس همین بهتره از این تیکه کد استفاده کنیم و فایلهای خروجی با اسمهای مناسب تولید بکنیم.


اینم تیکه کدی که گفتم
اینم تیکه کدی که گفتم

چند تا متغیر اولی که برای مشخص کردن ورژن اپلیکیشن هستن و از این به بعد فقط قراره این متغیرها رو ست کنین و فایل خروجی با نام و ورژن مناسب تولید خواهد شد. این که چجوری این عددها رو تغییر بدین بسته به شرایط و تصمیم خودتونه ولی خب پایین یه مثاله که حسابش دستتون بیاد.

ext.versionMajor: مشخص میکنه که تغییرات بزرگی انجام شده و فیچر جدید اضافه شده

ext.versionMinor: مشخص میکنه که تغییرات کوچیکی انجام شده

ext.versionPatch: اینم برای رفع باگ و تغییرات خیلی کوچیک

ext.versionClassifier: از این برای مشخص کردن وضعیت اپلیکیشن استفاده میشه

مقادیرش میتونه alpha, beta, snapshot, release و یه همچین چیزایی باشه.

ext.isSnapshot: اینم اگه ترو باشه یعنی وضعیت مناسب برای انتشار نیست و همچین چیزی


applicationVariants.all { variant ->
   variant.outputs.all {
      outputFileName = &quot${fileName}-${variant.versionName}.apk&quot
   }    
}

این تیکه مشخص میکنه نام فایل رو چجوری ایجاد کنه


versionCode generateVersionCode()
versionName generateVersionName()

اینم از توابعی که پایین می بینیم استفاده میکنه تا versionCode و versionName رو برای اپلیکیشن مشخص کنه و اینطوری اروری هنگام نصب پیش نمیاد.


private Integer generateVersionCode() {
    return ext.versionMajor + ext.versionMinor + ext.versionPatch
}
private String generateVersionName() {
    String versionName = &quot${ext.versionMajor}.${ext.versionMinor}.${ext.versionPatch}&quot
    if (ext.versionClassifier == null && ext.isSnapshot) {
        ext.versionClassifier = &quotSNAPSHOT&quot
    }
    if (ext.versionClassifier != null) {
        versionName += &quot.&quot + ext.versionClassifier
    }
    return versionName;
}

اینم که توضیح خاصی نمی خواد چیز ساده ایه.


میشه کارای تولید فایل apk رو هم با گردل یه buildscript بنویسیم با یوزر پس و آدرس فایل کلیدمون و یه تسکش کنیم که با اجرای یه تسک همه این کارا انجام بشه. ولی حالا شاید تو یه پست دیگه. فعلا ;)