好久没有发博客了,原因是换工作了,今天端午假期,所以来发一篇博客,
多渠道打包,借助友盟移动统计分析,希望对各位有所帮助
多渠道打包的理解:
渠道包就是要在安装包中添加渠道信息,也就是channel,对应不同的渠道,例如:小米市场、豌豆荚、应用宝市场等
为什么要提供多渠道包?
我们要在安装包中添加不同的标识,应用在请求网络的时候携带渠道信息,方便后台做运营统计(这就是添加渠道信息的用处)。
实现多渠道打包的原理
一般来讲,这个渠道的标识会放在AndroidManifest.xml的Application的一个Metadata中。然后就可以在java中通过API获取对应的数据了。
进入主题
注册友盟,并且添加新应用,获得AppKey
引入依赖
compile ‘com.umeng.sdk:common:latest.integration‘
AndroidManifest.xml 添加appkey 和渠道占位符
<!--友盟统计相关 meta-data--> <meta-data android:value="5b2497a6f29d985d850001b3" android:name="UMENG_APPKEY"/><!--友盟 appkey--> <meta-data android:value="${UMENG_CHANNEL_VALUE}" android:name="UMENG_CHANNEL"/><!--渠道号-->
在build.gradle中去动态的替换掉我们的占位符的value即可
defaultConfig { applicationId "com.zhangqie.channel" minSdkVersion 15 targetSdkVersion 22 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true //突破应用方法数65535的一个限制 manifestPlaceholders = [UMENG_CHANNEL_VALUE:"name"] }
签名文件生成 可以看我的博客Android Studio apk打包,keystore.jks文件生成,根据keystore密钥获取SHA1安全码
签名配置
signingConfigs { debug {} //release包添加签名文件配置 release{ storeFile file("../channle.jks") storePassword "123456" keyAlias "channle" keyPassword "123456" } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘ signingConfig signingConfigs.release } }
渠道指定两种方式
productFlavors{ xiaomi{ //manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"] } wandoujia{ //manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"] } } //2 productFlavors.all{ flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] }
把前面的注释取消, 第2处下面代码删除就是第二种方式
之后再控制台 Terminal
输入 gradlew assembleRelease
执行打包(注意: Mac的要这样添加 ./gradlew assembleRelease
)
当然 gradlew assembleDebug 这是debug的
也可以指定打包 gradlew assembleWandoujiaRelease
豌豆荚的
执行打包
我弄时遇到一个坑
原因是我的 位置顺序放错误了
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘ signingConfig signingConfigs.release } } signingConfigs { debug {} //release包添加签名文件配置 release{ storeFile file("../channle.jks") storePassword "123456" keyAlias "channle" keyPassword "123456" } }
所以要注意,
打包完成
生成apk包了
我们可以改变apk输出的名称
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘ signingConfig signingConfigs.release //指定我们release包的输出文件名 就是我们的渠道名字 applicationVariants.all{ variant -> variant.outputs.each { output-> def outFile = output.outputFile if (outFile != null && outFile.name.endsWith(".apk")){ def fileName = "${variant.productFlavors[0].name}"+".apk" output.outputFile = new File(outFile.parent,fileName); } } } } }
输入 gradlew assembleRelease
执行打包
名称已改变,根据自己的需要设置,
这样我们多渠道打包就完成了
原文地址:https://www.cnblogs.com/zhangqie/p/9190457.html