`
bugtags
  • 浏览: 30286 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Android Gradle 技巧之一: Build Variant 相关

阅读更多

Build Variant

android gradle 插件,允许对最终的包以多个维度进行组合。

BuildVariant = ProductFlavor x BuildType

两个维度

最常见的就是这样:

    productFlavors {
        pro {
        }

        fre {
        }
    }
    lintOptions {
        abortOnError false
    }

    buildTypes {
        debug {
        }
        release {
        }
    }

其中,buildTypes 一般都会有 debug 或者release,标示编译的类型,通常在混淆代码、可调式、资源压缩上做一些区分。
productFlavor 则为了满足“同一个project,根据一个很小的区分,来打不同的包”这个需求。

这两个维度的组合,会产生如下包:

  • proDebug
  • proRelease
  • freDebug
  • proRelease

更多的维度

    flavorDimensions 'abi', 'version'

    productFlavors {
        pro {
            dimension 'version'
        }

        fre {
            dimension 'version'
        }

        arm {
            dimension 'abi'
        }

        mips {
            dimension 'abi'
        }
    }

    buildTypes {
        debug {
        }
        release {
        }
    }

productFlavor 本身定义了2个维度,记上 buildType,则有三个维度,会产生如下的包:

  • armProDebug
  • armProRelease
  • armFreDebug
  • armFreRelease
  • mipsProDebug
  • mipsProRelease
  • mipsFreDebug
  • mipsFreRelease

其中每个维度组合,都可以设置本身的 dependency、test source。下面做一个举例。

Flavor 与 Dependency

需求

module 中有若干个 flavors,例如:fre 和 pro,分别依赖不同的库,这些库有的是本地 jar 库,有的是远程库。

方案

flavor-dependency

遍历 Build Variant

需求

Bugtags 的 android sdk,有一个自动上传符号表功能, 在最初,是这样配置的:

  apply plugin: 'com.bugtags.library.plugin'
  bugtags {
      appKey "APP_KEY"
      appSecret  "APP_SECRET"
      mappingUploadEnabled false
  }

后来,我们增加了一个 beta-live 的机制,用来区分测试和上线的 APP,这样,同一个 APP,就有两套 APP_KEY 和 APP_SECRET 了,很明显上方的配置方式就不在适用。

方案

android gradle 插件提供了 android.applicationVariants 索引来遍历所有的 build variant
后来,我们采取了一个方案,遍历 Build Variant,设置 extension 信息来兼容这种需求。

  afterEvaluate {
      android.applicationVariants.each { variant ->
          def bugtagsAppKey = null;
          def bugtagsAppSecret = null;

          if (variant.name.contains("debug")) {
              bugtagsAppKey = 'APP_KEY_BETA'
              bugtagsAppSecret = 'APP_SECRET_BETA'
          } else if (variant.name.contains("release")) {
              bugtagsAppKey = 'APP_KEY_LIVE'
              bugtagsAppSecret = 'APP_SECRET_LIVE'
          }

          variant.ext.bugtagsAppKey = bugtagsAppKey
          variant.ext.bugtagsAppSecret = bugtagsAppSecret
      }
  }

  apply plugin: 'com.bugtags.library.plugin'

总结

本文主要是介绍了 build variant 的概念,还介绍了两个日常应用案例。希望对大家有帮助。

参考资料

android-build-tool

有问题?在文章下留言或者加 qq 群:453503476,希望能帮到你。

想要及时收到最新博客文章,请关注:

『mobdev』微信公众号二维码

mobdev

分享到:
评论

相关推荐

    offline-android-gradle-plugin-preview.zip

    2. **变体(Variant)和构建类型(Build Type)**:Android Gradle插件支持多种构建变体,如debug和release,以及自定义构建类型。每个变体可以有不同的配置,如签名设置、调试标志等。 3. **资源裁剪(Resource ...

    AndroidStudio自定义Gradle插件

    在Android开发环境中,Android Studio是主流的集成开发环境(IDE),而Gradle则是一个强大的构建工具,用于自动化项目的构建过程。本篇文章将深入探讨如何在Android Studio中自定义Gradle插件,以此来扩展和优化项目...

    Jenkins+Gradle自动构建打包Android工程教程

    本教程将详细介绍如何利用Jenkins与Gradle搭建一个自动化构建平台,实现Android项目的自动构建与打包。 #### 二、Jenkins 的安装与配置 ##### 1. Jenkins 下载 - **下载地址**:[https://jenkins.io/download/]...

    jacoco-android-gradle-plugin,为android单元测试创建jacoco测试报告的gradle插件.zip

    这可以通过在`build.gradle`文件中设置相关属性实现。 ```groovy jacoco { toolVersion = "0.8.x" // 使用JaCoCo的特定版本 reports { xml.enabled = true html.enabled = true csv.enabled = false } ...

    base-gradle_2.3.0-build-system:android gradle插件源代码

    3. `model`模块:这个模块主要负责构建模型,如Android Variant、Build Type、Product Flavor等。这些模型在构建过程中被用来生成不同的APK或AAR文件。`ModelBuilder`和`ModelRule`接口是构建模型的主要入口,它们...

    Android Studio 通过gradle配置同时打多个不同包名的包

    要同时打包多个不同包名的应用,我们需要在`app`模块的`build.gradle`文件中添加多个构建变体(build variant)。构建变体是基于产品Flavors和构建类型(Build Type)的组合,例如:debug和release是常见的构建类型...

    Android Studio使用Gradle实现自动打包,签名,自定义apk文件名,多渠道打包,集成系统签名证书博客资源

    通过在`build.gradle`中定义产品风味(product flavors),可以创建多个不同的APK,每个对应一个渠道。例如: ``` productFlavors { googlePlay { versionCode defaultConfig.versionCode + 100 } ...

    android studio 打包自动生成版本号与日期,apk输入路径详解

    一. 打开项目选择如图示1 (build.gradle 项目位置) 二. 1. build.gradle 文件添加内容如下。gradle是【com.android.tools.build:gradle:3.0.0 以下版本】 android{ defaultConfig {...} 自动追加版本号和版本...

    Android Studio打包和gradle配置构建

    在 Android 开发过程中,打包与构建是非常重要的环节之一。 **Gradle** 是一个基于 Java 的项目自动化构建工具,它通过一种基于 Groovy 的特定领域语言(DSL) 来编写构建脚本。在 Android 开发中,Gradle 被广泛用于...

    Android studio 使用Gradle进行分渠道打包

    在Android开发中,Android Studio与Gradle的结合使用极大地提升了项目的构建效率和灵活性。本教程将深入探讨如何利用Gradle进行分渠道打包,以便在不同的发布渠道上部署应用时自动切换服务地址,实现自动化和高效化...

    为什么说 Gradle 是 Android 进阶绕不去的坎 —— Gradle 系列(1).doc

    Android Gradle Plugin 是 Google 专门为 Android 开发定制的 Gradle 插件,它扩展了 Gradle 的能力,如处理 Android 专属资源、生成 R 类、支持 AAPT2 图标压缩、多变体构建等。随着 AGP 版本的升级,它引入了许多...

    android常见问题汇总,疑难

    2. **更新Gradle插件**:在`build.gradle`(Project)文件中,确保你的Android Gradle插件版本是最新的。如: ```groovy classpath 'com.android.tools.build:gradle:3.x.x' ``` 替换`x.x`为实际的版本号。 3. ...

    android studio 3.0 gradle 打包脚本配置详解

    Android Studio 3.0 Gradle 打包脚本配置详解 Android Studio 3.0 中的 Gradle 打包脚本配置是 Android 应用程序开发中非常重要的一步。通过配置 Gradle 打包脚本,可以实现自动化打包、多渠道打包、版本管理等功能...

    Android-Android多渠道打包方案兼容AndroidP

    1. 使用Build Variant和Product Flavor:在Android Studio中,可以利用Gradle的构建变体(Build Variant)和产品风味(Product Flavor)功能来实现多渠道打包。每个Product Flavor可以视为一个独立的渠道,具有独特...

    Gradle多渠道打包完整代码下载

    Gradle是一款强大的构建工具,广泛应用于Java、Android等项目的构建工作。在Android开发中,多渠道打包是一项重要的任务,它允许开发者根据不同渠道(如应用市场、企业内部分发等)生成具有不同标识的APK,以便追踪...

    android gradle如何修改生成的apk名字

    在Android开发中,Gradle作为主流的构建工具,它的强大功能和灵活性使得管理项目变得更为高效。本篇文章主要探讨如何使用Gradle自定义Android应用打包生成的APK文件的名字,以便更好地符合项目需求,例如区分不同...

    gradleCsdn.zip

    Android Gradle插件是Android Studio中的核心组件,负责解析build.gradle文件,执行编译、打包等任务。通过阅读源码,我们可以直观地了解任务调度、依赖管理、资源处理等流程,这对于优化项目构建速度、解决特定问题...

    Android Studio 3.0 Gradle 配置变更

    Android Studio 3.0 Gradle 配置变更是 Android 应用程序开发中一个非常重要的知识点,本篇文章将为大家详细介绍 Android Studio 3.0 Gradle 配置变更的相关知识,包括多渠道打包变更和更改打包命名及路径的代码。...

    Android Build Variants 为项目设置变种版本的方法

    Android Build Variants 是一种强大的功能,允许开发者在项目中设置不同的变种版本,以适应不同的环境和需求。在 Android 项目开发过程中,我们经常会碰到这样的情况:同一个项目需要在不同的环境中运行,例如内部...

    BuildConfig方法二

    在Android开发过程中,`BuildConfig.DEBUG` 是一个非常重要的常量,它用于判断当前应用是否处于调试模式。这个常量的值在构建过程中由Gradle自动生成,通常在开发阶段,`BuildConfig.DEBUG` 应该返回 `true`,以便...

Global site tag (gtag.js) - Google Analytics