在 AndroidManifest.xml 文件中間可以通過 build.gradle 做中轉(zhuǎn)丽已,去獲取 gradle.property 中的變量焰望,主要是在使用 jenkins 自動構(gòu)建的時(shí)候動態(tài)配置構(gòu)建參數(shù)稽鞭。
給出一個(gè) gradle.property 文件
# Project-wide Gradle settings.
APP_NAME = 安卓應(yīng)用
APP_ID = com.example
這里的字符串可以不用加引號避除。前面是字段名齐苛,后面的是字段對應(yīng)的值翘盖。可以在 build.gradle 文件里直接使用這些字段的值凹蜂。
apply plugin: 'com.android.application'
def getAppName() {
return new String(APP_NAME.getBytes("UTF-8"), "UTF-8")
}
ext {
appVersionCode = 277
appVersionName = 277
appid = APP_ID
appName = getAppName()
}
android {
flavorDimensions "default"
compileSdkVersion 26
buildToolsVersion '26.0.2'
defaultConfig {
applicationId "com.xjj.cloud.ypjczd"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName appVersionName
resValue("string", "SERVER_URL", XJJ_SN_SERVER_URL)
resValue("string", "useVpn", XJJ_USE_VPN)
}
productFlavors {
example {
applicationId appid
manifestPlaceholders = [APP_ICON: "@drawable/ic_launcher",
APP_NAME: appName]
}
}
}
上面是在 app 目錄底下的 builde.gradle 文件的部分內(nèi)容馍驯。
在 ext 里面定義的變量 appid 和 appName 是可以在當(dāng)前的 build.gradle 中直接使用,這兩個(gè)變量后面的賦值 APP_ID 和 APP_NAME 是自動從 gradle.property 中讀取玛痊。這里定義了一個(gè) getAppName 是因?yàn)橹苯邮褂?APP_NAME 會導(dǎo)致亂碼汰瘫。所以這里轉(zhuǎn)換了一下。另外記得去 setting - editor - File Encodings 里面把所有的編碼都改為 UTF-8 的擂煞。如下圖所示:
然后為了在 AndroidManifest.xml 文件里面使用混弥,所以我們在 build.gradle 文件里面的 manifestPlaceholders 定義了 APP_ICON 和 APP_NAME。
productFlavors {
example {
applicationId appid
manifestPlaceholders = [APP_ICON: "@drawable/ic_launcher",
APP_NAME: appName]
}
}
這樣子对省,我們就可以在 AndroidManifest.xml 文件中通過 "${APP_ICON}" 這種方式來調(diào)用 build.gradle 中的變量剑逃。如下所示:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="auto"
package="com.xjj.demo">
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="${APP_ICON}"
android:label="${APP_NAME}"
android:roundIcon="${APP_ICON}"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name="com.example.MyActivity"
android:alwaysRetainTaskState="true"
android:hardwareAccelerated="true"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
所以 AndroidManifest.xml 就通過 build.gradle 文件來調(diào)用 gradle.property 中定義的變量了。