欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

AndroidStudio工程中的build.gradle中的buildTypes、productFlavors的多构建、多渠道打包APK

程序员文章站 2024-01-10 23:54:22
...

buildTypes与productFlavors联合配置Module

buildTypes:构建类型,在Gradle组件中,默认提供”debug”、”release”两个配置,分别是调试与发布,在不同配置中我们可以对其进行设置,例如,当发布APP时,我们希望自己的APP发布到应用平台上不被别人给**,所以我们需要在配置中写入minifyEnabled true来混淆我们的APP代码,然后在其中设置我们混淆的配置文件

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

proguard-android.txt是SDK中默认的混淆配置文件,proguard-rules.pro是项目中自带的自定义混淆配置文件

productFlavors:产品渠道,是不提供任何默认配置,在实际发布中,我们可以设置多个不同渠道,分别在其中写入配置、例如我现在有款产品,这款产品我们可以当外包的方式复制给其他公司,但是其他公司不可能所有的功能以及后台服务等信息和你一样,所以需要在产品渠道中设置相应的属性(QQ、后台Url等),这样就可以根据不同公司的情况设置不同的属性来打包出不同的apk文件

一般app的build.gradle

//表示该module是一个app module,应用了com.android.application插件
apply plugin: 'com.android.application'
//如果是一个android library,那么上面应该是apply plugin:'com.android.library'

android {

    //设置编译的sdk版本
    compileSdkVersion 23
    //设置编译工具的版本
    buildToolsVersion 23.0.3

    //library在打包的时候不只是打release包,同样会把其他类型的时候包打出来,其中包括debug包
    publishNonDefault true

    //默认配置,如果后面没有覆盖,则使用默认配置中的设置
    defaultConfig {
        //向下兼容最小的sdk版本
        minSdkVersion 15
        //是否分步,现在随着Android项目的越来越大,一个工程中可能引入多个包,这样就会使项目的方法个数超过65536个,当超过这个数时,而你又没对进行分步设置与配置,则会出现1-1中的错误
        multiDexEnabled true
    }

    //声明后面的构建类型
    configurations {
        debug
        innerTest
        releaseTest
        release
    }

    //分别对构建类型的具体进行设置
    buildTypes {
        debug {
            minifyEnabled false
            shrinkResources false
            ……
        }

        innerTest {
            minifyEnabled false
            shrinkResources false
            ……
        }

        releaseTest {
            minifyEnabled false
            shrinkResources false
            ……
        }

        release {
            minifyEnabled false
            shrinkResources false
            ……
        }
    }

    //产品渠道
    productFlavors {
        //下面是具体公司对应渠道,在其中可以写入相对应的设置,
        jianhang {
            buildConfigField "String", "QQ", '"XXXXXXXXX"'
            buildConfigField "String", "WEIXIN", '"XXXXXXXXXXXXXX"'
            ……
        }
        nonghang { …… }
        shanghang { …… }

        //针对不同的情况还可以分别处理,如果是在library中,这里就是libraryVariants.all
        applicationVariants.all { variant->
            //当产品渠道是jianhang时,我们可以对其进行设置
            if(variant.flavorName.contains('jianhang')) {
                ……
            } 
            //当构建类型是innerTest时,我们可以对其进行相应的测试
            else if(variant.buildType.name.equals('innerTest')) {
                buildConfigField "String", "QQ", '"XXXXXXXXX"'
                ……
            }
            buildConfigField "String", "WEIXIN", '"XXXXXXXXXXXXXX"'
        }
    }
}

//下面是写你的Module所依赖的包和下一个Module的启动的构建类型和产品渠道等等
dependencies {
    //所依赖的包
    compile fileTree(include: '*.jar', dir: 'libs')
    compile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
    compile 'com.android.support:appcompat-v7:24.1.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4'

    //构建其他所依赖的Module的构建方式,如果此Module的构建方式是什么,则设置所依赖的Module为相应的构建类型
    //例如下方的release,则所依赖的Module的构建类型也是release,当然你也可以设置为其他的构建类型,path是Module的名字,configuration是构建类型
    releaseCompile project(path: ':XXXXXXX', configuration: 'release')
    debugCompile project(path: ':XXXXXXXX', configuration: 'debug')
    innerTestCompile project(path: ':XXXXXXXX', configuration: 'innerTest')
    releaseTestCompile project(path: ':XXXXXXXX', configuration: 'releaseTest')
}

1-1:

    UNEXPECTED TOP-LEVEL EXCEPTION:  
    java.lang.IllegalArgumentException: method ID not in [0, 0xffff]: 65536 

在AndroidStudio中,我们可以通过Build Variants在其中设置,然后就可以根据不同的构建类型与产品渠道构建出不同的APK
AndroidStudio工程中的build.gradle中的buildTypes、productFlavors的多构建、多渠道打包APK