在build.gradle设置AndroidManifest.xml里的meta-data数据,以及代码获取方式

2017-06-12 遇到的一点小问题
最近应用打包需要不同的渠道,里面有些第三方的key是不一样的。每次打包前都手动改,很麻烦,又容易出错。所以网上找了一下,统一把key写到build.gradle里面。

2286722-e674fd3968ecd5e5.jpg
meta-data

AndroidManifest.xml里写一个meta-data测试一下。
然后在build.gradle里设置不同渠道的值
2286722-632edac9a3af0e31.png
设置不同渠道内容.png

在Generate Signed APK时可选取不同的渠道包。
2286722-2f2fe1d6e02915b7.png
打包时可选渠道

在代码中测试了一下,没问题了。

ApplicationInfo appInfo = null;
try {
    appInfo = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}
if (null != appInfo && appInfo.metaData != null) {
    String appid = appInfo.metaData.getString("WANNOO");
    String appi2d = appInfo.metaData.getString("RRG");
}
2286722-cea8a61d9356b52f.png
获取META_DATA

这是最简单的,但实际项目可不止一项meta-data需要填写,如果只是简单的复制就可能会出现问题。

Error:Execution failed for task ':app:processHuasDebugManifest'.
 Manifest merger failed with multiple errors, see logs
2286722-946a9f70af0d1d05.png
错误写法
Error:15:43:44.643 [ERROR] [org.gradle.api.Project] D:\rrg\Wannoo\app\src\main\AndroidManifest.xml:316:13-43 Error:
    Attribute meta-data#JPUSH_APPKEY@value at AndroidManifest.xml:316:13-43 requires a placeholder substitution but no value for <JPUSH_VALUE> is provided.
15:43:44.643 [ERROR] [org.gradle.api.Project] D:\rrg\Wannoo\app\src\main\AndroidManifest.xml:324:13-43 Error:
    Attribute meta-data#UMENG_APPKEY@value at AndroidManifest.xml:324:13-43 requires a placeholder substitution but no value for <UMENG_VALUE> is provided.
15:43:44.643 [ERROR] [org.gradle.api.Project] D:\rrg\Wannoo\app\src\main\AndroidManifest.xml:341:13-43 Error:
    Attribute meta-data#QBSDKAppKey@value at AndroidManifest.xml:341:13-43 requires a placeholder substitution but no value for <QBSDK_VALUE> is provided.
15:43:44.643 [ERROR] [org.gradle.api.Project] D:\rrg\Wannoo\app\src\main\AndroidManifest.xml:345:13-43 Error:
    Attribute meta-data#com.baidu.lbsapi.API_KEY@value at AndroidManifest.xml:345:13-43 requires a placeholder substitution but no value for <BAIDU_VALUE> is provided.
15:43:44.651 [ERROR] [org.gradle.api.Project] D:\rrg\Wannoo\app\src\main\AndroidManifest.xml Error:
    Validation failed, exiting
15:43:44.664 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 
15:43:44.664 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] FAILURE: Build failed with an exception.
15:43:44.664 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 
15:43:44.664 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * What went wrong:
15:43:44.665 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Execution failed for task ':app:processHuasDebugManifest'.
15:43:44.665 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] > Manifest merger failed with multiple errors, see logs
15:43:44.665 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 
15:43:44.665 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Try:
15:43:44.665 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Run with --stacktrace option to get the stack trace. 

2286722-9d0e7e499caa75b9.png
错误日志

网上看了下,刚好看到原来是会被覆盖。
2286722-97c977e90addd31b.png
正确写法

这样子就没问题。然后在自己项目试了下,没想到还是出现了刚才的问题。看了下,只是多了个友盟渠道统计。

productFlavors.all { flavor ->
    flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}

网上看了下,这个和刚才那个其实一个意思,只是将名字作为值批量写入,省得一直复制黏贴。改为刚才那种套路,就没问题了。但这明显开倒车,以后遇到还是没法解决。所以又
网上看了下,发现原来在defaultConfig里面,忘了也配置一下了。把某个渠道里的内容拷过去,正常了。正好项目里有两个渠道的内容需要一样,这下正好省了填写。

2286722-86b0fdcea89a1e83.png
最终确定

展开阅读全文

没有更多推荐了,返回首页