最近做项目,接收了一项任务——多渠道打包
于是乎找找google,一搜一大堆,不外乎就是用友盟进行多渠道打包。
看了一堆博客,自己总结一下经验,纯当做下笔记。
首先呢,多渠道打包,为的就是统计各个渠道的下载数量,或者新增用户、日活跃量用户的一些相关数据,这就与友盟统计相关了。所以我们用友盟进行多渠道打包就可以了。
那么如何做呢,首先我们进入友盟的官网https://www.umeng.com/
选择开发者中心,看到如下图片
接着,申请KEY,跟着文档将SDK导入项目即可
然后回到自己的项目,在app的build.gradle添加以下代码:
dependencies {
compile 'com.umeng.analytics:analytics:latest.integration'
}
如果无法正常集成请添加如下代码 :
allprojects {
repositories {
mavenCentral()
}
}
接着,在AndroidManifest.xml文件下添加以下代码
manifest的配置主要包括添加权限,填写Appkey和填写渠道id三部分,代码示例如下:
<manifest……>
<uses-sdk android:minSdkVersion="4">uses-sdk>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET">uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE">uses-permission>
<application ……>
……
<activity ……/>
<meta-data android:value="YOUR_APP_KEY" android:name="UMENG_APPKEY">meta-data>
<meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/>
application>
manifest>
主要部分就是将key替换成自己的,至于Channel ID,不用急,我们稍后再讲。
第一步 在AndroidManifest.xml里配置PlaceHolder
data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
第二步 在build.gradle设置productFlavors
android {
productFlavors {
kuan {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "kuan"]
}
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
qh360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qh360"]
}
baidu {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
}
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
}
}
这样,便能动态地替换UMENG_CHANNEL_VALUE的值。
下面提供一种更简便的写法,代码如下:
android {
productFlavors {
kuan {}
xiaomi {}
qh360 {}
baidu {}
wandoujia {}
yingyongbao {}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
两种写法实现的效果都是一样的,代码方面,这里就不多做解释了,有兴趣的自己研究以下。
然后,我们点一下同步按钮
将添加的渠道(xiaomi、qn360)的渠道配置给同步进来。
打开File->Project Structure->Flavors,我们会发现除了默认的defaultConfig,还多出了kuan、qh360之类的flavors。
如果我们想再添加渠道的话,点击图片右上角的“+”号按钮,可以添加新的渠道,与在代码里面实现的效果是一样的。
接着,我们便可以实现多渠道打包
首先,我们先按图片,生成签名
上面两张图转自
http://blog.csdn.net/yy1300326388/article/details/48344411
接下来,我们可以通过两种方式进行多渠道打包,一个是通过图形界面,另一个是通过命令行。
通过图形界面的话,点击上上上图里的Generate Signed APK,然后如下所示
选择刚才自己生成的签名文件,即KEY STORE,然后填写对应的资料,刚才生成签名文件的时候自己写入的。然后点击NEXT
大家可以看到如下,flavors,可以进行选择。然后build type的话可以选择release或者debug。然后再点NEXT,接下来只需默默等待打包完成即可。通过图形界面打包的APK会放置在项目路径下app里面,假如我的项目是with,那么生成的apk会放在with/app下
方法二:使用命令行进行多渠道打包:
打开Android studio,点击左下角的Terminal
如果我们想打包wandoujia渠道的release版本,执行如下命令就好了:
gradlew assembleWandoujiaRelease
如果我们想打包wandoujia渠道的debug版本,执行如下命令就好了:
gradlew assembleWandoujiaDebug
如果我们只打wandoujia渠道版本,则:
gradlew assembleWandoujia
此命令会生成wandoujia渠道的Release和Debug版本
同理我想打全部Release版本:
gradlew assembleRelease
当然啦,如果我们想打包全部的Debug版本:
gradlew assembleDebug
然后,我们可以在项目的app/build/output/apk下面找到我们打包的apk
我们来试一下
输入gradlew assembleDebug,看看有什么效果
因为打包多了太费时间,所以我把其他渠道的先给屏蔽了,就先打包一个,大家自己操作的时候可以不屏蔽,试试效果
有的人说,这个打包出来的APK名字能不能自定义,否则每次都得手动去改,那就太坑了。
这个问题,当然可以解决了。
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// 输出apk名称为ruijie_v1.0_wandoujia.apk
def fileName = "ruijie_v${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
我们只需加入以上的代码,就可以修改打包出来的APK的名字,那么让我们执行以下命令行,再看看效果
这样,我们就可以根据自己的需求,修改生成的APK的名字了。
差点忘记了。关于友盟的统计,需要在每个Activity的onResume方法中调用 MobclickAgent.onResume(Context) , 即在onPause方法中调用 MobclickAgent.onPause(Context)。那么我们可以在自己封装的baseActivity里面添加以下代码即可。
public void onResume() {
super.onResume();
MobclickAgent.onResume(this);
}
public void onPause() {
super.onPause();
MobclickAgent.onPause(this);
}
PS:多渠道打包之后,可以在友盟官网对自己的应用进行查看,里面有对应用的相关数据的分析,例如日活跃量,APK打开的人数之类,这里不做多余的解释啦。
今天的教程就到这了,下一章我们再讲解一下Android studio的签名配置。