1.为什么要多渠道打包
●APP发布到不同的应用平台,监测用户是从哪个平台安装的。
●统计用户安装APP来源
●批量修改生成的apk文件名
●可更改包名
●生成不同应用名称或图标
2.Android studio多渠道打包步骤
1.在AndroidManifest.xml中添加占位符
一般都是像友盟,腾讯统计分析SDK中使用的方案,网上友盟的较多,我实际用的是腾讯分析所以就拿腾讯的来说(其实都一样)。
首先,在AndroidManifest.xml的application标签里添加一个meta-data标签定义MTA_CHANNEL占位符,腾讯分析SDK会读取里面的value值传到后台,便于我们日后分析。
<meta-data android:name="MTA_CHANNEL"
android:value="${MTA_CHANNEL_VALUE}" />
2.修改app下的build.gradle文件,在android闭包中添加productFlavors属性配置占位符
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.aimerd.channel"
minSdkVersion 11
targetSdkVersion 21
versionCode 1
versionName "1.0.0"
multiDexEnabled true
}
buildTypes {
release {
// 不显示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
//启用混淆代码的功能
minifyEnabled true
//压缩对齐生成的apk包
zipAlignEnabled true
//指定混淆规则,需要压缩优化的混淆要把proguard-android.txt换成proguard-android.txt
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//移除无用的资源文件
shrinkResources true
//启用multidex的支持
multiDexEnabled true
}
}
productFlavors
baidu {
manifestPlaceholders = [MTA_CHANNEL_VALUE: "baidu"]
}
_91 {
manifestPlaceholders = [MTA_CHANNEL_VALUE: "91"]
}
wandoujia {
manifestPlaceholders = [MTA_CHANNEL_VALUE: "wandoujia"]
}
xiaomi {
manifestPlaceholders = [MTA_CHANNEL_VALUE: "xiaomi"]
}
}
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (variant.buildType.name.equals('release')) {
//生成apk名字的格式:Channel1.0.0_2016-06-22_baidu.apk
//可自定义自己想要生成的格式
def fileName = "Channel${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
def releaseTime() {
return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}
3. build->Generate Signed APK…打包即可
3.打包过程中的一些名词
密钥库
●Key store path:签名文件路径
●Key store password:签名文件密码
●Alias:签名文件别名
●Key password:签名文件别名密码
●Validity (years):以年为单位设置密钥的有效时长。密钥的有效期应至少为 25 年,以便您可以在应用的整个生命期内使用相同的密钥签署应用更新
●Certificate:为证书输入一些关于您自己的信息。此信息不会显示在应用中,但会作为APK的一部分包含在您的证书中
● Signature Version V1 V2
Android 7.0中引入了APK Signature Scheme v2,v1呢是jar Signature来自JDK
V1:应该是通过ZIP条目进行验证,这样APK 签署后可进行许多修改 - 可以移动甚至重新压缩文件。
V2:验证压缩文件的所有字节,而不是单个 ZIP 条目,因此,在签名后无法再更改(包括 zipalign)。正因如此,现在在编译过程中,我们将压缩、调整和签署合并成一步完成。好处显而易见,更安全而且新的签名可缩短在设备上进行验证的时间(不需要费时地解压缩然后验证),从而加快应用安装速度。
解决方案一
v1和v2的签名使用
只勾选v1签名并不会影响什么,但是在7.0上不会使用更安全的验证方式
只勾选V2签名7.0以下会直接安装完显示未安装,7.0以上则使用了V2的方式验证
同时勾选V1和V2则所有机型都没问题
什么是签名 MD5? 如何获取
每个签名文件都有一个数字指纹。相当于是公钥,同一个签名文件的指纹是一样的,不同的签名文件指纹不一样。可以通过检查这个指纹确定是不是使用的同一个签名文件。百度人脸鉴权服务使用的是 MD5方式的指纹。
命令行输入:
keytool –list –v –keystore <签名文件路径>
网友评论