同一套代码,稍做修改(如包名不一样,图标不一样,应用名不一样等)

27 篇文章 0 订阅
21 篇文章 0 订阅

公司最近有个特别的需求,同一套代码,稍做修改(如包名不一样,图标不一样,应用名不一样等),编译出几个不同的应用。刚好用AS重构完项目,在网上查阅了一些资料,终于搞定!!在这记录一下。

 

AS主要是利用gradle来实现这个需求的,具体做法如下:


修改app的build.gradle文件 

假设我们同一套代码编译2个app:app1和app2


Android { 
... 
productFlavors { 
// app1 
app1 { 
// 覆盖AndroidManifest.xml文件中的包名 
manifestPlaceholders = [package_name:"com.johan.demo"] 
// 设置applicationId(这里很重要,两个相同applicationId的APK不同同时安装在同一台Android手机中) 
applicationId "com.johan.demo" 
// 自动生成@string/app_name为demo 
resValue "string","app_name","demo" 
// 定义app_icon字段,在AndroidManifest.xml文件中用到 
manifestPlaceholders = [ENVIRONMENT: "app1", 
app_icon : "@mipmap/ic_launcher"] 

// app2 
app2 { 
// 解释同app1 
manifestPlaceholders = [package_name:"com.johan.demo1"] 
applicationId "com.johan.demo1" 
resValue "string","app_name","demo1" 
manifestPlaceholders = [ENVIRONMENT: "app2", 
app_icon : "@mipmap/ic_launcher1"] 


lintOptions { 
checkReleaseBuilds false 
abortOnError false 

注意啦,这里有个坑,我们上面写了


resValue "string","app_name","demo" 

运行之后,AS会自动生成@string/app_name,内容是这样的


demo 

那么问题来了,如果你在app的strings.xml文件也定义了


demo 

编译的时候就会出现问题,因为有2个app_name,所以我们要把app的strings.xml去掉,编译就会正常了。


修改AndroidManifest.xml文件 
package="com.johan.demo"> 
android:allowBackup="true" 
// 注意啦,这里改为${app_icon} 
android:icon="${app_icon}" 
android:label="@string/app_name" 
android:supportsRtl="true" 
android:theme="@style/AppTheme"> 





 

注意啦,icon属性的值是${app_icon},虽然为红色,但是不要紧,我们在build.gradle文件中加入了这么一段代码:


android { 
... 
lintOptions { 
checkReleaseBuilds false 
abortOnError false 

这里的作用就是即使项目中报错也不会停止打包 。


打包并签名APK 

我们打包时,就会出现2个app:

 

Android Studio 一个工程打包多个不同包名的APK

 

我们选择2个app,AS就会帮我们打包2个不同的APK了,就这么简单!!


参考资料 

一键打包出多个不同包名,不同应用名称和图标的APK

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值