Android 使用gradle打包的各種配置
在AS中利用gradle打包,可以高效並且自由地配置各種參數,發布不同的版本。關於配置gradle文件的一些做法,總結為如下。
一.替換AndroidManifest中的佔位符
舉個例子,在AndroidManifest文件中,我們將極光推送的key值指定為一個佔位符
在build.gradle文件中,這裡介紹3種方法去替換該佔位符
1.接收gradlew assemble命令輸入的自定義參數的值
2.使用string文件的值
3.使用gradle.properties文件的值,具體參考第九
二.獨立配置簽名信息
簽名相關的信息,直接寫在gradle不利於安全,我們可以把這些信息寫到工程主module根目錄下的signing.properties文件,注意這個文件不要添加進版本控制。
然後在build.gradle中載入這個文件,引用其中的參數就可以了
三. 多渠道打包
國內應用市場非常多,為了統計各個應用市場的app下載量和使用情況,我們需要多渠道的打包。
1.配置AndroidManifest.xml
以友盟渠道為例,渠道信息一般都是寫在 AndroidManifest.xml文件中:
如果不使用多渠道打包方法,那就需要我們手動一個一個去修改value中的值,xiaomi,360,qq,wandoujia等等。使用多渠道打包的方式,就需要把上面的value配置成下面的方式:
其中$中的值就是你在gradle中自定義配置的值。
2.在build.gradle設置productFlavors
寫法如下:
其中[UMENG_CHANNEL_VALUE: "wandoujia"]就是對應
$的值。這裡還有簡潔的寫法:
其中name的值對相對應各個productFlavors的選項值,這樣就達到自動替換渠道值的目的了。這樣(用AS自帶工具Generate signed apk)生成apk時,選擇相應的Flavors來生成指定渠道的包就可以了,而且生成的apk會自動幫你加上相應渠道的後綴。
3.一次生成所有渠道包
使用CMD命令,進入到項目所在的目錄,直接輸入命令:
就可以打Release包,或者,在Android Studio中的下方底欄中有個命令行工具Terminal,你也可以直接打開,輸入上面的命令,進行打包。
注意:如果沒有對gradle配置的話,可能輸入上面的命令,會提示「不是內部或者外部命令」,不要著急,我們只需要找到gradle的目錄,把它配置到電腦中的環境變數中去即可。
配置方式如下:
先找到gralde的根目錄,在系統變數里添加兩個環境變數:
變數名為:GRADLE_HOME,變數值就為gradle的根目錄;
比如變數值為:
D:androidandroid-studio-ide-143.2739321-windowsandroid-studiogradlegradle-2.10
還有一個在系統變數里PATH裡面添加gradle的bin目錄
比如:
D:androidandroid-studio-ide-143.2739321-windowsandroid-studiogradlegradle-2.10bin
這樣就配置完了,執行以下這個命令:gradle assembleRelease,看看是不是可以了。
4.修改導出包的文件目錄和apk名稱
四.多工程全局配置
隨著產品渠道的鋪開,往往一套代碼需要支持多個產品形態,這就需要抽象出主要代碼到一個Library,然後基於Library擴展幾個App Module。相信每個module的build.gradle都會有這個代碼:
當升級sdk、build tool、target sdk等,幾個module都要更改,非常的麻煩。也可能導致app module之間的差異不統一,導致不可控。強大的gradle插件在1.1.0之後支持全局變數設定,一舉解決了這個問題。先在project的根目錄下的build.gradle定義ext全局變數:
然後在各module的build.gradle中引用如下:
每次修改project級別的build.gradle即可實現全局統一配置。
五.混淆代碼
release版本開啟混淆
混淆文件可以參考這篇文章進行配置Android代碼混淆在AS的實踐
六.動態設置一些額外信息
把當前的編譯時間、編譯的機器、最新的commit版本添加到apk
上述代碼實現了動態的添加了3個字元串資源: build_time、build_host、build_revision, 然後在其他地方可像如引用字元串一樣使用如下:
七.buildConfigField自定義配置
大家可能會遇到下面這種情況,就是Beta版本伺服器和Release版本伺服器通常不在一台伺服器上,而測試希望可以同時發布兩個伺服器的版本用於測試,這個時候我們就需要修改代碼,然後一個一個老老實實的發包。gradle提供buildConfigField配合多渠道打不同伺服器版本的方法。其實用法很簡單,首先在相應的節點加上定義,比如:
然後在代碼中通過BuildConfig.LOG_DEBUG或者BuildConfig.API_HOST調用即可。
八.dex突破65535的限制
隨著項目的一天天變大,慢慢的都會遇到單個dex最多65535個方法數的瓶頸,如果是ANT構建的項目就會比較麻煩,但是Gradle已經幫我們處理好了,而添加的方法也很簡單,總共就分三步 :
1.首先是在defaultConfig節點使能多DEX功能
2.然後就是引入multidex庫文件
3.最後就是你的AppApplication繼承一下MultiDexApplication即可。
九.在gradle.properties文件中配置伺服器生產環境和正式環境的地址、第三方服務appkey以及對於包名的配置
項目中加入用到一些第三方的SDK的話,就避免不了各種key的寫入,一般都會有生產環境和正式環境各自使用的值
gradle.properties如下:
在build.gradle文件中引用,
也可配合buildConfigField自定義配置:
github版本:Android 使用gradle打包的各種配置
作者:echoMu_
鏈接:https://www.jianshu.com/p/1a320062aedd


TAG:Android開發中文站 |