刚刚升级了正式版的Android Studio3.0部分API不能用了,但是官网还是给出了解决方案,不过很模糊,需要自己琢磨,今天带大家一起看看。

    首先gradle3.0之前的多版本打版方法:(可以看出挺费劲的~)

apply plugin: 'com.android.application'apply plugin: 'android-apt'def demo1 = '0001';//DemoAPK1def demo2 = '0002';//DemoAPK2android {//    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';//DemoAPK1def demo2 = '0002';//DemoAPK2android {//    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

    附图:

    

更多相关文章

  1. Android中gradle的配置
  2. Android(安卓)toast的获取
  3. activity和service之间的相互通信方法
  4. 为什么选择Android(安卓)Studio 而不再固守 Eclipse?
  5. android Bitmap如何保存成为一个bmp文件
  6. Android系统源代码情景分析
  7. 常用控件的使用方法(参考书籍'第一行代码')
  8. android 访问webservice问题
  9. [置顶] React Native Android(安卓)Cookie Problem

随机推荐

  1. Android存储空间不足的解决办法
  2. Android播放照相机声音
  3. 解决Android(安卓)Studio 和 Android(安
  4. Android入门一:Android(安卓)开发环境安装
  5. Android(安卓)插值器 Interpolator 介绍
  6. Android在MTP模式下,只显示指定文件夹
  7. Android四大组件的理解
  8. android Ant编译项目多渠道打包
  9. Android――Animation
  10. android 365手机秘书源代码