Android打包参数配置

2,223 阅读1分钟

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变量,即可修改上面所提到的参数,实现动态配置,在特殊场景下使用非常方便,欢迎大家补充。