什么是多渠道包
渠道包就是要在安装包中添加渠道信息,也就是channel,对应不同的渠道,例如:小米市场、360市场、应用宝市场等
产品在不同的应用市场可能有不同的统计需求,需要为每个应用市场的Android包设定一个可以区分应用市场的标识,这个为Android包设定应用市场标识的过程就是多渠道打包。
为什么要提供多渠道包
国内存在着有众多的应用市场,产品在不同的渠道可能有不同的统计需求,为此Android开发人员需要为每个应用市场发布一个安装包,这里就引出了Android的多渠道打包。
在安装包中添加不同的标识,应用在请求网络的时候携带渠道信息,方便后台做运营统计。
通过配置gradle脚本实现多渠道打包
这种打包方式是使用Android Studio的编译工具gradle配合使用的,其核心原理就是通过脚本修改AndroidManifest.xml中的mate-date内容,执行N次打包签名操作实现多渠道打包的需求。然后就可以在java中通过API获取对应的数据。
<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}">
这段配置,value那里就是渠道名称,但是我们在这里不会去写渠道名,写的是一个占位符,后面gradle编译的时候会动态的替换掉它。
// productFlavors是需要打包的纬度名称,下方的脚本是将配置文件中的占位符替换成渠道名称 productFlavors{ xiaomi { dimension "versionCode" } baidu { dimension "versionCode" } vivo { dimension "versionCode" } _360 { dimension "versionCode" } } // 纬度信息 flavorDimensions("versionCode") productFlavors.all {flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] }
AS3.0以后需要将你原来所有的flavor进行统一管理,用属性名flavor dimension进行配置,即使你只有一维属性也需要这样做,否则你就会得到错误。Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html #85
如果没有错误的情况下我们会在Android studio的BuildVariant看到对应的渠道,如下图所示:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String channel=getChannel(); Toast.makeText(MainActivity.this, "channel==" + channel, Toast.LENGTH_SHORT).show(); } private String getChannel() { try { PackageManager pm = getPackageManager(); ApplicationInfo appInfo = pm.getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA); return appInfo.metaData.getString("UMENG_CHANNEL"); } catch (PackageManager.NameNotFoundException ignored) { } return ""; }
buildTypes { debug { // debug 使用release的签名信息,也可以不配置 // 自动签名打包时要用到签名配置 signingConfig signingConfigs.release } release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' // 自动签名打包时要用到签名配置 signingConfig signingConfigs.release // 修改生成的 apk 文件名,输出 apk 名称:MyApp_v1.0.0_2017-11-10_debug.apk;MyApp是app的名称 android.applicationVariants.all { variant -> def suffix if (variant.buildType.name == 'release') { suffix = 'release' } else { suffix = 'debug' } // AS3.0之前这样重命名 // variant.outputs.each { output -> // def outputFile = output.outputFile // if (outputFile != null && outputFile.name.endsWith('.apk')) { // def fileName = "MyApp_v${defaultConfig.versionName}_${releaseTime()}_${suffix}.apk" // output.outputFile = new File(outputFile.parent, fileName) // } // } // AS3.0之后这样重命名 variant.outputs.all { outputFileName = "WanAndroid_v${defaultConfig.versionName}_${releaseTime()}_" + "${variant.productFlavors[0].name}_${suffix}.apk" } } } }
releaseTime()是获取当前时间的方法,配置在build文件的根节点
// 定义打包时间 static def releaseTime() { return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC")) }
签名信息
// 签名配置 signingConfigs { release { storeFile file('/Users/zly/Downloads/DemoProject/WanAndroid/wanAlias.jks') storePassword '123456' keyAlias = 'wanAndroid' keyPassword '123456' } }
根据签名方式可分为两种打包方式
点击ok之后就会生成signingConfigs
在Terminal中使用./gradlew assembleRelease 或者 gradle assembleRelease 可进行所有渠道打包。
也可以单独打包一个渠道,例如 ./gradlew assembleVivoRelease得到Vivo的包
PS:使用gradle命令的前提是配置gradle环境
参考资料:
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算