1.友盟打包方案
定义: 友盟的定义是在应用中添加一个标识符,当应用在不同的平台被下载安装时,可以检测到用户是从哪个平台下载安装的
接下来实现方法,①:首先去友盟官网申请获取app key 地址是 友盟:
②:在清单文件AndroidManfest.xml的application标签中添加一个meta-data标签定义UMENG_CHANNEL占位符,并填入appkey
<meta-data android:name="UMENG_APPKEY" android:value="60c2d2cca82b08615e4e9558"/> <!--自己申请的App key--><meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" /> <!--渠道号,多渠道这里使用了占位符$-->
③:所需要的权限在清单文件中写入
<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name=" android.permission.ACCESS_NETWORK_STATE" />
④:在app的build.gradle文件中写入,这是第一种方式
productFlavors { wandoujia { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"] } xiaomi { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"] }}
第二种方式,优化方式一
//优化方式一productFlavors{ wandoujia{ //manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"] } xiaomi{ //manifestPlaceholders=[UMENG_CHANNEL_VALUE: "xiaomi"] }}productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]}
优化方式二:上面经过签名打包之后默认的apk命名规范 xxx-xiaomi-release.apk,但是我们想包含版本信息如xxx-xiaomi-release-1.0.apk,所以最终优化如下
productFlavors{ wandoujia{ //manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"] } xiaomi{ //manifestPlaceholders=[UMENG_CHANNEL_VALUE: "xiaomi"] }}productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]}applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { def fileName = outputFile.name.replace(".apk", "-${defaultConfig.versionName}.apk") output.outputFile = new File(outputFile.parent, fileName) } }}
⑤你可能会报以下错误 ,因为更新as3.0以后会同步失败
正确的写法:
android.applicationVariants.all { variant -> variant.outputs.all { outputFileName = "${variant.name}-${variant.versionName}.apk" }}
然后 进行打包 就会有多个渠道供自己选择:
说明一下,2年Android经验 其实一直很想写些东西,这样才能不断学习不断进步,记录自己开发中遇到的各种问题,希望大家多多指点,积极改正,一起学习进步。