Android Studio 一个工程打包多个不同包

本文介绍了如何使用Android Studio和Gradle在同一代码基础上打包多个不同包名的应用。主要涉及修改app的build.gradle文件,配置productFlavors,避免资源冲突,修改AndroidManifest.xml以及设置manifestPlaceholders。同时讲解了如何处理provider标签的authorities属性,确保不同应用能正常安装。还介绍了如何在不同产品中实现差异化配置,包括替换manifest字段、定义res对象以及使用buildConfigField来设置变量。最后,文章提供了处理多个环境变量的实践技巧,如抽离文件管理和功能差异化处理。
摘要由CSDN通过智能技术生成

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

修改app的build.gradle文件

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

android {

 ...

 productFlavors {

  // app1

  app1 {

   // 设置applicationId(这里很重要,两个相同applicationId的apk不同同时安装在同一台Android手机中)

   applicationId "com.johan.demo"

   // 自动生成@string/app_name为demo

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

   // 定义app_icon字段,在AndroidManifest.xml文件中用到

   manifestPlaceholders = [app_icon : "@mipmap/ic_launcher"]

  }

  // app2

  app2 {

   // 解释同app1

   applicationId "com.johan.demo1"

   resValue "string","app_name","demo1"

   manifestPlaceholders = [app_icon : "@mipmap/ic_launcher1"]

  }

 }

 lintOptions {

  checkReleaseBuilds false

  abortOnError false

 }

}

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

?

1

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

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

?

1

<item type="string" name="app_name">demo</item>

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

?

1

<string name="app_name">demo</string>

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

再注意啦,我们 只能在app的build.gradle文件配置各个版本的值 ,如

?

1

2

3

4

5

6

app1 {

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值