Android 在java.class中使用gradle定義的變數&使用gradle替換manifest的${xx}
參考了:http://blog.csdn.net/nwsuafer/article/details/42006157
場景:
開發時需要用到測試環境URL,而打包時需要改回正式環境URL,來回的註釋總有會弄錯的時候,但是如果在gradle構建時定義則不需要每次都去檢查自己定義的URL是否是測試或正式,而且程式碼也整潔好多
1.在gradle檔案中定義變數:
buildTypes { debug { minifyEnabled false //混淆關閉 signingConfig signingConfigs.release buildConfigField "String", "HTTP_API", "\"http://test.xxxx.com/\"" manifestPlaceholders = [ app_name: "@string/app_name_debug", ] } release { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'prguard-rules.pro'//指定混淆規則檔案 signingConfig signingConfigs.release //設定簽名信息 buildConfigField "String", "HTTP_API", "\"http://xxxx.com/\"" } }
定義後要SYNC重新重新整理gradle檔案,要不然會呼叫不到
P:上面的buildConfigField就是定義變數的關鍵字,buildConfigField "String", "HTTP_API", "\"http://xxxx.com/\""的意思是定義一個String型別的變數名為HTTP_API的且值為"http://xxxx.com\"的變數。manifestPlaceholder=[app_name: "@string/app_name_debug"]意思是把manifest檔案中${app_name}佔位符替換為@string/app_name_debug的值
2.在java.class檔案中的呼叫
public final class HttpApi { public final static String HTTP_API = BuildConfig.HTTP_API; // public final static String HTTP_API = "http://test.xxxx.com/";//測試環境地址 // public final static String HTTP_API = "http://xxxx.com";//正式環境地址
}
直接使用BuildConfig.HTTP_API就可以呼叫到gradle中定義的buildConfigField變量了
---------------------------------------------------------------------------------------------------------------------------------------------------------------
gradle中使用manifestPlaceholders替換app_name、app_id,app_icon
1.先在manifest.xml中定義佔位符
<application android:allowBackup="true" android:exported="true" android:icon="${icon}" android:label="${app_name}" android:theme="@style/Theme.sty" tools:replace="icon, label,theme">
</application>
2.在各個渠道配置中使用這個manifestPlaceholders進行區別不同渠道APP,如:
productFlavors { 360{ applicationId "com.xxx.xxx" manifestPlaceholders = [app_name:"xxxx" ,icon: "@drawable/icon"] //在java程式碼中具體的使用方式為:context.getResources().getString(R.string.strKey); resValue("string" , "strKey","xx") } }
也可以在buildTypes的debug或release中定義,但是會覆蓋productFlavors中360中定義的變數