刚刚升级了正式版的Android Studio3.0部分API不能用了,但是官网还是给出了解决方案,不过很模糊,需要自己琢磨,今天带大家一起看看。
首先gradle3.0之前的多版本打版方法:(可以看出挺费劲的~)
apply plugin: 'com.android.application'
apply plugin: 'android-apt'
def demo1 = '0001';//DemoAPK1
def demo2 = '0002';//DemoAPK2
android {
// signingConfigs {
// debug {
// keyAlias '****'
// keyPassword '****'
// storeFile file('签名文件.jks路径')
// storePassword '****'
// }
// release {
// keyAlias '****'
// keyPassword '****'
// storeFile file('签名文件.jks路径')
// storePassword '****'
// }
// }
compileSdkVersion 25
buildToolsVersion "25.0.2"
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
defaultConfig {
applicationId "com.example.p031_mokuaihua_viewpager_fragment"
minSdkVersion 21
targetSdkVersion 25
versionCode 1
versionName "1.0"
multiDexEnabled true
renderscriptTargetApi 21
renderscriptSupportModeEnabled true
ndk {
moduleName "native-modbus-jni,libxmediaplayer"
ldLibs "log", "z", "m", "android", "c"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
sourceSets.main {
jni.srcDirs = []
//LOCAL_LDFLAGS += -fuse-ld=bfd
//jni.srcDirs 'src/main/jni'
jniLibs.srcDir 'src/main/libs'
}
signingConfig signingConfigs.debug
manifestPlaceholders = [
DEMO3_CONFIG_VALUE: ".demo3.factorys.Demo3Factory",
DEMO4_CONFIG_VALUE: ".demo4.factorys.Demo4Factory"
]
}
buildTypes {
release {
minifyEnabled true
zipAlignEnabled true
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.debug
}
}
def int minSdk = 21;
def int targetSdk = 25;
def String appId = 'com.example.p031_mokuaihua_viewpager_fragment';
def int vCode = 1;
def String vNameCode = vCode + "";
productFlavors {
//demo1 DemoAPK1_T_1_0001 线上
DemoAPK1 {
minSdkVersion minSdk
applicationId appId
targetSdkVersion targetSdk
versionCode vCode
versionName "DemoAPK1_" + "T_" + vNameCode + "_" + demo1
multiDexEnabled true
renderscriptTargetApi 21
renderscriptSupportModeEnabled true
ndk {
moduleName "native-modbus-jni,libxmediaplayer"
ldLibs "log", "z", "m", "android", "c"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDir 'src/main/libs'
}
signingConfig signingConfigs.debug
}
//demo2 DemoAPK2_D_1_0002 线上
DemoAPK2 {
minSdkVersion minSdk
applicationId appId
targetSdkVersion targetSdk
versionCode vCode
versionName "DemoAPK2_" + "D_" + vNameCode + "_" + demo2
multiDexEnabled true
renderscriptTargetApi 21
renderscriptSupportModeEnabled true
ndk {
moduleName "native-modbus-jni,libxmediaplayer"
ldLibs "log", "z", "m", "android", "c"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDir 'src/main/libs'
}
signingConfig signingConfigs.debug
}
}
// 自定义输出配置
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// def fileName = "UerbT_v${variant.versionName}_${releaseTime()}_${variant.flavorName}.apk"
def fileName = "${variant.versionName}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
productFlavors.all { flavor ->
def currentMode = flavor.versionName.split("_")[3]
def currentEnvironment = flavor.versionName.split("_")[1]
def stValue = true
// t == currentEnvironment 以前的判断条件
if (currentEnvironment.endsWith("T")) {//判断是否为测试版 是否以T结尾
stValue = false
} else {
stValue = true
}
if (currentMode == demo1) {
flavor.manifestPlaceholders = [DEMO2_CONFIG_VALUE: ".demo2.factorys.Demo2Factory1", STATISTICS_VALUE: stValue]
} else if (currentMode == demo2) {
flavor.manifestPlaceholders = [DEMO2_CONFIG_VALUE: ".demo2.factorys.Demo2Factory2", STATISTICS_VALUE: stValue]
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.android.support:design:25.3.1'
compile 'com.android.support:cardview-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha7'
//the third file
compile 'com.jakewharton:butterknife:8.2.1'
apt 'com.jakewharton:butterknife-compiler:8.2.1'
compile 'com.android.support:multidex:1.0.1'
}
这里说一下:gradle3.0后apt就废除了,现在都是这样的方法:
compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
再来看看gradle3.0后是什么样的:
apply plugin: 'com.android.application'
def demo1 = '0001';//DemoAPK1
def demo2 = '0002';//DemoAPK2
android {
// signingConfigs {
// debug {
// keyAlias '****'
// keyPassword '****'
// storeFile file('签名文件.jks路径')
// storePassword '****'
// }
// release {
// keyAlias '****'
// keyPassword '****'
// storeFile file('签名文件.jks路径')
// storePassword '****'
// }
// }
compileSdkVersion 25
buildToolsVersion '26.0.2'
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
defaultConfig {
applicationId "com.example.p031_mokuaihua_viewpager_fragment"
minSdkVersion 21
targetSdkVersion 25
versionCode 1
versionName "1.0"
multiDexEnabled true
renderscriptTargetApi 21
renderscriptSupportModeEnabled true
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath true
}
}
ndk {
moduleName "native-modbus-jni,libxmediaplayer"
ldLibs "log", "z", "m", "android", "c"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
sourceSets.main {
jni.srcDirs = []
//LOCAL_LDFLAGS += -fuse-ld=bfd
//jni.srcDirs 'src/main/jni'
jniLibs.srcDir 'src/main/libs'
}
signingConfig signingConfigs.debug
manifestPlaceholders = [
DEMO3_CONFIG_VALUE: ".demo3.factorys.Demo3Factory",
DEMO4_CONFIG_VALUE: ".demo4.factorys.Demo4Factory"
]
}
buildTypes {
release {
minifyEnabled true
zipAlignEnabled true
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.debug
}
}
def int minSdk = 21;
def int targetSdk = 25;
def String appId = 'com.example.p031_mokuaihua_viewpager_fragment';
def int vCode = 1;
def String vNameCode = vCode + "";
// 自定义输出配置 classpath 'com.android.tools.build:gradle:3.0.0'
android.applicationVariants.all { variant ->
variant.outputs.all {
// outputFileName = "${variant.name}-${variant.versionName}.apk"
outputFileName = "${variant.versionName}.apk"
}
}
// Specifies two flavor dimensions.
flavorDimensions "keep", "change1"
productFlavors {
demo {
dimension "keep"
minSdkVersion minSdk
applicationId appId
targetSdkVersion targetSdk
versionCode vCode
multiDexEnabled true
renderscriptTargetApi 21
renderscriptSupportModeEnabled true
ndk {
moduleName "native-modbus-jni,libxmediaplayer"
ldLibs "log", "z", "m", "android", "c"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDir 'src/main/libs'
}
signingConfig signingConfigs.debug
}
apk1 {
dimension "change1"
versionName "DemoAPK1_" + "T_" + vNameCode + "_" + demo1
def stValue = false
manifestPlaceholders = [DEMO2_CONFIG_VALUE: ".demo2.factorys.Demo2Factory1", STATISTICS_VALUE: stValue]
}
apk2 {
dimension "change1"
versionName "DemoAPK2_" + "D_" + vNameCode + "_" + demo2
def stValue = true
manifestPlaceholders = [DEMO2_CONFIG_VALUE: ".demo2.factorys.Demo2Factory2", STATISTICS_VALUE: stValue]
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.android.support:design:25.3.1'
compile 'com.android.support:cardview-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha7'
//the third file
annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
compile 'com.jakewharton:butterknife:8.6.0'
compile 'com.android.support:multidex:1.0.1'
}
是不是简单很多,Google真是越来越叼~
打版后代码效果图:
官网方案地址:https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html?utm_source=android-studio#variant_aware
本代码git地址:
https://github.com/geeklx/MyApplication/tree/master/p031_mokuaihua_viewpager_fragment
附图: