Android Gradle manifestPlaceholders 的妙用
阿新 • • 發佈:2019-02-18
開發中很多時候我們會遇到這種場景,比如說:在用到一個第三方sdk,但是這個sdk並沒有區分開發環境和線上環境,這時候我們就可能會申請兩個不同的key標識,而且很多key標識都只能在androidmanifest裡面配置。所以每次上線生成apk就必須手動去更改key標識,如果渠道版本少也還好,打包速度快也還行,需要區分環境的的key標識相對較少也還不錯 ,但是如果你一項都沾不到邊,到時忘記哪個key忘記替換了,一定會有種“身體被掏空的趕腳”,別問我為什麼知道,感覺身體被掏空!!!
- 先在androidmanifest檔案配置一個節點,這裡以極光為例
<meta-data
android:name="JPUSH_APPKEY"
android:value="${jpush_appkey}"/>
- 再看看build.gradle裡面怎麼寫
在bulidtypes節點下有release節點和debug節點,正式簽名時就會走release節點的下編譯指令碼,除錯簽名時就會走debug節點。
本文主要點就是紅框標記的manifestPlaceholders的用法,jpush_appkey對應的就是之前在androidmanifest檔案配置的${jpush_appkey}的這個值。
點進原始碼我們可以發現manifestPlaceholders接收是一個Map的引數,所以這樣其實還有很多可以自定義的地方。
- 比如說在多渠道打包我們也用到了manifestPlaceholders,androidstudio多渠道打包方式網上教程已經很多了,
這裡就不多說了,具體內容可以google或者bing,百度就不推薦,以免被坑,嘿嘿嘿。
- 我們在程式入口出打上log,用來輸出key的值
String jpush_appkey;
try {
ApplicationInfo appInfo = getPackageManager()
.getApplicationInfo(getPackageName(),
PackageManager.GET _META_DATA);
jpush_appkey = appInfo.metaData.getString("JPUSH_APPKEY");
Logger.d("jpush_appkey=" + jpush_appkey);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
正式環境的key值
測試環境的key值
可以看到這個和之前我們在build.gradle只配置的一樣的。
總結
manifestPlaceholders 可以替換androidmanifest檔案中的標籤,可作為快速渠道打包替換渠道名的一種方式,也可以自定義標籤用來替換需要的文字,多作為不同環境不同key的修改。