多渠道打包

無痕不想說話發表於2019-01-02

本文介紹兩種多渠道打包方式:

  • productFlavor (每次打包都要重新構建一遍,效率比較慢)

      productFlavors {
      //新建產品A
      A {
          //程式包名
          applicationId "com.xxx.xxx"
          //不同渠道號
          manifestPlaceholders = [UMC:"xxx"]
          //versionName
          versionName "1.0.0"
          //versionCode
          versionCode 1
    
      }
      //新建產品B
      B {
          //程式包名
          applicationId "com.xxx.xxx2"
          //不同渠道號
          manifestPlaceholders = [UMC:"xxx2"]
          //versionName
          versionName "2.1.1"
          //versionCode
          versionCode 2
      }
    複製程式碼

    productFlavor 是defaultConfig的子集,defaultConfig {}中的屬性在productFlavors{}中都可以單獨設定,若重複會以productFlavors{}中的屬性為最終屬性

    buildConfigField 自定義配置常量 applicationId 配置包名 其他 任何做區分的都可以在這裡配置,打出多渠道包、

  • walle (效率高,參考美團1分鐘打900渠道包)

    1. 背景

    APK Signature Scheme v2的推出,在META-INF目錄內新增空檔案的做法導致無法簽名,所以採用直接修改APK signing block。

    2. 步驟:

    //新增外掛 dependencies { classpath "com.meituan.android.walle:plugin:latest.integration" }

    //使用外掛 apply plugin: 'walle'

    //新增簽名資訊 signingConfig signingConfigs.sankuai

    //依賴庫檔案 dependencies { compile 'com.meituan.android.walle:library:1.0.3' }

    //新增配置資訊

    walle {
        apkOutputFolder = new File("${project.buildDir}/outputs/channels"); //在app/build/outputs/channels 下生成xxx.apk
        // 定製渠道包的APK的檔名稱
        ${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk
        apkFileNameFormat = '${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';
        // 渠道配置檔案   其中${project.getProjectDir()}指的是app目錄
        channelFile = new File("${project.getProjectDir()}/channel")
    }
複製程式碼
//建立渠道檔案channel.txt

//打包命令

生成渠道包      gradlew clean assembleReleaseChannels
支援 productFlavors gradlew clean assembleMeituanReleaseChannels
生成單個渠道包  gradlew clean assembleReleaseChannels -PchannelList=渠道名稱
生成多個渠道包  gradlew clean assembleReleaseChannels -PchannelList=渠道名稱,渠道名稱
複製程式碼

相關文章