Android Studio 第五十五期 - Studio3.0升级到gradle3.0.0后API失效方案
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Studio 第五十五期 - Studio3.0升级到gradle3.0.0后API失效方案相关的知识,希望对你有一定的参考价值。
刚刚升级了正式版的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真是越来越叼~
打版后代码效果图:
本代码git地址:
https://github.com/geeklx/MyApplication/tree/master/p031_mokuaihua_viewpager_fragment
附图:
本文出自 “梁肖技术中心” 博客,请务必保留此出处http://liangxiao.blog.51cto.com/3626612/1976767
以上是关于Android Studio 第五十五期 - Studio3.0升级到gradle3.0.0后API失效方案的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio 第七十五期 - Android Activity跟随动画
Android Studio - 第四十五期 Gradle manifestPlaceholders
Android Studio第二十五期 - 自定义键盘+支付输入框