Android打包时,我们常常会根据release,debug等选择不同的服务器Host,有时候还需要修改包名,apk名字,安装名称等,如果在打包前逐一手动修改,会给开发者带来很多不愉快,一起来看看怎么自动配置吧。
自定义BuildConfig值
根据debug、release版本,我们可以自定义BuildConfig值,方便在代码中引用,动态选择服务器Host或关闭相关功能,使用方法如下:
def suffix="5"
buildTypes {
release {
buildConfigField("String","JS_VERSION","\"js$suffix\"")
}
debug {
buildConfigField("String","JS_VERSION","\"js$suffix\"")
}
}
我们自定义一个String变量JS_VERSION,然后通过suffix动态的设置值,注意上面字符串值写法,必须加两层双引号,否则得到的字符串没有引号,会报错。然后我们在代码中通过BuildConfig引用
val srcHostStr: String = if (TextUtils.equals(BuildConfig.JS_VERSION,"js5"))
JW5_HOST else JW7_HOST
我们看一下生产的BuildConfig文件
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 121;
public static final String VERSION_NAME = "1.2.1";
// Fields from build type: debug
public static final String JS_VERSION = "js5";
}
可以看到我们自定义的JS_VERSION变量
动态修改Manifest值
同上,我们可以定义manifestPlaceholders值,比如我们想动态替换安装后app的名字,也就是修改app_name
def suffix="5"
buildTypes {
release {
manifestPlaceholders=[APP_NAME:"测试$suffix"]
}
debug {
manifestPlaceholders=[APP_NAME:"测试$suffix"]
}
}
然后在manifest中引用
<application
android:name=".app.App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="${APP_NAME}"/>
OK,这样我们只要修改suffix值,就能修改app名字,不用去values中进行修改
动态修改applicationId
有时候,我们需要在同一个手机中安装多个同样的应用,那么我们可以动态配置applicationId,为其添加后缀即可。
def suffix="5"
buildTypes {
release {
applicationIdSuffix ".js$suffix"
}
debug {
applicationIdSuffix ".js$suffix"
}
}
修改suffix值,同时也修改了applicationId。
动态修改apk名字
默认生成的apk名字是app-debug.apk或者app-release.apk,当然我们也可以写groovy脚本去修改打包后的名字,但小应用往往不便,当然手动更不便,我们还可以这样做,修改defaultConfig中的archivesBaseName。
def suffix="5"
defaultConfig {
applicationId "com.cmt.js"
minSdkVersion rootProject.ext.min_sdk
targetSdkVersion rootProject.ext.target_sdk
versionCode 121
versionName "1.2.1"
archivesBaseName = "js$suffix-$versionName"
}
这样生成的包名就变成了js5-1.2.1-debug.apk,非常方便。
上述我们定义了一个suffix变量,修改suffix变量,即可修改上面所提到的参数,实现动态配置,在特殊场景下使用非常方便,欢迎大家补充。