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

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

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


AndroidManifest.xml里写一个meta-data测试一下。

然后在
build.gradle里设置不同渠道的值

《在build.gradle设置AndroidManifest.xml里的meta-data数据,以及代码获取方式》 设置不同渠道内容.png

在Generate Signed APK时可选取不同的渠道包。

《在build.gradle设置AndroidManifest.xml里的meta-data数据,以及代码获取方式》 打包时可选渠道

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

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");
}

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

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

Error:Execution failed for task ':app:processHuasDebugManifest'.
 Manifest merger failed with multiple errors, see logs

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

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. 

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

网上看了下,刚好看到原来是会被覆盖。

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

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

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

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

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

    原文作者:苍蝇的梦
    原文地址: https://www.jianshu.com/p/c20ad2bf269a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