博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gradle 打包不同资源
阅读量:7016 次
发布时间:2019-06-28

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

由于 android 中以 applicationId 作为应用唯一标识,所以不能在手机上安装两个相同 applicationId 的app。在 AS 中,默认创建的项目其 applicationId就是项目的包名。可以在gradle 中配置更改 改 applicationid。

最近,维护的一个项目是一个导流的,一套代码每次打包成5个APP。每个APP除名字、icon、部分资源文件不同外,其他的基本一样。由于是维护项目,之前的同事是将其分成5个项目,那样每次迭代,都要在一个项目中写完测试通过后,拷贝到其他四个项目中,最后一个个项目打包。这样,既麻烦又浪费时间。因此,打算通过配置 gradle,打包时更换不同的 applicationeId、资源文件以及友盟的appkey,从而简化每次迭代的过程。

一、配置资源文件

为了方便测试,这里将 项目打包为 onetwothree三个apk, applicationId 分别为:cn.imtianx.one、cn.imtianx.two 、cn.imtianx.three 。

其中,每个apk有不同的icon、不同的名字及界面上显示的文字也不同。

src 下分别建立 one、two、three三个目录存放对应的资源文件,这里主要存放 apk icon、资源文件以及兼容7.0拍照用的 provider配置文件。(更多7.0拍照适配,请)

具体项目结构如下图所示:

说明: 上图中,one、two、three三个问价夹在 src下,与 main 同级。one 中 res 下的文件目录和 main/src/res相同。

二、配置签名文件

对于签名文件的配置,有两种方式:一是直接写 build.gradle 中,而是写 在 local.properties文件中。后者想丢安全些,local.properties 通常为忽略文件不会提交。如下配置:

方法一:在 build.gradle 文件中的 android 下添加如下代码

signingConfigs{    one {        storeFile file("E\:\\workspace\\android_temp\\DifPackage\\app\\imtianx_one.jks")        storePassword 123456        keyAlias imtianx        keyPassword 123456    }  /* two,three配置类似 */}

方法二:首先在 local.properties 下添加密钥信息,然后在 build.gradle 中读取使用

/*local.properties */## one keystore filekeystroe_storeFile_1 =E\:\\workspace\\android_temp\\DifPackage\\app\\imtianx_one.jkskeystroe_storePassword_1 =123456keystroe_keyAlias_1 =imtianxkeystroe_keyPassword_1 =123456/* build.gradle */Properties properties = new Properties()properties.load(project.rootProject.file('local.properties').newDataInputStream())signingConfigs{    one {        storeFile file(properties.getProperty("keystroe_storeFile_1"))        storePassword properties.getProperty("keystroe_storePassword_1")        keyAlias properties.getProperty("keystroe_keyAlias_1")        keyPassword properties.getProperty("keystroe_keyPassword_1")    }

以 one 的配置为例,对于 two和three的配置与此类似。个人通常喜欢第二中配置方式。

三、配置 AndroidManifest文件

由于不同的app使用的友盟统计也不同,这里需要设置占位符在gradle中进行动态的替换。此外,对于7.0以后的拍照,provider 的配置要与 applicationId 一样。如下部分代码:

说明:开始两个 meta中的 value,在 gradle进行设置值,provider 中 的 applicationId 直接可以取到 gradle中配置的值。

四、配置 applicationId

这里主要是利用了多渠道打包的原理,在 productFlavors 中进行配置:

productFlavors{    one{        applicationId "cn.imtianx.one"        manifestPlaceholders = [UMENG_APP_KEY_VALUE:"111111",UMENG_CHANNEL_VALUE:"one"]        signingConfig signingConfigs.one    }    two{        applicationId "cn.imtianx.two"        manifestPlaceholders = [UMENG_APP_KEY_VALUE:"222222",UMENG_CHANNEL_VALUE:"two"]        signingConfig signingConfigs.two    }    three{        applicationId "cn.imtianx.three"        manifestPlaceholders = [UMENG_APP_KEY_VALUE:"333333",UMENG_CHANNEL_VALUE:"three"]        signingConfig signingConfigs.three    }}

说明:productFlavors 下的 one、two、three这里代表三个渠道。applicationId 用于配置应用 id,manifestPlaceholders 用于给 AndroidManifest 中配置的占位符设置值,这里仅仅为了测试随便写的值。signingConfig signingConfigs.one指定不同app的签名文件。此外,指定签名文件还可以按照下面的方式:

buildTypes {    productFlavors.one.signingConfig signingConfigs.one    productFlavors.two.signingConfig signingConfigs.two    productFlavors.three.signingConfig signingConfigs.three }

到此整个 配置已经结束。完整 gradle 的配置,请查看

五、打包测试

在 terminal 下输入 gradle assembleRelease进行打包,然后安装测试,可以成功的替换app的icon、名字及其他资源,能够同时安装。

如果需要查看 apk的签名信息,可以将其解压后,使用如下命令查看:

keytool -printcert -file META-INF/CERT.RSA

为了能够区别,前面创建 key store 时尽量用不同的信息。

至此,改打包方式介绍完毕,但是如果用这种方式,则不能进行 ,这里多的 one、two、three类似于三个渠道。

项目源代码地址:

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

你可能感兴趣的文章
Lync Server 2010企业版系列PART2:部署DNS
查看>>
运维自动化之使用Cobbler自动化安装系统与FAQ
查看>>
浅谈服务台/事件管理
查看>>
深入浅出串口编程(2)――基于DOS的串口编程
查看>>
归纳一下:C#线程同步的几种方法
查看>>
操作主机PDC Emulator[为企业维护windows server 2008系列六]
查看>>
Memcached常用命令及使用说明
查看>>
Java数据库连接池类源码
查看>>
SQL Server 中,实现 varbinary 与 varchar 类型之间的数据转换
查看>>
python脚本实现集群检测和管理
查看>>
glLoadIdentity
查看>>
xcode编译报错unknown error -1=ffffffffffffffff Command /bin/sh failed with exit code 1
查看>>
超详细cordova环境配置(windows)及实例
查看>>
N年的经验在别人眼里是怎么看的?
查看>>
3,ORM组件XCode(简介)
查看>>
头发与天空背景抠图
查看>>
使用NPOI从Excel中提取图片及图片位置信息
查看>>
[转] DateTime.Now.ToString()的较为全面的使用介绍
查看>>
开发silverlight下的xps浏览器,支持xps printer输出格式
查看>>
函数式编程(2) 高阶函数
查看>>