2017-06-12 遇到的一点小问题
最近应用打包需要不同的渠道,里面有些第三方的key是不一样的。每次打包前都手动改,很麻烦,又容易出错。所以网上找了一下,统一把key写到build.gradle里面。
meta-data
在
AndroidManifest.xml里写一个meta-data测试一下。
然后在
build.gradle里设置不同渠道的值
设置不同渠道内容.png
在Generate Signed APK时可选取不同的渠道包。
打包时可选渠道
在代码中测试了一下,没问题了。
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");
}
获取META_DATA
这是最简单的,但实际项目可不止一项meta-data需要填写,如果只是简单的复制就可能会出现问题。
Error:Execution failed for task ':app:processHuasDebugManifest'.
Manifest merger failed with multiple errors, see logs
错误写法
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.
错误日志
网上看了下,刚好看到原来是会被覆盖。
正确写法
这样子就没问题。然后在自己项目试了下,没想到还是出现了刚才的问题。看了下,只是多了个友盟渠道统计。
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
网上看了下,这个和刚才那个其实一个意思,只是将名字作为值批量写入,省得一直复制黏贴。改为刚才那种套路,就没问题了。但这明显开倒车,以后遇到还是没法解决。所以又
网上看了下,发现原来在defaultConfig里面,忘了也配置一下了。把某个渠道里的内容拷过去,正常了。正好项目里有两个渠道的内容需要一样,这下正好省了填写。
最终确定