1.build.gradle 文件下配置
//这里是读取local.properties文件,提供给下方代码用来提取keystroe_storeFile等key的值 Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream())
signingConfigs { config { storeFile file(properties.getProperty("keystroe_storeFile")) storePassword properties.getProperty("keystroe_storePassword") keyAlias properties.getProperty("keystroe_keyAlias") keyPassword properties.getProperty("keystroe_keyPassword") } }
在local.properties 文件下
keystroe_storeFile=xxxxx.jks //签名文件路径
keystroe_storePassword=*****
keystroe_keyAlias=xxxxxx
keystroe_keyPassword=*****
buildTypes {release{
......
// 使用config签名 signingConfig signingConfigs.config
...}
第二种:
Properties props = new Properties() props.load(new FileInputStream(file("signing.properties")))
config {//发布版本的签名配置 storeFile file(props['KEYSTORE_FILE']) keyAlias props['KEY_ALIAS'] storePassword props['KEYSTORE_PWD'] keyPassword props['KEY_PWD'] }在App项目下新建文件 signing.properties
多版本打包:KEYSTORE_FILE = xxxx.jks //签名文件路径 KEY_ALIAS = xxxx 别名 KEYSTORE_PWD= **** KEY_PWD= *****
// 使用config签名 signingConfig signingConfigs.config
AndroidManifest文件下配置
<!--打包区分--> <meta-data android:name="CHANNEL" android:value="${CHANNEL_VALUE}" />productFlavors { //测试 TestApp { versionCode 3 versionName "1.0.3" buildConfigField "String", "IP", '"192.168.2.2"'//会自动生成BuildConfig文件,引用BuildConfig.PORT buildConfigField "String", "PORT", '"100"' manifestPlaceholders = [CHANNEL_VALUE: "TestApp"] }//测试 TestApp2 { versionCode 5 versionName "1.0.1" buildConfigField "String", "IP", '"192.168.2.5"'//会自动生成BuildConfig文件,引用BuildConfig.PORT buildConfigField "String", "PORT", '"12"' manifestPlaceholders = [CHANNEL_VALUE: "TestApp2"] }}
def releaseTime() {//时间构造函数 return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC")) }release { // release模式下,不显示log buildConfigField("boolean", "LOG_DEBUG", "false") // 为版本名添加后缀 versionNameSuffix "-relase" // 开启混淆 minifyEnabled true // 开启ZipAlign优化 zipAlignEnabled true // 移除无用的resource文件 shrinkResources true // 使用config签名 signingConfig signingConfigs.config // 混淆文件位置 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // 批量打包 applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { //输出apk名称为:渠道名_版本名_时间.apk def fileName = "${variant.productFlavors[0].name}_v${variant.versionName}_${releaseTime()}.apk" output.outputFile = new File(outputFile.parent, fileName) } } } }