为何要多渠道打包
简单来说就是为了统计apk在不同的应用市场上下载使用的情况。
如果我们在不同的应用市场(例如:应用宝、豌豆荚、小米),上传的是同一个apk包,那么将无法统计哪一个应用市场的下载量大,使用的活跃度高
专业地讲:统计和分析流量来源、内容使用、用户属性和行为数据,以便开发商利用数据进行产品、运营、推广策略的决策。
单渠道打包
使用友盟统计和分析流量来源
###实现单渠道打包
友盟通过在清单文件里配置下面的两句话,来实现渠道统计
<meta-data android:value="YOUR_APP_KEY" android:name="UMENG_APPKEY"/>
<meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/>
YOUR_APP_KEY:YOUR_APP_KEY 替换为您在友盟后台申请的应用Appkey
Channel ID:就是不同渠道的ID,例如可以写入Wandoujia
你如果想打一个Wandoujia的apk,那么清单文件要这样配置
<meta-data android:value="Yfgjfdgjofdgjkdfgd" android:name="UMENG_APPKEY"/>
<meta-data android:value="Wandoujia" android:name="UMENG_CHANNEL"/>
配置好之后,像往常一样点击“build—generate sign apk”,就可以完成“Wandoujia”这个渠道的打包apk了,至此完成了一个单渠道打包
如果你想再次打一个“小米应用市场”的apk包,那么只需要清单文件里的Channel ID改为“xiaomi”即可,然后点击“build—generate sign apk”,就可以完成小米渠道打包。
这样我们通过友盟的后台管理,就可以看到有几个用户是通过豌豆荚下载的apk,有几个是通过小米应用市场下载的apk,以及他们的使用apk的其他更多信息。
###问题来了
在这里我们看一下集成文档里的这句话
Q:如何添加渠道?
A:一个包中只能添加一个渠道,多个渠道需要打多个包。开发者新增渠道需要在工程manifest中或者activity中调用接口添加我们的渠道信息,友盟后台没有添加渠道的地方。您可以使用Gradle实现多渠道打包。
说明这段话就是说,你必须每次只能打包一个渠道的apk,像上面说的“豌豆荚”和“小米”,你需要完成两次单渠道打包,如果你有10个渠道呢,100个渠道呢?岂不累死了!OK,使用Gradle实现多渠道打包,即:一次打包N个渠道的apk包
##多渠道打包
###1.修改清单文件
<meta-data android:value="${UMENG_CHANNEL_VALUE}" android:name="UMENG_CHANNEL"/>
2. 在app.gradle配置以下的内容,这是一个完整的文件
apply plugin: 'com.android.application'
android {
//★签名配置
signingConfigs {
debug {
}
//在release里配置好信息
release {
keyAlias 'q'
keyPassword 'qqqqqq'
storeFile file('/Users/apple/AndroidStudioProjects/qqq.jks')
storePassword 'qqqqqq'
}
}
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
applicationId "com.example.apple.dabaodemo"
minSdkVersion 14
targetSdkVersion 22
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
// ★构建类型
buildTypes {
debug {
signingConfig signingConfigs.debug
minifyEnabled false
}
release {
minifyEnabled true//打开混淆
zipAlignEnabled true//zipAlign优化
shrinkResources true //去掉资源文件目录下没有用到的图片等资源文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
// ★配置apk信息
// variant=type+flavor 例如 2个type和4个flavor,最终为8个variant
productFlavors {
xiaomi {
manifestPlaceholders=[UMENG_CHANNEL_VALUE:name]//这里的name就是xiaomi
}
huawei {
manifestPlaceholders=[UMENG_CHANNEL_VALUE:name]//这里的name就是huawei
}
baidu {
manifestPlaceholders=[UMENG_CHANNEL_VALUE:name]
}
yingyongbao {
manifestPlaceholders=[UMENG_CHANNEL_VALUE:name]
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
compile 'com.umeng.analytics:analytics:latest.integration'
}
其实androidstudio给我们准备好了可视化编辑窗口,点击File—ProjectStructure,就可以依次地编辑上述内容
3. 开始打包了
接下来,在终端先运行 ./gadlew clean
,再运行./gradlew assembleRelease
,就打包成功了(本来想详细说说gradle的一些命令的,但是没时间写了,先记录这么多了)
可参考
多渠道打包
https://blog.csdn.net/mynameishuangshuai/article/details/51783303
https://blog.csdn.net/javazejian/article/details/50750457
Android 使用Gradle实现多渠道打包,同项目不同包名、Logo、名字、主题等
https://blog.csdn.net/lvkaixuan/article/details/83617091