Android多渠道打包——使用gradle進行多渠道自動打包

個人博客CoorChice,https://chenbingx.github.io/ ,最新文章將會首發CoorChice的博客,歡迎探索哦 !
同時,搜索微信公眾號CoorChice,或掃描文章末尾二維碼,可以關注我的微信公眾號。同期文章也將會優先推送到微信公眾號中,以提醒您有新鮮文章出爐。

前言

在我的另一篇文章中介紹了如何使用Python進行多渠道打包,下面再把傳統的gradle多渠道打包方式介紹一下,同樣是以友盟SDK為例。

打包前配置

配置gradle

//主要是配置android{}封包下的內容
android {
            。
            。
            。
signingConfigs { //配置簽名文件,可以有多個
        icekey { 
            keyAlias 'icekey'
            keyPassword '填入key的密碼'
            storeFile file('/Users/**********/icekey.jks')  //key所在文件夾
            storePassword '填入store的密碼'
        }
    }
    
    buildTypes { //配置構建版本,可以有多個
        //測試版本
        debug {
            debuggable true
            zipAlignEnabled false
            shrinkResources false
            signingConfig signingConfigs.icekey
            minifyEnabled false
        }

        //發布版本
        release {
            debuggable false //是否開啟測試
            zipAlignEnabled true //是否啟用zipAlign壓縮優化
            shrinkResources true //是否刪除未被使用的資源文件
            minifyEnabled false  //是否開啟混淆
            signingConfig signingConfigs.icekey //簽名文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            //指定混淆文件
        }

        //空版本
        source {
            debuggable true //是否開啟測試
            zipAlignEnabled true //是否啟用zipAlign壓縮優化
            shrinkResources true //是否刪除未被使用的資源文件
            minifyEnabled false  //是否開啟混淆
            signingConfig signingConfigs.icekey //簽名文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            //指定混淆文件
        }
    }
    
    //創建渠道名稱,main{}是一個不合法名稱
    productFlavors {
        baidu {}
        huawei {}
        xiaomi {}
    }
    
    //    這里體現在AndroidManifest中的
//    <meta-data
//    android:name="UMENG_CHANNEL"
//    android:value="${UMENG_CHANNEL_VALUE}"/>
    //運行自動賦值給AndroidManifest.xml中的${UMENG_CHANNEL_VALUE}
    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }

    lintOptions { //配置打包線程的操作
        ignoreWarnings true //忽略警告
        checkReleaseBuilds false //是否檢查release版本
        abortOnError false //出現錯誤是否終止
    }
    
        applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith(".apk")) {  //判斷是否是apk
                //這個函數生成了apk的名稱
                def apkName = "ice-${variant.productFlavors[0].name}-${defaultConfig.versionName}.apk"
                output.outputFile = new File(outputFile.parent, apkName) //輸出文件
            }
        }
    }
    
            。
            。
            。
}

配置AndroidManifest.xml

在Application標簽下添加:

 <!--友盟的key-->
    <meta-data
      android:name="UMENG_APPKEY"
      android:value="57bf375ee0f5*******018a3"/>
    <!--友盟渠道號-->
    <meta-data
      android:name="UMENG_CHANNEL"
      android:value="${UMENG_CHANNEL_VALUE}"/> //這樣寫就能夠讀取gradle中的[UMENG_CHANNEL_VALUE: name]的name的值了。

開始自動打包

在Android Studio的的終端機中輸入

./gradlew assembleRelease  //打包所有渠道的Release版包
./gradlew assembleSource //打包所有渠道的Source版包
CoorChice的公眾號
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容