Android Studio Gradle 多渠道打包

第一步:配置AndroidManifest.xml

  

如果没有多渠道打包的话,我们需要每次修改android:value="umeng",然后一次次的重新打包。
如果使用Gradle多渠道打包的话,我们需要把 value 的值设置成:

  

其中${UMENG_CHANNEL_VALUE}中的值就是你在gradle中自定义配置的值。

第二步:在build.gradle设置productFlavors

productFlavors {  
     wandoujia {  
          manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]  
     }  
  
     xiaomi{  
          manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]  
     }  
  
     qq {  
          manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qq"]  
     }  
  
     _360 {  
          manifestPlaceholders = [UMENG_CHANNEL_VALUE: "360"]  
     }  
  
} 

其中[UMENG_CHANNEL_VALUE: “wandoujia”]就是对应${UMENG_CHANNEL_VALUE}的值
可以将代码简化成:

android {   
    productFlavors {  
        wandoujia{}  
        xiaomi{}  
        qq{}  
        _360 {}  
    }   
  
    productFlavors.all {   
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]   
        }  
}  

其中name的值对相对应各个productFlavors的选项值,这样就达到自动替换渠道值的目的了。
这样生成apk时,选择相应的Flavors来生成指定渠道的包就可以了,而且生成的apk会自动帮你加上相应渠道的后缀,非常方便和直观。大家可以自己反编译验证。

第三步: 生成渠道包

Android Studio中的下方底栏中有个命令行工具Terminal,你也可以直接打开,输入命令:

gradle assembleRelease  

也可以使用CMD命令,进入到项目所在的目录,直接输入命令(注意 :需要配置gradle 的环境变量)

第四步: 在 build.gradle 进行签名配置

//签名  
signingConfigs{  
     release {  
          storeFile file("keystore路径")  
          storePassword "keystore密码"  
          keyAlias "别名"  
          keyPassword "别名密码"  
     }  
}  
  
buildTypes {  
        release {  
            runProguard false  
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  
            signingConfig signingConfigs.release  
        }  
    }  

第五步:修改导出包的APK名称
当我们的渠道包多起来以后为了方便运营人员查看和投放市场,所以我们需要根据渠道自定义apk的名称:

android {  
  
     buildTypes {  
  
        release {  
            runProguard false  
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  
            signingConfig signingConfigs.release  
            //输出文件格式  
            applicationVariants.all { variant ->  
                variant.outputs.each { output ->  
                    def outputFile = output.outputFile  
                    def fileName = outputFile.name.replace("app", readApkName() + "-" + defaultConfig.versionName + "-" + releaseTime())  
                    def file = new File(outputFile.parent, fileName)  
                    if (file.exists()) {  
                        file = new File(outputFile.parent, fileName.replace("-release", "2-release"))  
                    }  
                    output.outputFile = file  
                }  
            }  
        }  
  
} 

最后打包完成之后,apk文件就会生成在项目的build\outputs\apk下。

最后:完整的Gradle 代码

android {   
signingConfigs{  
     release {  
          storeFile file("keystore路径")  
          storePassword "keystore密码"  
          keyAlias "别名"  
          keyPassword "别名密码"  
     }  
}  
 buildTypes {  
  
        release {  
            runProguard false  
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  
            signingConfig signingConfigs.release  
            //输出文件格式  
            applicationVariants.all { variant ->  
                variant.outputs.each { output ->  
                    def outputFile = output.outputFile  
                    def fileName = outputFile.name.replace("app", readApkName() + "-" + defaultConfig.versionName + "-" + releaseTime())  
                    def file = new File(outputFile.parent, fileName)  
                    if (file.exists()) {  
                        file = new File(outputFile.parent, fileName.replace("-release", "2-release"))  
                    }  
                    output.outputFile = file  
                }  
            }  
        }  
 productFlavors {  
        wandoujia {}  
        xiaomi {}  
        yingyongbao {}  
        360 {}  
    }   
  
    productFlavors.all {   
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]   
        }  
}

最后,喜欢的同学可以关注我的微信公众号,我会不定期的写一些相关的文章,吹一些牛逼、砍一些大山、来一些心灵鸡汤、搞一些不为人知的故事

Android Studio Gradle 多渠道打包_第1张图片
qrcode_for_gh_5ab52f4f1c92_430.jpg

↑↑↑↑↑识别二维码就行↑↑↑↑↑

你可能感兴趣的:(Android Studio Gradle 多渠道打包)