- 場景:
多渠道打包陨溅、版本共存终惑、區(qū)分線上線下版本
- 假設(shè)項目分正式環(huán)境和測試環(huán)境兩個版本,兩個版本需要同時安裝在一個手機上门扇,此時需要兩個applicationId
com.tikeyc.online
和com.tikeyc.offline
defaultConfig {
applicationId "com.tikeyc.online" // 正式
// applicationId "com.tikeyc.offline" // 測試
}
- 添加環(huán)境標(biāo)記雹有,在打包時指定線上線下環(huán)境
buildTypes {
release {
buildConfigField("boolean", "online", "${defaultConfig.applicationId == "com.tikeyc.online"}")
}
debug {
buildConfigField("boolean", "online", "${defaultConfig.applicationId == "com.tikeyc.online"}")
}
}
編譯后在BuildConfig.class中會自動生成online
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.tikeyc.online";
public static final String BUILD_TYPE = "debug";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1";
// Field from build type: debug
public static final boolean online = true;
}
在JAVA業(yè)務(wù)代碼中使用
public class MyContactsURL {
public static final String host = BuildConfig.online ? "online .xxx.xx" : "offline.xxx.xx";
}
- 指定線上偿渡、線下版本的applicationId和簽名文件
defaultConfig {
applicationId "com.tikeyc.online" // 正式
// applicationId "com.tikeyc.offline" // 測試
}
signingConfigs {
def online = defaultConfig.applicationId == "com.tikeyc.online"
def file = online ? file("./online.jks") : file("./offline.jks")
def alias = online ? "online" : "offline"
release {
storeFile file
storePassword "online.123"
keyAlias alias
keyPassword "online.123"
}
debug {
storeFile file
storePassword "offline.123"
keyAlias alias
keyPassword "offline.123"
}
}
buildTypes {
release {
buildConfigField("boolean", "online", "${defaultConfig.applicationId == "com.tikeyc.online"}")
signingConfig signingConfigs.release
buildConfigField "boolean", "LOG_DEBUG", "false" //不顯示log
minifyEnabled false // 打包是否代碼混淆
shrinkResources false // 是否打開資源壓縮
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
buildConfigField("boolean", "online", "${defaultConfig.applicationId == "com.tikeyc.online"}")
signingConfig signingConfigs.debug
}
}
- 自動化配置
AndroidManifest.xml
文件中的值
比如配置百度地圖的API_KEY
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="${BAIDUMAP_KEY}" />
在build.gradle
文件中設(shè)置manifestPlaceholders
defaultConfig {
applicationId "com.tikeyc.online" // 正式
// applicationId "com.tikeyc.offline" // 測試
if (applicationId == "com.tikeyc.online") {
manifestPlaceholders = [
BAIDUMAP_KEY: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
]
} else {
manifestPlaceholders = [
BAIDUMAP_KEY: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
]
}
}
- 配置打包后的
apk
名稱
android.applicationVariants.all {
variant ->
variant.outputs.all {
// 在這里修改apk文件名
// outputFileName = "tikeyc.apk"
def suffix = variant.applicationId == "com.tikeyc.online" ? "online" : "offline"
outputFileName = "tikeyc-${suffix}.apk"
}
}