安装umeng提供的插件 第一步:下载SDK
下载地址:http://dev.umeng.com/analytics/h5/sdk-download
第二步:配置appkey
下载解压缩后,打开里面*/umeng-plugin-android/
下的plugin.xml,更改appkey
:
1 2 3 <meta-data android:name ="UMENG_APPKEY" android:value ="4f83c5d852701564XXXXXX" /> <meta-data android:name ="UMENG_CHANNEL" android:value ="Umeng-Channel" />
将appkey替换为你自己应用的key。”UMENG_CHANNEL”可以先不替换,因为渠道名后面是动态设置的。
第三步:将友盟统计功能集成到你的项目中
首先通过本地安装cordova plugin的方式将umemg-plugin-android
安装到你的项目。
1 cordova plugins add */umeng-plugin-android/
在主界面集成友盟初始化
打开Android项目下的MainActivity.java
文件,添加下面的代码,在onCreate()
中调用initUmengSDK()
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 public class MainActivity extends CordovaActivity { @Override public void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState); initUmengSDK(); loadUrl(launchUrl); } private void initUmengSDK () { MobclickAgent.setScenarioType(this , MobclickAgent.EScenarioType.E_UM_NORMAL); MobclickAgent.setDebugMode(true ); MobclickAgent.openActivityDurationTrack(false ); } @Override protected void onResume () { super .onResume(); MobclickAgent.onResume(this ); } @Override protected void onPause () { super .onPause(); MobclickAgent.onPause(this ); } }
友盟PhoneGap集成文档:http://dev.umeng.com/analytics/h5/phonegap-doc
到这一步就可以实现将友盟统计集成到你的App中了。接下来就是进行多渠道打包。
多渠道打包 多渠道打包是指:因Android市场的四分五裂,不同的厂家都有各自的应用市场和渠道,所以一个apk要根据不同应用市场的要求打包成不同渠道的apk。最后可以通过友盟的渠道统计来分析apk在各个应用市场的数据。
传统的多渠道打包一般是采用gradle打包,这种方式打包apk非常的慢,所以我放弃了。
这里我采用的是:Android批量打包提速 - 1分钟900个市场不是梦 这篇文章中介绍的技术(其中的思路其实是来自美团的技术分享 美团Android自动化之旅—生成渠道包 中提到的第三种实现方式)。 思路是
通过解压apk,往META-INF中放置一个类似 channel_xxx的空文件来标致渠道名称
在Java代码中解析这个文件名获取渠道名称。
去作者的github(https://github.com/GavinCT/AndroidMultiChannelBuildTool ) 下载代码得到下面几个文件
JavaUtil/ChannelUtil.java 用于获取渠道名称;
PythonTool/info 该文件夹包括两个txt文件,channel.txt
用于存放渠道列表,czt.txt
用于添加到apk中的`META-INF中;
Python/MutilChannelBuildTool.py 用于执行打包替换多渠道的Python脚本
第一步:在项目中动态设置渠道名称
将ChannelUtil.java
放入你的项目中,并在MainActivity.java
中调用
1 2 3 4 5 6 7 @Override public void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState); ChannelUtil.getChannel(this ); loadUrl(launchUrl); }
但是到这里,我们只能得到渠道的名称,所以我们还需要动态将渠道名称动态设置到友盟的代码中,这样才能分辨不同渠道的apk。
关于友盟渠道动态设置网上说的方法AnalyticsConfig.setChannel(getChannel(Context context) )
已经不能用了 ,因为友盟提供的sdk中,已经废弃了该方法,而改用MobclickAgent.startWithConfigure()
来进行初始化。所以我们需要在往MainActivity.java
中添加友盟初始化的方法
1 2 3 4 5 6 private MobclickAgent.UMAnalyticsConfig getConfig (String channel) { return new MobclickAgent.UMAnalyticsConfig(this , AnalyticsConfig.getAppkey(this ), channel); }
然后在onCreate()
中调用
1 2 3 4 5 6 public void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState); MobclickAgent.startWithConfigure(getConfig(ChannelUtil.getChannel(this ))); loadUrl(launchUrl); }
加上前面的初始化友盟代码,完整的MainActivity.java
如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 public class MainActivity extends CordovaActivity { @Override public void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState); MobclickAgent.startWithConfigure(getConfig(ChannelUtil.getChannel(this ))); initUmengSDK(); loadUrl(launchUrl); } private void initUmengSDK () { MobclickAgent.setScenarioType(this , MobclickAgent.EScenarioType.E_UM_NORMAL); MobclickAgent.setDebugMode(true ); MobclickAgent.openActivityDurationTrack(false ); } @Override protected void onResume () { super .onResume(); MobclickAgent.onResume(this ); } @Override protected void onPause () { super .onPause(); MobclickAgent.onPause(this ); } private MobclickAgent.UMAnalyticsConfig getConfig (String channel) { return new MobclickAgent.UMAnalyticsConfig(this , AnalyticsConfig.getAppkey(this ), channel); } }
第二步:执行python,进行多渠道打包
将想要批量打包的apk放到与Python/MutilChannelBuildTool.py
一起,运行python脚本即可(前提是你的电脑已经安装python环境)。
如何重命名cordova生成apk的名称 cordova 生成apk的名称默认为android-release.apk,更改platforms/android/build.gradle
,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 buildTypes { release { signingConfig signingConfigs.release applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile File outputDirectory = new File (outputFile.parent); def fileName def manifestParser = new com.android.builder.core.DefaultManifestParser() fileName = "TM_" +manifestParser.getVersionName(android.sourceSets .main.manifest.srcFile)+".apk" output.outputFile = new File (outputDirectory, fileName) if (output.zipAlign != null ) { output.zipAlign.doLast { output.zipAlign.inputFile.delete () } } } } } }
上面的代码命名风格为:TM_versionName.apk
,其中versionName是当前apk的版本号。
如何测试友盟统计及渠道信息 友盟提供了集成测试,进入http://mobile.umeng.com/test_devices , 添加测试设备后,便可以实时看到统计日志了。如下图: