这几天公司的运营部门要求添加流量统计功能,集成了友盟的插件,中间遇到很多的问题,在这里说明记录一下,为遇到相同问题的朋友们减少麻烦

问题一、插件的使用直接将友盟sdk系在放置到项目根目录下plugins文件夹下,并进行配置,主要需要配置plugins下的两个文件

1.android.json

  在dependent_plugins下添加

  

"Umeng": {
"PACKAGE_NAME": "你的appid"
}

2.fetch.json

  在其末尾添加如下代码

  

    "Umeng": {
"source": {
"type": "local",
"path": "umeng"
},
"is_top_level": true,
"variables": {}
}

问题二、多渠道自动生成且自动签名重命名,参考文档http://www.jianshu.com/p/7236ceca2630

cordova默认使用的是gradle进行打包的,多渠道分发的需要手动生成很多文件,比较麻烦,现在介绍批量生成修改渠道且签名份额被指方法,

1.需要生成签名,详细步骤请看 http://www.cnblogs.com/happen-/p/5991794.html

2.需要先在项目根目录下运行ionic build android --release

3.修改platform/android下的文件

(1)AndroidManifest.xml

在application节点下找到<meta-data android:name="UMENG_CHANNEL" android:value="你设置的值" />

改为<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_ID}" />

(2)新建release-signing.properties

并添加内容

keyAlias = ***//证书别名
keyPassword = ***//密码可与证书密码一样
storeFile = tianji.keystore//证书路径
storePassword = tianji//证书密码

(3)新建文件proguard-rules.pro,内容可为空,没有文件生成文件会报错

(4)重要部分,需要配置build.gradle

  1.找到productFlavors节点,修改为如下部分

  

    productFlavors {
     //名字是渠道的名称
baidu { }
google { }
wandoujia { }
xiaomi { }
owen { }
}

  2.找到signingConfigs节点

  修改如下

  

        signingConfigs {
release {
// These must be set or Gradle will complain (even if they are overridden).
keyAlias "**"//可以写成**,会读取release-signing.properties文件
keyPassword "***" //可以写成**
storeFile file('***')//需要一个名字不能是**,证书的路径
storePassword "***"//可以写成**
     } }

  3.找到buildTypes节点,

  替换如下

  

        buildTypes {
release {
zipAlignEnabled true
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}

  4.在android节点内部的最后部分添加如下代码

  

    applicationVariants.all { variant ->
variant.outputs.each { output ->
// 重命名产出的apk文件
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
File outputDirectory = new File(outputFile.parent);
def fileName
if (variant.buildType.name == "release") {
fileName = "${variant.productFlavors[0].name}.apk"
} else {
fileName = "${defaultConfig.versionCode}_}_debug.apk"
}
output.outputFile = new File(outputDirectory, fileName)
} // 删除unaligned apk
if (output.zipAlign != null) {
output.zipAlign.doLast {
output.zipAlign.inputFile.delete()
}
}
}
}

  然后在platform/android下依次运行命令

  gradlew clean

  gradlew assembleRelease

  补充说明:经过几天的实验,确定以上方法存在问题,下边是原因以及解决方法,

  原因:官方给的插件需要自己初始化,

  初始化方法:在run》$ionicPlatform.ready内部添加MobclickAgent.init('你的appid','渠道');

  当然这里不能这么写,因为上边的多渠道分发只是更改xml内部信息,但是不能更改js代码

  只需要该一下插件内部src>android>UMPlugin.java

  在头部添加

  

import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;

  在execute方法内部的init改为一下代码,这段代码的主要作用是初始化插件,但是appid和渠道是从配置文件内部读取

  

        if (action.equals("init")) {
try{
ApplicationInfo appInfo = mContext.getPackageManager()
.getApplicationInfo(mContext.getPackageName(),
PackageManager.GET_META_DATA);
String appKey=appInfo.metaData.getString("UMENG_APPKEY");
String channelId=appInfo.metaData.getString("UMENG_CHANNEL");
MobclickAgent.startWithConfigure(new UMAnalyticsConfig(mContext, appKey, channelId));
MobclickAgent.setScenarioType(mContext, EScenarioType.E_UM_NORMAL);
MobclickAgent.onResume(mContext);
}catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
// String appKey = args.getString(0);
// String channelId = args.getString(1);
return true;
}

  然后在将调用初始化方法内部的两个参数删掉即可

  

MobclickAgent.init();

  

