使用android studio进行多渠道打包
以本博客记录多渠道打包,以便以后快速复习与使用:
博主采用的友盟统计,大家可以到官方文档上去学习,很齐全,很简单。
- 1. 添加友盟库的依赖
- 2. 在清单文件中去声明我们的appkey,以及我们的渠道的占位符
- 3. 在我们的应用中的build.gradle中去动态的替换我们的占位符的value即可
在友盟注册一个应用,获取到key,然后在清单文件进行配置,其中5858d54065b6d66de000008f即为你申请的key, ${UMENG_CHANNEL_VALUE}为占位符,需要在build.gradle中配置
<meta-data android:value="5858d54065b6d66de000008f" android:name="UMENG_APPKEY"/>
<meta-data android:value="${UMENG_CHANNEL_VALUE}" android:name="UMENG_CHANNEL"/>
配置build.gradle中内容
首先我们配置defaultConfig
defaultConfig {
applicationId "com.lingchen.multichannelapkdemo"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
multiDexEnabled true// 突破默认的方法数
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"]// 默认为友盟渠道
}
签名文件的配置,有debug和release签名
signingConfigs {
debug {
keyAlias 'androiddebugkey'
keyPassword 'android'
storeFile file('../mydeug.keystore')
storePassword 'android'
}
release {
storeFile file("../umeng.jks")
storePassword "umengu"
keyAlias "umeng"
keyPassword "umengu"
}
}
使用签名
buildTypes {
debug {
minifyEnabled false// 是否使用混淆
signingConfig signingConfigs.debug
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
配置多个渠道
productFlavors {
xiaomi {
resValue "string", "app_name", "小米"// 替换应用的名字
applicationId "com.yitong.xiaomi" //这里可以配置不同的包名
}
wandoujia {
resValue "string", "app_name", "豌豆荚"
}
okhttp {
applicationIdSuffix "okhttp"// 给包名添加一个后缀
resValue "string", "app_name", "okhttp"
}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]// 遍历所有渠道,替换UMENG_CHANNEL_VALUE为渠道名
}
在生成的apk文件,修改下命名
applicationVariants.all { variant ->
variant.outputs.each { output ->// 进行遍历
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith(".apk")) {
def fileName
if(variant.buildType.name.equals('debug')){// 判断是否是debug版本
fileName = "debug-${variant.productFlavors[0].name}" + ".apk";// 重命名为:debug-渠道名.apk
} else{
def timeStamp = new Date().format("MMddHH", TimeZone.getTimeZone("GMT+8"));// 获取当前时间,并自定显示样式
fileName = "${variant.productFlavors[0].name}" + "-${timeStamp}" + ${defaultConfig.versionName} + ".apk";// 重命名为: 渠道名 + 时间戳 + 版本号 + ".apk"
}
output.outputFile = new File(outputFile.parent, fileName);
}
}
}
使用友盟不要完了依赖以及权限的添加
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:25.0.1'
compile 'com.umeng.analytics:analytics:latest.integration'
}
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>