轉載請說明來源: http://www.cnblogs.com/lizhilin2016/p/7390079.html 最近lz 在開始做一個新的Demo, 在項目中集成了bugly用於收集項目中的崩潰日誌, 集成Bmob用於作為後臺資料庫, 集成了友盟用於集成第三方分享, 當然了, 這些都有很多方 ...
轉載請說明來源: http://www.cnblogs.com/lizhilin2016/p/7390079.html
最近lz 在開始做一個新的Demo, 在項目中集成了bugly用於收集項目中的崩潰日誌, 集成Bmob用於作為後臺資料庫, 集成了友盟用於集成第三方分享, 當然了, 這些都有很多方案可以選擇, 到底採用哪種還是根據自己的喜好或者主要說是公司的具體要求, lz 這裡主要說的是, 集成這些東西, 每次都要在manifest.xml 還有build中配置一些參數, 而且有些參數還不止要配置一遍, 那麼問題就來了--> 使用 gradle 在編譯時動態設置 Android resValue / BuildConfig / Manifes中<meta-data>變數的值?
總結了幾篇文章, 網上關於這些知識也比較零散, 我在學習這些之前, 也根本不知道還有這樣的方法. 所以說不知道並不可怕, 可怕的是不知道自己不知道.
1. 全局變數配置, 可以用於統一管理版本號或者依賴庫, 在根目錄build.gradle文件中定義如下:
ext {
compileSdkVersion = 25
buildToolsVersion = "25.0.2"
minSdkVersion = 16
targetSdkVersion = 25
versionCode = 1
versionName = "1.0"
applicationId = "www.lz.com.XXX"
filePath = "lz.jks"
alias = "alias"
pwd = "pwd"
v7version = "25.3.1"
buglyAppId = "XXX"
buglyChannel = "Android 端 2017-08-18 測試版"
}
app/build.gradle 文件中引用如下:
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
applicationId rootProject.ext.applicationId
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
signingConfigs {
mycustom {
storeFile file(filePath)
storePassword pwd
keyAlias alias
keyPassword pwd
}
}
2. 使用gradle 在編譯時動態配置Android Manifest:
在新版本的gradle中, processManifest這個方法被移除掉了, 而提供了一個新的功能manifestPlaceholders, 我們可以在AndroidManifest中定義一個變數, 在build.gradle中動態的替換掉, 十分方便, 語法也十分簡單.
對比上面的功能, 我們需要動態替換bugly 的appkey, 需要在AndroidManifest中定義一個變數
<!-- Bugly 配置APP信息 start -->
<!-- 配置APP ID -->
<meta-data
android:name="BUGLY_APPID"
android:value="${bugly_app_id}" />
<!-- 配置APP版本號 -->
<meta-data
android:name="BUGLY_APP_VERSION"
android:value="${bugly_version}" />
<!-- 配置APP渠道號 -->
<meta-data
android:name="BUGLY_APP_CHANNEL"
android:value="${bugly_channel}" />
<!-- Bugly 配置APP信息 end -->
接著, 我們在app/build.gradle文件中定義, buglyAppId 按照上面方法一, 在根目錄build.gradle文件中定義
buildTypes {
release{
manifestPlaceholders = [bugly_app_id: buglyAppId, bugly_channel: buglyChannel, bugly_version: versionName]
signingConfig signingConfigs.mycustom
}
}
3. 由衷感謝這兩篇文章的作者:
http://blog.csdn.net/u014011112/article/details/55511615
http://blog.csdn.net/xx326664162/article/details/49247815