友盟ionic多渠道自动签名app的更多相关文章

  1. ionic ios 友盟多渠道/自动签名/加固之腾讯云。乐固

    之前写了一篇文章主要是介绍使用gradle进行多渠道分发处理的文章--链接:http://www.cnblogs.com/happen-/p/6029387.html 最近在做app上线的处理,发现某 ...

  2. Ionic实战 自动升级APP(Android版)

    Ionic 框架介绍 Ionic是一个基于Angularjs.可以使用HTML5构建混合移动应用的用户界面框架,它自称为是"本地与HTML5的结合".该框架提供了很多基本的移动用户 ...

  3. ionic 实现自动升级APP

    最近做移动商城开发,需要一个自动升级APP的功能,在网上搜罗很多,发现有的是下载APK,有的在我这服务无法实现,由于时间原因,都被PASS了,最后找到了一个热更新插件,经过半天的调试,可以使用,很欣喜 ...

  4. Android之友盟多渠道打包与数据统计

    文章大纲 一.多渠道打包与数据统计介绍二.友盟实现多渠道打包实战三.友盟数据统计实战四.项目源码下载五.参考文章   一.多渠道打包与数据统计介绍   多渠道打包,相信很多同学都知道.在Android ...

  5. 使用极光/友盟推送,APP进程杀死后为什么收不到推送(转)

    为什么会存在这样的 问题,刚开始的时候我也搞不清楚,之前用极光的时候杀死程序后也会收到推送,但最近重新再去集成时就完全不好使了,这我就纳闷了,虽然Google在高版本上的android上面不建议线程守 ...

  6. UmengAppDemo【友盟统计SDK集成以及多渠道打包配置,基于V7.5.3版本】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这里只是记录下集成友盟统计SDK以及简单配置多渠道打包的步骤.所以1.该Demo不能运行:2.配置多渠道打包只是一种简单的写法,具体 ...

  7. 微信小程序里如何使用npm?小程序集成友盟举例

    1.执行npm初始化指令 小程序根目录,命令执行如下指令: npm init 执行后会让加载项目初始信息,具体截图如下: 2.执行安装npm包指令 在这我们举个例子,以接入友盟统计SDK为例,执行命令 ...

  8. Android 云服务器的搭建和友盟APP自动更新功能的实现

    setContentView(R.layout.activity_splash); //Bmob SDK初始化--只需要这一段代码即可完成初始化 //请到Bmob官网(http://www.bmob. ...

  9. 使用友盟进行apk的自动更新

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

随机推荐

  1. ORA-12520: TNS:listener could not find available handler for requested type of server

    当你碰到ORA-12520错误时,如下所示: 英文错误提示: ORA-12520: TNS:listener could not find available handler for requeste ...

  2. Java借助axis2发布WebService

    Webservice: 1.Xml: 2.WSDL: Web service描述语言(WSDL)就是这样一个基于XML(标准通用标记语言下的一个子集)的语言,用于描述Web service及其函数.参 ...

  3. BOOST.Asio——扫盲

    以下内容来自互联网. 鉴于版权之类的东西,我只贴出标题和URL. (无法考证下述资料是否原创.) asio串口编程                                            ...

  4. Python写地铁的到站的原理简易版

    Python地铁的到站流程及原理(个人理解) 今天坐地铁看着站牌就莫名的想如果用Python写其工作原理 是不是很简单就小试牛刀了下大佬们勿喷纯属小弟个人理解 首先来看看地铁上显示的站牌如下: 就想这 ...

  5. PPK谈JS笔记第一弹

    以下内容是读书笔记,再一次温习JS好书:PPK谈JS window.load=initializePageaddEventSimple('window','load',function(){}) lo ...

  6. es6学习笔记2-解构赋值

    解构赋值基本概论就按照一定的模式通过数组或者对象对一组变量进行赋值的过程. 1.通过数组对变量进行赋值: /*通过这种方式赋值要注意左右两边的结构模式要一样,在赋值的时候,根据位置进行赋值对应模式.* ...

  7. 洛谷11月月赛round.2

    P3414 SAC#1 - 组合数 题目背景 本题由世界上最蒟蒻最辣鸡最撒比的SOL提供. 寂月城网站是完美信息教室的官网.地址:http://191.101.11.174/mgzd . 题目描述 辣 ...

  8. print输出格式总结

    妈的,今天又被printf坑了一回...看来需要一次性总结书所有结果,省的又出现这样那样的麻烦.. #include<stdio.h> #include<string.h> # ...

  9. 第2章 Linux系统安装(2)_Linux系统分区及文件系统

    2. 系统分区 2.1 分区类型 (1)主分区:最多只能有4个 (2)扩展分区 ①最多只能有1个,主分区加扩展分区最多有4个. ②不能写入数据,只能包含逻辑分区 (3)逻辑分区 2.2 格式化(高级格 ...

  10. [Unity3D]深度相机 Depth Camera

    作为3D世界里最重要的窗口,摄像机的应用就显得很重要,毕竟在屏幕上看到的一切都得用摄像机矩阵变换得来的嘛.论坛上看到了一篇帖子讲非天空盒的背景做法,让我想起其实很多界面合成画面可以用摄像机之间的交互来 ...