美文网首页Android开发规范技巧Android进阶之路
【gradle】- Android Gradle配置源码分析

【gradle】- Android Gradle配置源码分析

作者: 拔萝卜占坑 | 来源:发表于2019-11-26 15:37 被阅读0次

    简介

    Android工程使用gradle来完成自动化构建,在创建Android工程时,IDE会在Android工程目录下生成gradle需要的相关配置文件。比如app module下面的build.gradle文件,我们可以根据我们需要添加我们的配置属性。但是对于不是很了解gradle的人来说,gradle文件每个节点对应了什么,我应该把自己想要的属性添加在哪里,属性节点下可以定义那些属性,是否可以自定义属性节点,执行自己的任务等等。很多人说可以,百度啊,但是有些时候,百度并不能满足你想要的,靠记忆总是那么不靠谱,所以,接下来我将通过gradle源码的方式带大家进行学习。

    Gradle学习网站推荐

    Android Plugin DSL Reference
    Gradle Api
    Groovy
    user guide pdf
    Gradle User Guide 中文版
    更多资料

    APK的构建过程

    既然gradle配置文件作用于apk构建过程,那么就有必要对Android构建流程进行一番了解。来一张官方图:

    最新的编译流程图参考:配置编译版本,旧更能够看出每个阶段使用到的工具。

    VZOPCq.png
    1. AAPT(Android Asset Packaging Tool)打包res资源文件,比如AndroidManifest.xml、xml布局文件等,并将这些xml文件编译为二进制,其中assets和raw文件夹的文件不会被编译为二进制,最终会生成R.java和resources.arsc文件。
    2. AIDL将所有的aidl接口转化为对应的Java接口。
    3. 将所有的Java代码编译成.class文件。
    4. Dex工具将生成的.class文件、第三库和其他.class文件编译成.dex文件。
    5. 编译生成的.dex文件、资源、无需编译的资源(如图片等)将被ApkBuilder工具打包成APK文件。
    6. 签名。
    7. release版本,使用zipalign工具对APK进行对齐操作,对apk进行优化,提供运行时的效率。

    Android gradle插件开发流程

    app module下的build.gardle顶部有这样一行代码:

    apply plugin: 'com.android.application'
    

    可以看出,build.gardle文件使用了gradle插件来进行配置文件解析。那怎么确认gradle使用了那个插件来进行解析呢?那就得了解gradle插件开发的流程了。来一张简单的gradle插件工程图:


    屏幕快照 2019-11-26 上午11.11.30.png

    通过创建gradle插件工程,来查看gradle源码,是不错的方式,至于创建的完整流程,请自行百度。

    上图“1”的地方,aspect.properties文件,.properties前面就是插件的id,就好比 “apply plugin: 'com.android.application'”中的“com.android.application”。标记“2”的地方,定义插件文件路径。

    下面来看一下“com.android.application”插件


    屏幕快照 2019-11-26 上午11.21.27.png

    接下来就是分析AppPlugin文件了。

    AppPlugin源码分析

    这里只进行简单的配置相关的源码分析,apk构建过程很复杂,所以有兴趣的可以自己看看。

    在build.gradle文件下面有个“android”节点,那么这个节点是怎么被解析出来的呢。在AppPlugin类下面有这样一个方法:


    屏幕快照 2019-11-26 上午11.33.07.png

    第一个参数“android”就是对于节点的名称,第二个参数,参数解析对应的类,那么我们看一下AppExtension里面又包含了那些。最终跟踪到BaseExtension类,里面定义了很多属性对象,有些是不是正是build.gradle里面的节点。那么我们可以跳转到对于的对象类中,查看相应的节点支持的属性,很多属性都有注释,还是比较好理解的。

    AppExtension配置

    如果不想看源码,可以参考:Android Plugin DSL Reference

    • AaptOptions
      打包资源相关的配置。使用“aapt -h”查看“aapt”相关用法。既然是打包资源,那相关参数肯定是作用于对资源进行处理的过程。
      1. ignoreAssetsPattern
        assets文件忽略配置,可以使用正则表达。比如:


        屏幕快照 2019-11-26 上午11.47.12.png

        ic_launcher_round.png将不会打包到apk。

      2. noCompressList
        不需要进行压缩的文件名列表,如果为''将禁止压缩所有文件。这个根据自己需要配置。

      3. cruncherEnabled
        是否处理png文件,默认是true。在打包apk过程,会对png文件进行优化和压缩,如果不希望png进行处理或者在调试阶段你想加速应用构建,那么可以将它设置成false。

      4. failOnMissingConfigEntry
        如果无法找到配置条目,则强制aapt返回错误,默认false。

      5. additionalParameters
        执行“aapt”额外参数。

      6. cruncherProcesses
        处理进程数量,更多的处理进程,处理文件速度更快,但需要更多的内存和CPU。

    其它就不介绍了,自己打开源码或者在上面推荐的网站自行查看

    • DefaultConfig
      1. buildConfigField
        向BuildConfig添加字段,比如:
        buildConfigField "int", "API_URL_TYPE", "1",看一下DefaultConfig里面对应的方法签名:


        屏幕快照 2019-11-26 下午2.14.43.png
    1. resValue:添加资源
    2. resConfigs:添加资源配置过滤器

    相关文章

      网友评论

        本文标题:【gradle】- Android Gradle配置源码分析

        本文链接:https://www.haomeiwen.com/subject/giqewctx.html