摘要:由于中以作为应用唯一标识,所以不能在手机上安装两个相同的。在中,默认创建的项目其就是项目的包名。因此,打算通过配置,打包时更换不同的资源文件以及友盟的,从而简化每次迭代的过程。
由于 android 中以 applicationId 作为应用唯一标识,所以不能在手机上安装两个相同 applicationId 的app。在 AS 中,默认创建的项目其 applicationId就是项目的包名。可以在gradle 中配置更改 改 applicationid。
最近,维护的一个项目是一个导流的,一套代码每次打包成5个APP。每个APP除名字、icon、部分资源文件不同外,其他的基本一样。由于是维护项目,之前的同事是将其分成5个项目,那样每次迭代,都要在一个项目中写完测试通过后,拷贝到其他四个项目中,最后一个个项目打包。这样,既麻烦又浪费时间。因此,打算通过配置 gradle,打包时更换不同的 applicationeId、资源文件以及友盟的appkey,从而简化每次迭代的过程。
一、配置资源文件为了方便测试,这里将 DifPackage 项目打包为 one、two、three三个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:workspaceandroid_tempDifPackageappimtianx_one.jks") storePassword 123456 keyAlias imtianx keyPassword 123456 } /* two,three配置类似 */ }
方法二:首先在 local.properties 下添加密钥信息,然后在 build.gradle 中读取使用
/*local.properties */ ## one keystore file keystroe_storeFile_1 =E:workspaceandroid_tempDifPackageappimtianx_one.jks keystroe_storePassword_1 =123456 keystroe_keyAlias_1 =imtianx keystroe_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 一样。如下部分代码:
四、配置 applicationId说明:开始两个 meta中的 value,在 gradle进行设置值,provider 中 的 applicationId 直接可以取到 gradle中配置的值。
这里主要是利用了多渠道打包的原理,在 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 的配置,请查看 build.gradle
五、打包测试在 terminal 下输入 gradle assembleRelease进行打包,然后安装测试,可以成功的替换app的icon、名字及其他资源,能够同时安装。
如果需要查看 apk的签名信息,可以将其解压后,使用如下命令查看:
keytool -printcert -file META-INF/CERT.RSA
为了能够区别,前面创建 key store 时尽量用不同的信息。
至此,改打包方式介绍完毕,但是如果用这种方式,则不能进行 多渠道打包,这里多的 one、two、three类似于三个渠道。
项目源代码地址:DifPackage
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/13740.html
摘要:版权声明本公众号发布的所有文章,均属于原创,版权归本公众号所有。允许有条件转载,转载请附带底部二维码。遇上这样的情况,会将所有专版需要的包等打在一起,这样无形中增大的安装包的体积。用的方式,新建两个,分别表示国内版本和海外版本。 版权声明: 本公众号发布的所有文章,均属于原创,版权归本公众号所有。 允许有条件转载,转载请附带底部二维码。 一、前言 在实际的工作中,当接手的App项目...
摘要:美团自动化之旅生成渠道包美团自动化之旅适配渠道包实现参考实现参考深入学习系列教程六多渠道打包产品研发五多渠道打包更便捷的多渠道打包方式打包系列多渠道快速打包 原文地址:http://blog.csdn.net/u0108184... Gradle实战系列文章: 《Gradle基本知识点与常用配置》《Gradle实战:不同编译类型的包同设备共存》《Gradle实战:发布aar包到mav...
摘要:为什么是教程一掘金开发的同时,也应该了解其构建构建工具。配置指南掘金简介是一个基于和概念的项目自动化建构工具。代码混淆,说白了就是代码压缩代码混淆以及资源压缩配置最佳实践掘金本文会不定期更新,推荐下项目。 为什么是Gradle?- Gradle教程(一) - Android - 掘金开发 Android 的同时,也应该了解其构建构建工具。特别是在实际的生产开发项目中,对于需要分发的包有...
摘要:例如,调试构建类型支持调试选项,使用调试密钥签署而发布构建类型则可压缩混淆以及使用发布密钥签署进行分发。产品风味是可选项,并且您必须手动创建。指定需要将其与应用的一起打包的仅运行时依赖项。如果运行时无需此依赖项,这将有助于缩减的大小。 前言 前一篇文章,对Gradle进行了一个概述,同时对于Groovy语言进行了简单的介绍,有了之前的基础,现在就可以进行更细致化的学习,来学习一下在An...
摘要:第五点更重要,做插件化需要控制两个地方。因此不符合插件化的需求,不作考虑。支持加载外部的或者文件,正好符合文件化的需求,所有的插件化方案都是使用来加载插件中的文件的。方案简单,适用于自身少量代码的插件化改造。年月是手机助手实现的一种插件化 最近几年移动开发业界兴起了「 插件化技术 」的旋风,各个大厂都推出了自己的插件化框架,各种开源框架都评价自身功能优越性,令人目不暇接。随着公司业务快...
阅读 3574·2021-10-15 09:42
阅读 2397·2021-09-03 10:50
阅读 1463·2021-09-03 10:28
阅读 1605·2019-08-30 15:54
阅读 2290·2019-08-30 12:46
阅读 314·2019-08-30 11:06
阅读 2670·2019-08-30 10:54
阅读 400·2019-08-29 12:59