android 动态修改manifest,Android动态替换AndroidManifest的值

本文介绍了如何在Android中利用gradle的manifestPlaceholders特性动态修改AndroidManifest.xml,以便在debug和release环境中区分第三方推送的AppKey和AppSecret。通过在buildTypes下设置不同的manifestPlaceholders,并在AndroidManifest.xml中使用${}引用,可以在应用启动时检查配置是否生效,确保测试不会影响线上用户。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

名称

gradle中的manifestPlaceholders

场景

场景举例:项目中集成了推送,管理后台设计了“全量用户推送”功能,该功能的测试不能影响线上用户,固需要将debug与release环境的推送AppKey和AppSecret区分开,第三方推送的AppKey和AppSecret常配置在AndroidManifest中的,每次发版的时候去修改,极容易忘记,则可以用到gradle中的manifestPlaceholders

用法

要区分debug与release环境的配置,则在项目module的buildeTypes的debug和release下增加manifestPlaceholders,示例代码:

build.gradle

buildTypes{

release{

……

manifestPlaceholders = [APP_KEY:"1111122222",

APP_SECRET:"4d32bbbda76sdf23fxv11ccf27c21fc74"]

}

debug{

……

manifestPlaceholders = [APP_KEY:"3333344444",

APP_SECRET:"8a1c2d8fac99ff91as3fsc3bbd189ba"]

}

AndriodManifest.xml

android:name="app_key"

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

android:name="app_secret"

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

检查是否生效

在启动过程中任意一个Java类中加入检查代码,比如Application的onCreate方法中:

try {

ApplicationInfo applicationInfo = getPackageManager().getApplicationInfo(appContext.getPackageName(), PackageManager.GET_META_DATA);

int pushAppKey = applicationInfo.metaData.getInt("app_key");

String pushAppSecret = applicationInfo.metaData.getString("app_secret");

StringBuilder pushLog = new StringBuilder();

pushLog.append("PushAppKey=");

pushLog.append(pushAppKey);

pushLog.append("PushAppSecret=");

pushLog.append(pushAppSecret);

LogCat.i(pushLog.toString());

} catch (PackageManager.NameNotFoundException e) {

e.printStackTrace();

}

注意与思考

manifestPlaceholders可以直接加在defaultConfig和buildType(release和debug)里,如果key重复,则release和debug会覆盖defaultConfig;

Manifest中的变量引用是${},而不是@{},别被DataBinding带沟里去了;

在Java中可以检查时,applicationInfo.metaData.getString传的是AndroidManifest中meta-data的name,而不是manifestPlaceholders的key;如果值是数字,把getString()换成getInt();

若需要release生效而debug不生效的配置,也可以用相同的方法,debug下设为空就好了,如:错误日志统计。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值