1.在gradle编译的时候,通过一个变量切换成自己需要的项目(包名,应用图标,应用名称)
2.打包apk配置,按照需要的格式命名apk
关键点:getBuildType() ,设置这个返回值,处理相关的值(包名,应用图标,应用名称)
附注:这个只是切换不同的编译,不是多渠道打包
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
defaultConfig {
//动态修改包名
applicationId "com.iim.myapplication.${getPageName()}"
minSdkVersion 22
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
//签名的配置
//注意,signingConfigs要在buildTypes前面
signingConfigs {
//正式配置
release {
//放签名文件的目录
//项目/app/keystore
storeFile file("./keystore/demo_text.jks")
keyAlias 'test'
keyPassword '123456'
storePassword '123456'
//签名的v1, v2模式
v1SigningEnabled true
v2SigningEnabled true
}
// debug{
// 需要 debug需要不同的配置
// }
}
buildTypes {
release {
//自定义字段
buildConfigField "int", "BUIL_VERSION_TYPE", "${getBuildType()}"
//使用release的配置
signingConfig signingConfigs.release
//开启混淆
minifyEnabled true
//混淆配置
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
flavorDimensions "default"
}
debug {
buildConfigField "int", "BUIL_VERSION_TYPE", "${getBuildType()}"
signingConfig signingConfigs.release
minifyEnabled false
debuggable true
flavorDimensions "default"
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
android.applicationVariants.all {
variant ->
variant.outputs.all {
//这里修改apk文件名
//打包的apk:哈哈_测试-01_v1.0_1_20200512_release.apk
outputFileName = "哈哈_${getTypeName()}_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${getCurrentTime()}_${buildType.name}.apk"
}
}
productFlavors {
dev {
//更改包名
// applicationId "com.iim.myapplication.dev1"
manifestPlaceholders = [ENVIRONMENT:"dev",app_icon: "${getTypeIcon()}"]
//动态增加string.xml的字段
resValue "string", "app_name_text", "${getTypeName()}"
}
//多渠道配置 --> https://www.jianshu.com/p/00da6153f77e
// dev02{
// applicationId "com.iim.myapplication.dev2"
// //app图标
// manifestPlaceholders = [ENVIRONMENT:"dev02",app_icon: "@drawable/test_2"]
// //app名称
// resValue "string", "app_name_text", "测试-2"
// }
//
// dev03{
// applicationId "com.iim.myapplication.dev3"
// //app图标
// manifestPlaceholders = [ENVIRONMENT:"dev03",app_icon: "@drawable/test_3"]
// //app名称
// resValue "string", "app_name_text", "测试-3"
// }
}
}
//获取编译的版本, 0:测试1版本 1:测试2版本 2:测试3版本
//同时动态修改包名,app名称
static def getBuildType() {
return 1
}
//获取当前时间
static def getCurrentTime() {
return new Date().format("yyyyMMdd")
}
static def getPageName() {
return "test${getBuildType()}"
}
static def getTypeName() {
return "测试-${getBuildType()}"
}
static def getTypeIcon() {
if (getBuildType() == 1) {
return "@drawable/test_1"
} else if (getBuildType() == 2) {
return "@drawable/test_2"
} else {
return "@drawable/test_3"
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
自动配置app的名称,图标
关键点:icon, label
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.iim.myapplication">
<application
android:allowBackup="true"
android:icon="${app_icon}"
android:label="@string/app_name_text"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
网友评论