zoukankan      html  css  js  c++  java
  • BuildTask & BuildType

    Build Tasks

    在build文件中使用了Android或者Java插件之后就会自动创建一系列可以运行的任务。

    Gradle中有如下一下默认约定的任务:

    • assemble

      该任务包含了项目中的所有打包相关的任务,比如java项目中打的jar包,Android项目中打的apk

    • check

      该任务包含了项目中所有验证相关的任务,比如运行测试的任务

    • build

      该任务包含了assemble和check

    • clean

      该任务会清空项目的所有的输出,删除所有在assemble任务中打的包

    assemble, check 和 build 任务实际上并不做任何事情,它们其实只是为插件提供了一个钩子,真正的事情都是由插件来完成的。这样的话,开发人员就不需要关心我到底运行的是一个java项目还是一个Android项目,也不用关心我到底使用了哪些gradle插件,因为我都可以调用这些约定的任务来完成构建。

    注意:Gradle会自动检查一个任务的输入和输出。比如连续两次运行build任务的,Gradle会报告所有的任务都已经是最新刚运行过的了,不需要再次运行。这样的话,任务之间就算是有相互依赖,也不会导致重复的执行。

    Java项目常用的任务

    Java plugin 主要创建了两个任务:

    • jar

      assemble任务会依赖jar任务,看名字就知道这是负责打jar包的任务。jar任务本身又会依赖很多其他的任务,比如classes任务,classes任务会编译java代码

    • test

      check任务会依赖test任务,这个任务会运行所有的测试。测试代码使用testClasses任务编译,但是我们基本不用手动运行testClasses任务因为test任务已经添加了对它的依赖。

    通常情况下,我们只要运行assemble和check任务就够了。

    Android项目常用的任务

    和其他gradle插件一样,Android插件也提供了一些默认的任务,比如assemble,check,build,clean,同时它也提供了一些自己特有的任务,比如:

    • connectedCheck

      运行那些需要在真机或者模拟器上执行的检查任务,这些任务会并行地在所有连接的设备上运行

    • deviceCheck

      使用APIs连接远程设备执行检查.主要用于CI(持续集成)服务上.

    上面两个任务都会执行 assemble 和 check任务。新加这两个任务是很有必要的,这样可以保证我们可以运行那些不需要连接设备的检查任务。

    注意:build任务并不依赖于deviceCheck或者connectedCheck

    一个Android项目通常至少会有两种输出:debug apk和release apk。对应的gradle中有两个任务可以分别输出不同的apk:assembleDebug/assembleRelease。

    这两个任务又会依赖其他的任务来构建一个apk。assemble任务依赖这两个任务,调用assemble任务就会生成两种apk。

    BuildType

    默认情况下,Android插件自动为项目构建一个debug和一个release版本的应用。这两个版本的不同主要体现在在非开发机上的调试功能以及APK的签名方式。debug版本使用一个用公开的name/password创建的key来签名(这样构建的时候就不需要提示输入密码了)。release版本在构建的时候不会进行签名,而是稍后在做。

    这个可以使用gradle中的BuildType对象来进行配置。默认情况下,2个BuildType的实例会被创建,一个debug,一个release。Android插件允许自定义这两个实例,当然你也可以创建其他的build type。配置由buildTypes这个DSL来完成:

    android {  
        buildTypes {  
            debug {  
                applicationIdSuffix ".debug"  
            }  
      
      
            jnidebug.initWith(buildTypes.debug)  
            jnidebug {  
                packageNameSuffix ".jnidebug"  
                jniDebuggable true  
            }  
        }  
    }  
    

    上面的代码完成了下列配置:

    • 配置默认的debug Build Type

      设置debug版本的包名为<应用id>.debug,这样就可以在设备上同时安装debug和release版本了。

    • 创建一个新的BuildType,名字是jnidebug,同时配置它是复制自debug Build Type。

      配置jnidebug开启debug版本的JNI组件,添加一个不同的包名后缀。

    创建一个新的的Build Types非常简单,只需要在buildTypes下面通过调用initWith或者使用闭包添加一个新的元素。下表是可以配置的属性以及默认值:

    属性名 debug版本默认值 release或其他版本默认值
    debuggable true false
    jniDebuggable false false
    renderscriptDebuggable false false
    renderscriptOptimLevel 3 3
    applicationIdSuffix null null
    versionNameSuffix null null
    signingConfig android.signingConfigs.debug null
    zipAlignEnabled false true
    minifyEnabled false false

    除了这些属性,Build Types还可以用来配置代码和资源文件。针对每一个Build Type,一个新的对应的sourceSet会被创建,这个sourceSet使用一个默认的路径src/< buildtype名字>/。这就意味着Build Type的名字不能是main或者androidTest(这是由插件强制的),同时每个Build Type的名字必须是唯一的。

    和其他的source sets一样,Build Type中的source set路径也是可以配置

    android {  
        sourceSets.jnidebug.setRoot('foo/jnidebug')  
    }
    

    另外,对每一个Build Type,一个新的assemble< BuildType名字>任务会被创建.当debug和release Build Types被预先创建的时候,他们对应的assemble任务也会被一起创建.

    上面的build.gradle代码片段还会创建一个assembleJnidebug任务,assemble任务也会添加对assembleJniDebug任务的依赖,正如它对assembleDebug和assembleRelease任务的依赖一样。

    可能是使用场景:

    • 仅在debug模式下使用的权限,release模式不使用。

    • debug时使用不同的实现

    • debug模式使用不同的资源(比如当一个资源的值依赖于签名的时候)

    • BuildType中的 代码/资源文件 将会被按照下列方式处理:

    • manifest配置会被merge到app manifest中

    • 代码不会被merge,会被当做另一个代码目录(source folder)来使用

    • 资源文件会覆盖同名的main中的资源文件

  • 相关阅读:
    Mysql case when 根据数字排序 返回 string类型问题
    .NET Core 面试题
    一个人如何完成一整个网站的开发(推荐好文,看完绝对让你回味无穷)转载
    (转)实现C#中等价于的Javascript中的Math.Random()的函数,以得到一个随机数,double类型的,大于0小于1的,17位精度的
    brew安装指定版本的软件
    服务器被植入挖矿木马的心酸过程
    我把双系统的win10抹除了现在开机只按option还是会出现双系统选择,怎么把那个win10给取消了或删除掉
    java.lang.Exception: The server rejected the connection: None of the protocols were accepted
    Linux 技巧:让进程在后台可靠运行的几种方法
    jenkins backup and migration
  • 原文地址:https://www.cnblogs.com/yydcdut/p/4821156.html
Copyright © 2011-2022 走看看