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里面,忘了也配置一下了。把某個渠道里的內容拷過去,正常了。正好項目里有兩個渠道的內容需要一樣,這下正好省了填寫。
最終確定