1. 程式人生 > >Android Gradle manifestPlaceholders 的妙用

Android Gradle manifestPlaceholders 的妙用

開發中很多時候我們會遇到這種場景,比如說:在用到一個第三方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的修改。