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的修改。

發佈了61 篇原創文章 · 獲贊 42 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章