博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gradle实战:不同编译类型的包同设备共存
阅读量:5838 次
发布时间:2019-06-18

本文共 1986 字,大约阅读时间需要 6 分钟。

查看原文:

Gradle实战系列文章:


一、需求背景

在测试阶段,有时需要在同一个设备上同时安装debug、beta、release等不同编译类型的包,或者同时安装当前版本与某个历史版本的包,以方便比较查看;但是,在同一个设备上,一个包名只能安装一个应用,本文将围绕该问题介绍完整的解决方案。


二、实践

1. 基本概念

在上一篇文章中我们已经介绍过packageapplicationIdPlaceHolder的概念,本文主要通过这三个参数来实现多包共存。

2. 修改应用名称

  • AndroidManifest文件中的label采用PlaceHolder的形式,使其可以在build.gradle文件中动态赋值,因此实现不同的编译类型有不同的应用名称

  • 增加string值

    Test
    Test-beta
    Test-debug
  • 同理,我们也可实现对icon的修改。

3. build.gradle文件中配置:

  • debug为例

    //设置全局变量,作为开关

    def isCoexist = false; //需要多包共存时设为true

    /**

    • 如果采用jekins打包时,执行命令:./gradlew assembleDebug -DmultiApp='true'

    • 如果采用AS打包时,修改变量:isCoexist = true

      */

    String appId = defaultConfig.applicationId // 读取原始的applicationId

    String multiApp = System.properties['multiApp'] // 读取打包命令中设置的系统参数
    if (isCoexist) {

    multiApp = "true"

    }

    debug() {

    if ("${multiApp}" != "${null}") { //采用该方式是因为某些机器上equals方法失效,暂无解    appId = defaultConfig.applicationId + ".debug"  //拼上后缀    applicationIdSuffix ".debug" //拼上后缀(gradle自带方法)}manifestPlaceholders = [app_label: "@string/app_name_debug"]  // AndroidManifest文件中的label就会被赋值println "applicationId: " + appId + " (debug)"

    }

4. Failure [INSTALL_FAILED_CONFLICTING_PROVIDER] 问题解决

如果应用中未使用ContentProvider,则上述配置即可;如果使用了ContentProvider,比如集成了个推推送,其中有一个DownloadProvider,因此安装时会报错,,解决如下:

// 在AndroidManifest文件中,修改authorities,如:
改为:
相应地,在build.gradle文件中添加DownloadProvider的赋值: manifestPlaceholders = [app_label: "@string/app_name_debug", DownloadProvider: appId]

5. 第三方应用appkey验证失败问题解决

以百度地图为例,百度地图需要开发者在其开放平台以包名和签名为应用注册一个appkey,生成的appkey填写在AndroidManifest文件中,如下:

此时,我们如果安装debug包,则包名变成了com.company.appname.debug,那么,appkey就无法验证通过了,百度地图也将无法展示。试想,我们能否修改百度地图验证时上传的包名呢?然而,经过一番努力,查看了百度地图sdk包,我们无法实现这一点。那么,只能为测试包申请一个appkey了,然后再通过PlaceHolder动态地设值。相应的修改如下:

build.gradle文件中,以debug为例,修改如下:

manifestPlaceholders = [app_label: "@string/app_name_debug", DownloadProvider: appId,                         BaiduMap_API_KEY: your_baidu_appkey_debug]

深入学习

查看原文:

转载地址:http://kkncx.baihongyu.com/

你可能感兴趣的文章
通用peU盘启动盘装win10系统
查看>>
nfs服务共享不成功的解决,内涵nfs***
查看>>
SSH 配置 远程管理主机
查看>>
mount挂载
查看>>
开源协议
查看>>
Centos7防火墙之iptables
查看>>
再和“面向对象”谈恋爱 - 对象相关概念(二)
查看>>
课程第五天内容《基础交换 五》
查看>>
5分钟入门git模式开发
查看>>
搭建redis服务器
查看>>
discuz防刷新、防外部提交研究
查看>>
HTML转义字符
查看>>
JS+PHP实现弹出滑动验证码实例
查看>>
【Zabbix】Zabbix snmptrap 配置
查看>>
解决LINUX(CENTOS)下SSH连接超时自动断开的问题
查看>>
函数计算工具链新成员 —— Fun Local 发布啦
查看>>
苹果隐瞒iPhone销量下降,遭诉讼AC
查看>>
安装H3C遇到的各种问题
查看>>
C语言编程 数列中找出两个只出现一次的数
查看>>
NO.5 Find查找命令详解
查看>>