友盟ionic多渠道自动签名app
这几天公司的运营部门要求添加流量统计功能,集成了友盟的插件,中间遇到很多的问题,在这里说明记录一下,为遇到相同问题的朋友们减少麻烦
问题一、插件的使用直接将友盟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的更多相关文章
- ionic ios 友盟多渠道/自动签名/加固之腾讯云。乐固
		
之前写了一篇文章主要是介绍使用gradle进行多渠道分发处理的文章--链接:http://www.cnblogs.com/happen-/p/6029387.html 最近在做app上线的处理,发现某 ...
 - Ionic实战 自动升级APP(Android版)
		
Ionic 框架介绍 Ionic是一个基于Angularjs.可以使用HTML5构建混合移动应用的用户界面框架,它自称为是"本地与HTML5的结合".该框架提供了很多基本的移动用户 ...
 - ionic 实现自动升级APP
		
最近做移动商城开发,需要一个自动升级APP的功能,在网上搜罗很多,发现有的是下载APK,有的在我这服务无法实现,由于时间原因,都被PASS了,最后找到了一个热更新插件,经过半天的调试,可以使用,很欣喜 ...
 - Android之友盟多渠道打包与数据统计
		
文章大纲 一.多渠道打包与数据统计介绍二.友盟实现多渠道打包实战三.友盟数据统计实战四.项目源码下载五.参考文章 一.多渠道打包与数据统计介绍 多渠道打包,相信很多同学都知道.在Android ...
 - 使用极光/友盟推送,APP进程杀死后为什么收不到推送(转)
		
为什么会存在这样的 问题,刚开始的时候我也搞不清楚,之前用极光的时候杀死程序后也会收到推送,但最近重新再去集成时就完全不好使了,这我就纳闷了,虽然Google在高版本上的android上面不建议线程守 ...
 - UmengAppDemo【友盟统计SDK集成以及多渠道打包配置,基于V7.5.3版本】
		
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这里只是记录下集成友盟统计SDK以及简单配置多渠道打包的步骤.所以1.该Demo不能运行:2.配置多渠道打包只是一种简单的写法,具体 ...
 - 微信小程序里如何使用npm?小程序集成友盟举例
		
1.执行npm初始化指令 小程序根目录,命令执行如下指令: npm init 执行后会让加载项目初始信息,具体截图如下: 2.执行安装npm包指令 在这我们举个例子,以接入友盟统计SDK为例,执行命令 ...
 - Android 云服务器的搭建和友盟APP自动更新功能的实现
		
setContentView(R.layout.activity_splash); //Bmob SDK初始化--只需要这一段代码即可完成初始化 //请到Bmob官网(http://www.bmob. ...
 - 使用友盟进行apk的自动更新
		
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
 
随机推荐
- Linux服务器宕机案例一则
			
案例环境 操作系统 :Oracle Linux Server release 5.7 64bit 虚拟机 硬件配置 : 物理机型号为DELL R720 资源配置 :RAM 8G Intel(R) Xe ...
 - Database 'xxxx' is being recovered. Waiting until recovery is finished.
			
巡检发现一个SQL SERVER Express 2005数据库备份时出现下面错误: Database 'xxxx' is being recovered. Waiting until recover ...
 - SOA架构设计经验分享—架构、职责、数据一致性
			
阅读目录: 1.背景介绍 2.SOA的架构层次 2.1.应用服务(原子服务) 2.2.组合服务 2.3.业务服务(编排服务) 3.SOA化的重构 3.1.保留服务空间,为了将来服务的组合 4.运用DD ...
 - Spring配置JNDI和通过JNDI获取DataSource
			
一.SpringJNDI数据源配置信息 <bean id="dataSource" class="org.springframework.jndi.JndiObje ...
 - MongoDB学习笔记~Mongo集群和副本集
			
回到目录 一些概念 对于Mongo在数据容灾上,推荐的模式是使用副本集模式,它有一个对外的主服务器Primary,还有N个副本服务器Secondary(N>=1,当N=1时,需要有一台仲裁服务器 ...
 - 烂泥:Postfix邮件服务器搭建之准备工作
			
说实话,Postfix邮件服务器的搭建是一件很麻烦的事情,需要各种软件之间的配置和调试.在写这篇文章之前,我也是搭建测试了不下于10次才算把整个流程给走通,今天刚好有时间把整个搭建过程记录下来. 在正 ...
 - rawurlencode / urlencode
			
rawurlencode遵守是94年国际标准备忘录RFC 1738,urlencode实现的是传统做法,和上者的主要区别是对空格的转义是'+'而不是'%20' 推荐在PHP中使用用rawurlenco ...
 - 使用GDB调试程序
			
GDB(GNU Debuger)是Linux中的一个功能强大的调试器.GDB可以让你查看程序的内部结构,打印变量值,设置断点,单步调试源码,运行时修改变量值,路径跟踪,线程切换,显示汇编代码等. 编译 ...
 - hibernate 注解 唯一键约束 uniqueConstraints
			
@Table 注解包含一个schema和一个catelog 属性,使用@UniqueConstraints 可以定义表的唯一约束. 如果是联合约束就用下面这种 @Table(name="tb ...
 - linuxx virutal machine installation
			
1. vmplayer download: https://my.vmware.com/web/vmware/free#desktop_end_user_computing/vmware_player ...