`
netfreeperson
  • 浏览: 6754 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类

Android的Gradle插件

阅读更多

我只是技术搬运工,如果搬运有误,请不吝指出,谢谢酷

AndroidGradle插件

Android的编译系统包含了Gradle插件。Gradle是一个先进的构建工具包,它可以管理依赖,并允许你定义自己的构建逻辑。Android Studio 使用一个Gradle的包装来完全整合Gradle插件。AndroidGradle插件也可以独立于Android Studio运行。这样就意味着,你可以从装有Android Studio的机器的命令行或者是从没有安装Android Studio的机器上(比如持续集成服务器)构建你的Android apps

 

构建配置

你项目的构建配置文件是build.gradle文件,它是一个纯文本文件,使用了Gradle的语法和选项,Android插件为你的构建配置如下几个方面:

 

构建变种(Build Variants)这个构建系统可以生成不同产品的APK,并且可以为相同的模块配置不同的配置。当你想为你的应用构建不同的版本,但是又不想为不同的版本创建不同的项目或模块,这是非常有用的。

 

依赖(Dependencies)这个构建系统可以管理项目的以来,并且支持依赖本地系统文件和运程仓库。这样可以免去了手工的为你的项目收索,下载,拷贝相应的包文件。

 

清单条目(Manifest entries)这个构建系统可以让你使用构建变量的配置来指定manifest文件元素的值。这些构建变量的值覆盖了manifest文件的值。这是有用的,如果你想为你的多个某块生成多个APK,这样每个APK可以有不同的名字,minimum SDK版本,或者是target SDK版本。如果多个manifest文件存在,将被合并到优先的buildTypeproductFlavor, /main文件,librarymanifest中。

 

签名。 构建系统可以让你指定特定的签名设置。它可以在构建的过程中自动对你的APK进行签名。

 

ProGuard.构建系统可以让你为各自的变体(bariant)指定特定不同的ProGuard。在构建的过程中构建系统将执行ProGuard从而混淆你的class.

 

测试.对于大多数模板,构建系统创建一个测试目录(androidTest),并且生成一个测试的APK。所以你不需要单独创建一个测试项目。构建系统在构建过程中将会运行测试代码。

 

Gradle构建文件通过Groovy语法的领域特定语音来描述和操纵构建逻辑。Groovy是一种动态语音,可以自定义构建逻辑,并且和Gradle插件提供的特定元素进行交互。

 

通过公约构建

Android 构建系统为项目结构和其他构建项预制了智能的默认值。如果你的项目是按照这些公约来的,你的Gradle构建文件将非常简单。当一些公约不适合你的项目的时候,构建系统的灵活性将允许你配置构建过程每个方面。例如,你需要替换模块目录默认的源码目录文件,你可以在模块构建文件中指定一个新的目录结构。

项目和模块设置

Android Stuidio的表现中,一个项目(Project)是开发结构的顶层结构。Android Studio的项目包含了项目文件和一个或多个应用模块。一个模块是你应用的一个组件,你可以独立地构建,测试,bebug。模块包含了你应用的源码和资源文件。Android Studio项目可以包含多种模块。

 

Android 库模块包含了可复用的代码和资源。构建系统将为库模块生成AAR包。

 

App Engine 模块包含了App Engine 继承的代码和资源。

 

java 库模块包含了可复用的代码。构建系统生成了Jar包。

 

Android Studio项目包含了一个顶层项目的Gradle配置文件,它允许你为所有在项目中的应用模块配置常用的配置。每个应用模块还有自己用用的build.gradle文件为了配置特定的配置项。

 

项目构建文件

默认的,项目级的Gradle文件使用buildscript来定义Gradle的仓库和依赖。这样允许不同的项目使用不同的Gradle版本。支持的仓库包括:JCenter,Maven,Central,lvy。这个例子声明了使用JCenter仓库和使用了1.0.1版本的Gradle插件的类路径依赖结构的构建脚本。

buildscript {
    repositories
{
        jcenter
()
   
}
    dependencies
{
        classpath
'com.android.tools.build:gradle:1.0.1'

       
// NOTE: Do not place your application dependencies here: they belong
       
// in the individual module build.gradle files
   
}
}

allprojects
{
   repositories
{
       jcenter
()
   
}
}

注: Android Studio项目的SDK位置被定义在local.properties文件的sdk.dir设置中,或者是通过环境变量ANDROID_HOME.

模块构建文件

应用模块的Gradle构建文件允许你配置模块的构建设置,包括覆盖 src/main中的manifest设置和设置自定义的包选项。

 

android 设置

         compileSdkVersion

         buildToolsVersion

defaultConfig productFlavors

         manifest的属性,如 applicationId,minSdkVersion,targetSdkVersion和测试信息。

buildTypes

         构建属性,如debuggable,ProGuard,debug签名,版本名后缀,和测试信息。

dependencies

 

这个例子应用了Android插件,使用了默认的配置用来覆盖几个manifest的属性,创建了两个构建类型:releasedebug, 并且声明了几个依赖。

apply plugin:'com.android.application'
  
  android {
      compileSdkVersion 20
      buildToolsVersion "20.0.0"
  
      defaultConfig {
          applicationId "com.mycompany.myapplication"
          minSdkVersion 13
          targetSdkVersion 20
          versionCode 1
          versionName "1.0"
      }
  
      buildTypes {
          release {
              minifyEnabled false
              proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
          }
           debug {
              debuggable true
          }
      }
  }
  
  dependencies {
      compile fileTree(dir:'libs', include:['*.jar'])
      compile 'com.android.support:appcompat-v7:20.0.0'
      compile project(path:':app2, configuration: 'android-endpoints')
  }

注: 你可以注入一个自定义的构建逻辑用来设置属性的值,这个构建逻辑可以定义为一个函数,并且被属性调用,例如:

def computeVersionName(){
    ...
  }
  
  android {
      defaultConfig {
          versionName computeVersionName()
          ...
      }
  }

 

依赖

Android构建系统管理了项目的依赖,并且支持模块依赖,二进制依赖,和运程二进制依赖。

 

模块依赖

         一个应用模块可以包含其他模块的依赖在它的构建文件中。当你构建这个模块的时候,构建系统将装配它需要的模块。

 

本地依赖

         如果在你的本地系统中,有你模块依赖的存档文,如JAR文件,你可以在你的模块构建文件中声明依赖。

 

运程依赖

         当一些运程仓库的依赖是有效的,你不需要必须下载和拷贝它们到你的项目中。Android Studio构建系统支持运程仓库依赖,比如 Maven, 依赖管理,如: lvy

 

         许多流行的软件库和工具在公共Maven仓库是有效的。对于这些依赖,你只需要指定Maven的坐标,这是唯一标示远程仓库每个元素。在构建系统中,Maven坐标的格式是:group:name:version。比如,16.0.1版本的Google Guava库的Maven坐标是: com.google.guava:guava:16.0.1.

 

         Maven中央仓库广泛的用来分发许多库和工具。

构建任务

Android Studio的构建系统定义了一个分层的构建任务集合:顶层或 anckor 任务调用依赖任务产生他们的集合构造输出。顶层构建任务是:

 

assemble

         构造项目输出

 

check

         运行检查和测试

 

build

         运行 assemble check

 

clean

         执行clean

 

Android插件提供了connectedCheckdeviceCheck任务用来检查 连接的模拟的远程的设备。Gradle任务可以通过点击右边距的Gradle选项卡来查看。

 

你可以看到有效任务的类表,并且可以从Android Studio和命令行执行任何任务,就像 Building and Running from Android Studio Build the project from the command line中描述的。

 

Gradle包装

Android Studio的项目包含了Gradle包装,包含了:

一个JAR文件

一个属性文件

一个Windows平台的Shell脚本

一个Linux平台的Shell脚本

注:你应该将这些文件都提交到你的源码控制系统中。

 

使用Gradle包装(而不是使用本地安装的Gradle)可以确保你一直运行在local.properties文件中定义的Gradle版本。如果你咬为你的项目配置一个新版本的Gradle,编辑这个属性文件。

 

Android Studio从你项目的Gradle包装目录中读取属性文件,并且从这个目录中运行这个包装,因此你可以可以对多个要求不同版本Gradle的项目进行无缝工作。

 

注: Android Studio不用Shell脚本,因此当从IDE中构建是,你对其的改变不会起任何作用。你可以在Gradle的构建文件中定义自己的逻辑。

 

你可以在没有安装Android Studio的机器上,从命令行中执行这些脚本,从而构建你的项目。

 

注意:当你创建一个项目是,只能使用从可行任来源的Gradle包装脚本和JAR包,像由Android Studio生成的。

 

构建变种

你应用的没个版本在构建系统中表现为一个构建变量。构建变量是由项目flavors和构建类型组成。项目flavors代表了一个应用的构建版本,如免费和付费。 构建类型代表了每个应用构建包的版本,如debugrelease。构建系统为每个项目flavor和构建类型的组合生成APK

 

默认情况下,Android Studio配置了默认的设置,在build.gradle文件中的defaultconfig,和两个构建类型(debugreleas)。这样会生成两个构建变种,debugrelease,构建系统将为每个构建变种生成APK

 

添加两个项目flavorsdemofull,随同默认的构建类型debugrelease,将产生4个构建变种,各自有各自的配置:

demoDebug

demoRelease

fullDebug

fullRelease

 

资源合并于多个Android应用:

构建变种基于buildTypeproductFlavor的构建设置

主要的资源集合,一般位于 src/main/res

库项目的依赖,它通过在arr捆绑的资源对象来提供资源。

 

从低到高的合并次序是:libraries/dependencies-> main src -> productFlavor -> buildType

 

有些应用不只一个维度的复杂特性组合,但是它们依然表现为同一个应用。比如,除了有一个demofull版本的应用,一些游戏有可能包含了特定 CPU/ABI的二进制文件。构建系统的灵活性使产生如下变种称为可能:

x86-demoDebug

x86-demoRelease

x86-fullDebug

x86-fullRelease

arm-demoDebug

arm-demoRelease

arm-fullDebug

arm-fullRelease

mips-demoDebug

mips-demoRelease

mips-fullDebug

mips-fullRelease

这个项目将包含两个构建类型(debug release)和两个维度的项目 flavors,一个是app的类型(demofull),还有一个是 CPU/ABI(X86,ARM,或者 MIPS).

 

源码目录

为了为你的应用构建不同的版本,构建系统从以下的地方集合源码和资源文件:

src/main/ -主源码目录(对于所有变种的默认配置)

src/<buildType>- 源码目录

src/<productFlavor>/ -源码目录

 

注: 构建类型(buildtype) product flavor 的源码 目录是可选的, 因为Android Studio不会为你创建这些目录。当你添加 build typesproduct flavors到构建配置文件中的时候,你应该创建这些目录。如果这些目录不存在,构建系统不会使用这些目录。

 

对于那些没有定义任何flavors的项目来说 ,构建系统使用了defaultConfig设置,主要的app目录和默认的构建类型目录。比如,生成默认的debugreleas构建变种,没有product flavors,构建系统使用:

src/main/  (默认的配置)

src/releas/ (构建类型)

src/debug/(构建类型)

 

对于使用了flavor维度的项目来说,构建系在每个维度的flavor源码目录合并。比如,为了生成arm-demo-release构建变种,构建系统合并:

src/main/ (默认配置)

src/release/ (构建类型)

src/demo/ (flavor – 应用类型维度)

src/arm/ (flavor – ABI维度)

这些目录的源码被集合起来生成这个构建变种的输出。

 

你可以在不同的目录中使用相同的类目,只要这些目录在一通过变种中不被一起使用。

构建系统统一回集合所有的manifest到一个manifest中,因此每个构建变种可以定义不同的组件或者是权限在最终的manifest manifest合并的从低到高的优先级是: libraries/dependencies-> main src -> productFlavor -> buildType

 

构建系统会合并来自所有源码目录的资源。如果在一个构建变种中,存在不同目录包含相同名字的资源,优先次序按照以下: build type的资源覆盖—>product flavorà覆盖main目录的资源à覆盖任何库。

 

注:构建变种可以使你服用一般的activities, 应用逻辑,不同版本的资源文件。

 

 

 

 

0
2
分享到:
评论

相关推荐

    Android Gradle 插件中文指南

    google推出了全新的Android Studio集成开发环境,其中Android项目的结构与Eclipse的Android项目结构有很大的区别,原因就在于两开发环境使用的构建工具不同...对应Android项目的Gradle插件就是Android Gradle Plugin。

    Android Gradle权威指南高清版

    9. Android Gradle插件版本更新说明:随着Android Gradle插件的版本不断更新,每次新版本发布都会带来新的特性和改变,这部分内容会涉及新版本插件的特性介绍以及如何迁移到新版本。 10. 常见问题与解决方案:总结...

    AndroidStudio自定义Gradle插件

    本篇文章将深入探讨如何在Android Studio中自定义Gradle插件,以此来扩展和优化项目的构建流程。 一、Gradle插件概述 Gradle插件是一种可复用的构建逻辑,它们可以被应用到Gradle项目中以执行特定任务,如编译代码...

    gradle_plugin_android_aspectjx,一个android gradle插件,可以在android项目上影响aspectj,并可以钩住kotlin、aar和jar文件中的方法。.zip

    《Android Gradle插件AspectJX深度解析》 在Android开发中,我们常常需要对代码进行切面编程,以实现一些跨切面的功能,如日志记录、性能监控等。AspectJX是一款针对Android项目的Gradle插件,它极大地简化了在...

    StudyGradleDemo:Android Gradle插件和Kotlin Gradle插件源码demo工程-android

    【标题】"StudyGradleDemo"是一个专注于Android Gradle插件和Kotlin Gradle插件源码解析的示例工程,旨在帮助开发者深入理解这两种插件的工作原理。 【描述】"StudyGradleDemo"是一个实战项目,通过它,开发者可以...

    如何使用Android Studio开发Gradle插件(一)

    在Android开发领域,Gradle是主流的构建工具,而自定义Gradle插件则能极大地提升项目的构建效率和灵活性。本文将深入探讨如何使用Android Studio开发Gradle插件,主要分为以下几个方面: 1. **Gradle插件基础** - ...

    AccessInline,android gradle插件,用于内联方法,在字节码中以前缀“access$”开头。.zip

    AccessInline 是一个专门为Android开发设计的Gradle插件,它主要功能是处理在字节码中以"access$"前缀命名的内联方法。在Java编程中,内联方法是一种优化技术,通过将方法调用替换为实际的方法体来减少程序执行的...

    AndroidGradlePluginCompat:android gradle插件兼容库

    Android Gradle插件兼容插件 在com.android.application中使用提供的aar功能 首先调用一遍 providedAarCompat() 然后就可以正常使用provededAar了,如 dependencies { providedAar '...

    Android Gradle 用户指南

    Android Gradle插件是专门为Android项目定制的Gradle插件,它扩展了Gradle的功能,以支持Android特有的构建任务,如编译Java和Kotlin代码、生成APK等。 ### 3. 构建文件 在Android项目中,主要的构建配置文件有`...

    Android studio 配置gradle 2.2.3 插件所需pom、jar文件

    总的来说,`gradle-2.2.3.jar`和`gradle-2.2.3.pom`文件是Android Studio配置Gradle插件不可或缺的部分,它们分别提供了Gradle插件的执行逻辑和依赖管理信息。理解这些文件以及如何配置和使用Gradle,对于高效地进行...

    Android gradle-2.10

    **Android Gradle插件2.10版本详解** 在Android开发中,Gradle是一个不可或缺的构建工具,它使得项目的构建过程更加自动化和高效。Gradle 2.10是Gradle的一个重要版本,针对Android开发者提供了诸多改进和新特性。...

    Android gradle插件打印时间戳的方法详解

    Android Gradle 插件打印时间戳的方法详解 Android Gradle 插件打印时间戳的方法详解是指在 Android 项目中使用 Gradle 插件来打印时间戳的方法。时间戳是根据当前系统时间生成的一组随机数字,主要用于判断数据的...

    Android gradle-1.6

    《Android Gradle插件1.6详解》 在Android开发领域,Gradle是一个不可或缺的构建工具,它以其灵活性和强大的功能赢得了开发者们的广泛青睐。在本文中,我们将深入探讨Android Gradle插件版本1.6的相关知识,了解其...

    offline-android-gradle-plugin-preview.zip

    离线Android Gradle插件是Android开发者在没有网络连接或者网络环境不稳定时的重要工具,它允许用户在本地完成项目的构建,避免了因依赖下载问题导致的构建延误。本压缩包"offline-android-gradle-plugin-preview....

    Android Gradle权威指南

    2. **Android插件**:Android插件是Gradle与Android Studio集成的关键,它为Android项目提供了特定的构建生命周期和任务。书中会详细解析如何使用Android插件设置项目结构,配置应用模块,以及处理资源和编译选项。 ...

    gradle_plugin_android_aspectjx:一个Android gradle插件,可以在Android项目上实现AspectJ,并且可以在Kotlin,aar和jar文件中挂钩方法

    支持android gradle插件3.6.1 将内部AspectJRT版本升级到1.9.5 AspectJX 2.0.0版本与旧版本之间的编译性能对比数据 下面的数据来自于同一个项目不同环境下的编译情况由于旧版本不支持Instant Run增量编译,故没有...

    gradle7.3.1

    5. **Gradle插件生态**:Gradle支持丰富的插件生态系统,允许开发者使用预定义的插件快速实现特定功能,如Spring Boot、Android等。7.3.1可能改进了插件的兼容性和稳定性。 6. **多项目构建**:对于大型项目,...

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

    《Android Gradle插件源代码解析——深入了解Android构建系统》 Android Gradle插件是Android开发中的重要组成部分,它使得Android应用的构建过程自动化、高效化。本文将深入探讨base-gradle_2.3.0-build-system源...

    agp-doc:[已弃用] Android Gradle插件DSL参考和Groovydoc

    Android Gradle插件文档该存储库托管每个版本的Android Gradle插件的DSL参考和Groovydoc。 电流(1.3.1) - 1.3.1- 1.3.0- 1.2.3- 1.2.2- 1.2.1- 1.2.0- Groovydoc 1.1.3- DSL Groovydoc 1.1.2- DSL Groovydoc 1.1.1...

Global site tag (gtag.js) - Google Analytics