Gradle--创建构建Variant

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jhl122/article/details/74540740

首先先介绍几个概念:

构建类型:每个由Android Studio 创建的项目都会生成debug和release构建类型,当然还可以自定义类型。

product flavor(不同定制的产品):它一般用于管理多个应用

variant:构建类型和product flavor经常结合在一起使用,一般应用的场景就是 代码都相同、图标不同、资源有些不同的几个应用,把它俩结合结果称之为构建variant。

  1. 构建类型
    可以在buildTypes代码块下面定义构建类型,一般新建项目的构建类型默认release:
     buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }

    该构建类型用于禁用清除无用的资源(通过设置minifyEnabled为false)和定义默认ProGuard配置文件的位置。默认情况下,每个模块都有个debug构建类型,你可以将它写在buildTypes代码块中添加额外的属性设置。
     debug {
                buildConfigField "String", "API_URL",
                        "\"http://www.baidu.com\""
                buildConfigField "boolean", "LOG_HTTP_CALLS", "true"
            }

    1.1 创建构建类型
    只需要在buildTypes代码块中新增一个自定义对象即可:
    staging {
                applicationIdSuffix ".staging"
                versionNameSuffix "-staging"
                buildConfigField "String", "API_URL",
                        "\"http://www.baidus.com\""
                buildConfigField "boolean", "LOG_HTTP_CALLS", "true"
            }

    自定义构建类型的applicationID和versionName都有后缀,不同构建类型的applicationID应该这样:
    Debug: com.package
    Release: com.package
    Staging: com.package.staging

    这样可以保证相同设备上同时安装staging和release版本,而不发生冲突。buildConfigField属性可以定义配置变量,可以定义URL等属性。可以使用initWith()用另一个构建类型的属性来初始化该构建类型
     staging.initWith(buildTypes.debug)
    1.2 源集 debug、release、staging的目录结构:

    都是和main根目录并列的,里面都包括:java、res、AndroidManifest.xml这些都需要自己手动创建,你可以为构建类型添加自定义代码或者添加自定义布局或者字符串。
    注意:如果一个java类添加到了staging构建类型里面,它也可以添加到debug和release源集里面,但是不能添加到main源集,那样会被定义两次,出现异常。当使用不同的源集时,Drawable和layout文件将完全覆盖在main源集中有相同名称的资源,但是values文件夹中的文件则不会被覆盖,只会合并相同的属性,比如main源集中有一个strings.xml文件:
    <resources>
    <string name ="app_name">aaa</string>
    <string name = "hello">bbb</string>
    </resources>
    而staging源集中有一个strings.xml文件:
    <resources>
    <string name  ="app_name">ccc</string>
    </resources>
    那么合并之后将会是:
    <resources>
    <string name ="app_name">ccc</string>
    <string name = "hello">bbb</string>
    </resources>
    manifest文件也是这样,创建manifest不需要从main源集中拷贝整个manifest文件,只需要添加相应的标签,它们会合并。1.3 依赖 比如staging构建类型添加依赖:
    stagingCompile 'com.github.JiangAndroidwork:MyImagePicker:1.1.9'
    它可以让依赖更加具体。
  2. product flavor
    它是用来创建不同的版本,假如你要创建两个新的应用,它们只有颜色、图标、url不同,代码基本相同,那你只需要使用product flavor就可以了。2.1 创建 product flavor 只需要在productFlavor代码块中添加 新的Product flavor就可以:
     red {
                applicationId "com.laojiang.red"
                resValue "color", "flavor_color", "#ff0000"
            }
            blue {
                applicationId "com.jiang.blue"
    
                resValue "color", "flavor_color", "#0000ff"
            }
    defaultConfig和product flavor享有相同的属性。
    2.2 源集
    和构建类型的源集一样,product flavor的源集名称可以是自己本身“red”、“blue”,也可是flavor+构建类型的名称,比如:redDebug、redRelease。后者拥有更高的优先级。
  3. 构建variant 无论创建一个构建类型或者product flavor,新的variant都会被创建。Anddroid studio左侧下边有个 Build Variants选项,打开就是构建的variant
    可以看到variant的类型,我创建了 blue和red两个product flavor,它会组合成6种类型,当你选中一个版本你点击“Run”它就会运行当前版本的应用。当你打包apk的时候你会发现你可以打包好几种版本,都是根据你创建的版本生成的:
    你可以根据你创建版本的需求来打包。当然也可以通过tasks任务来构建apk,比如要打包blue的版本就可以在Terminal命令窗口用gradlew assembleBlue执行任务:可以看到已经输出apk文件。当然要是想要具体配置某个版本可以用 gradlew assembleBlueDebug命令行。

猜你喜欢

转载自blog.csdn.net/jhl122/article/details/74540740
今日推荐