android多环境,Android多环境配置打包

需求

打包多个app,App名称,应用图标,包名,启动页都不一样,如果打包一个,然后又替换一下资源,再打下一个,真的会疯了,一次还好,要是有啥bug需要改,又得重新来一遍。。。

app名称-->resValue

如下使用,需要注意的是,在string.xml中不能有相同的字段,否则会报错。 bool、color、dimen也可以使用同样的方法配置

productFlavors {

myapp1 {

resValue "string", "app_name", "myapp1"

resValue "bool", "isrRank", 'false'

}

}

string:类型 app_name:字段名 myapp1:字段的值,最后生成R.string.app_name = "myapp1"

应用图标-->manifestPlaceholders

使用manifestPlaceholders配置添加,常用于AndroidManifest中 meta-data中数据配置,比如友盟,高德地图,百度地图的key

build.gradle

productFlavors {

myapp1 {

manifestPlaceholders = [

UMENG_APPKEY:"key值",

app_icon:"@drawable/ic_launcher_myapp1"

]

}

}

AndroidManifest.xml

android:allowBackup="true"

android:icon="${app_icon}"

android:label="@string/app_name"

android:largeHeap="true"

android:theme="@style/AppTheme">

android:name="UMENG_APPKEY"

android:value="${UMENG_APPKEY}" />

包名-->applicationId

使用这个,也可以方便的区分开测试和生产的包,可以使一台手机安装两个包(Android上安装APK,看是否是同一个app,就是看包名是否一致,不一致则认为是两个不同的app)

productFlavors {

myapp1 {

applicationId 'com.myapp1'

}

}

启动页图片-->buildConfigField

buildConfigField这个应该用得也挺多的,比如生产环境和开发环境,接口地址肯定是不一样的,这时候,就可以通过buildConfigField去配置接口地址,配置完成之后会在BuildConfig.java中生成对应的字段,比如下面的代码:

productFlavors {

myapp1 {

buildConfigField 'String', "API_ENV", '"http://192.168.165.191:8081/api/"'

buildConfigField "Integer", "SPLASH", "R.drawable.screen_myapp1"

}

prod {

buildConfigField 'String', "API_ENV", '"http://xx.xx/api/"'

buildConfigField "Integer", "SPLASH", "R.drawable.screen_prod"

}

对应的在BuildConfig.java文件中会生成:

public static final String API_ENV = "http://192.168.165.191:8081/api/";

public static final Integer SPLASH = R.drawable.screen_myapp1;

使用的时候直接调用BuildConfig.API_ENV就可以获取到当前环境的地址。极大的简便了每次打包修改环境的麻烦(或许会觉得这样接口地址很容易被反编译的找到,但是接口地址,直接抓包也很容易拿到。。。)。同样的启动页也可以直接调用mIvSplash.setBackgroundResource(BuildConfig.SPLASH)设置

通过以上方式,我们基本可以 通过 gradle 动态设定应用标题,应用图标,替换常量,设置不同包名,更改渠道等等。

切换运行时环境

在左下角打开Build Variant选项,选择需要的运行配置,每个环境都有debug和release选择

44482e5cd6fb

切换运行时环境

完整代码

build.gradle

android {

flavorDimensions 'api'

productFlavors {

myapp1 {

resValue "string", "app_name", "myapp1"

buildConfigField 'String', "API_ENV", '"http://192.168.165.191:8081/api/"'

buildConfigField "Integer", "SPLASH", "R.drawable.screen_myapp1"

manifestPlaceholders = [

app_icon:"@drawable/ic_launcher_myapp1"

]

applicationId 'com.myapp1'

}

myapp2 {

resValue "string", "app_name", "myapp2"

buildConfigField 'String', "API_ENV", '"http://xx.xx/api/"'

buildConfigField "Integer", "SPLASH", "R.drawable.screen_myapp2"

manifestPlaceholders = [

app_icon:"@drawable/ic_launcher_myapp2"

]

applicationId 'com.myapp2'

}

}

}

AndroidManifest.xml

android:allowBackup="true"

android:icon="${app_icon}"

android:label="@string/app_name"

android:largeHeap="true"

android:theme="@style/AppTheme">

参考

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值