android Gradle的配置使用

android项目的编译过程

1、将xml文件编译成二进制文件,如果项目中有aidl文件,则将其编译成java文件,一些编译时的JAVA代码被生成R文件。
2、java代码为编译成.class文件,最后编译成.dex文件。
3、代码文件和资源文件放到一起被打包。
4、使用密钥进行安装包的签名,然后进行字节对其的优化。
其中每个过程还可以配置详细的参数(比如资源编译处理时的进程数、class编译到dex过程中进程数量、堆大小等等)

详细步骤

1、打包资源文件,生成R.java。 Application Resources 通过aapt工具生成 Compiled Resources 和R.java。
2、编译aidl,转成java Interfaces文件。如果项目中没有aidl文件,这一步忽略。
3、编译所有的.java 源码文件,生成.class 字节码文件。java编译器将应用源码文件 、aapt 生成的R.java、aidl编译后的 java编译成.class Files。
4、转换所有class 文件,生成 .dex 文件。将工程中的编译好的.class 文件 和 第三方 类库 通过 
dex 工具生成 .dex 文件。
5、生成无签名的.apk文件。将 编译好的资源文件 、.dex 文件、通过 apkbuider 生成 .apk。
6、生成签名的.apk文件。将 无签名的apk 通过jarsigner 命令生成有签名的apk。
7、优化签名apk文件。通过zipalign 工具 将所有资源文件距离调整为4字节的整数倍,这样访问文件会更快。

编译流程图

基础知识

1.android studio 不知道如何将Java或Kotlin代码编译成apk文件
2.Gradle 不知道如何将Java或者Kotlin代码编译成APK文件

why?
Gradle本身并不知道如何编译APK文件,因为它实际是一个通用的构建工具,它不限于构建android应用,它的官网描述如下:
Gradle构建工具,着重于构建自动化和支持多语言开发。如果您在任何平台上构建、测试、发布和部署软件,Gradle 提供了一个灵活的模型,可以支持从编译、打包代码到发布的整个开发生命周期。 Gradle 本身实际上并不能做太多。所有有用的功能都来自丰富的插件生态系统。把你添加到 Android 应用程序中的所有第三方库视为插件。您可以使用这些插件来扩展应用程序的功能,就像 Gradle 使用插件来扩展自己的功能一样。
Android Plugin for Gradle 是一个使 Gradle 能够将您的代码编译成用你的密钥签名 APK 文件的插件,甚至将 APK 安装到你的模拟器或测试设备上。这个插件驱动你的整个构建系统。

打开android项目,会发现Gradle Scripts中包含了:
    build.gradle(Project:xxx)
    build.gradle(Moudule:xxx)
    ....
    gradle-wrapper.properties(Gradle Version)
    proguard-rules.pro(Proguard Rules for app)
    gradle.properties(Project Properties)
    settings.gradle(Project Settings)
    local.properties(SDK Location)
gradle-wrapper.properties
这个文件有一个简单的目的,它决定了构建项目时使用哪个Gradle版本
settins.gradle
这个文件是保存在你通知Gradle的地方,在整个项目的目录下,这是通过include命令来完成的,添加一个模块,需要手动或者studio自动添加到这个文件中。
build.gradle
一个android 工程一般是由多个工程构建而成,有一个根项目和多个子项目,这些工程被称为module。
之所有会有两个build.gradle,它一个是根项目的,一个是项目app的模块的。

根项目的build.gradle
格式:它是由buildscript{}块,它是告知Gradle脚本本身,编译本项目需要哪些。
     它中间声明了android Gradle插件的依赖性。
     也需要条件仓库如google() Maven库和jcenter()代码库检索。

当前项目的build.gradle    
首先,应用真实的 Android 插件,然后我们使用其扩展插件来应用 Kotlin Android 插件。
此完整的 android{} 块工作的唯一原因是因为我们要求 Gradle 使用之前提到的 Android 插件。我深信你对修改该模块内部的值非常熟悉,但你是否对所有可能放入该块的值有过好奇呢?好事情是它在此都被文档化了!
添加 Gradle 所依赖的第三方库的位置。注意在你的 app 的 build.gradle 中并没有 repositories{} 块。既然我们已经在根项目的 allprojects{} 块中声明了,这里就没有必要了。
还记得在根构建文件中的全局变量吗?是的,这里就是起作用的地方。最好采用类似管理支持库的版本一样的策略可能是个不错的主义,这可以保证他们都是用同一个版本。

由上述任务:

基本概念

有两个重要的概念projects和tasks,每个构建都是由一个或者多个projects构成,而每个project是由一个或者多个tasks构成,一个task代表一些更加细节的构建,它可能在编译一些classes,创建一个JAR,生成javadoc,或者生成某个目录的压缩文件。

1、在android根项目自生成的的build.gradle文件中

task clean(type: Delete) {
delete rootProject.buildDir
}
这里定义了clean的task,在命令行里使用命令 gradlew tasks 来查看当前目录下的 build.gradle文件里的tasks列表,信息自可查看。

可以从该文件列表中看到,clean的task已经在other task分类下。
gradle执行task的命令为"gradle task name",在android studio的使用命令行可以是 "gradlew task name", 

另外gradle/gradlew命令后面可以跟参数:比如加-q就是静默构建,不显示任何log信息,加--info就是显示info级别的log信息,加--debug就是显示debug级别的log信息。

Gradle 默认在 src/main/java 目录下查找项目源代码, 在 src/test/java 目录下查找测试代码, 因此Android Studio生成的项目的目录结构是跟gradle有关系的。(在Eclipse上开发的Android项目的目录就跟AS生成的不一样)。

Gradle使用groovy语言来描述构建脚本,groovy语言跟Java比较像。这里不多介绍了。

Plugin

    Google推出了Android Gradle Plugin,以便在Android项目中使用gradle进行自动化构建。Android Studio生成的build.gradle自动引入了Android Gradle Plugin,在项目根目录的build.gradle中可以看到如下:

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

    这里的2.3.3是android plugin的版本号,如果使用别的gradle插件(android-apt),需要在依赖中加上类路径,否则会报找不到插件的错误。

android 开发的Gradle插件有3种:
    com.android.application//应用
    com.android.library//类库
    com.android.test//测试模块

在 项目中或者Mudle中有android{} 和 dependencies{},
其中android代码块里面的各种配置全部源于 com.android.xxx插件内,而dependenices代码块内一般是对项目所需要各种库的描述。
We know 只要项目中的Maven仓库里有,就可以直接用一句"compile xxx.xxx.xxx"代码就可以将其引入到项目中。

配置

在android{}内有以下的选项可以进行配置
aaptOptions { }
adbOptions { }
buildTypes { }
compileOptions { }
dataBinding { }
defaultConfig { }
dexOptions { 加速编译}
externalNativeBuild { }
jacoco { }
lintOptions { }
packagingOptions { }
productFlavors {多渠道打包 }
signingConfigs { 用于配置签名信息}
sourceSets { }
splits {根据dpi abi进行分包 }
testOptions { }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值