8--Gradle进阶 - Gradle任务的入门、任务行为 Gradle Task Gradle 项目工程的管理 实质上是 Task 对象的集合。...另外,一个 Task 可以读取和设置Project 的Property 以完成特定的操作。 下面我们来看看如何编写 Gradle Task 任务。...**提示 3:**区分任务的配置段和任务的行为,任务的配置段在配置阶段执行,任务的行为在执行阶段执行 任务的行为 doFirst、doLast 两个方法可以在任务内部定义,也可以在任务外部定义: //...自定义的任务3 task task3 { // 任务的配置阶段执行 println "hello task3...." // 任务的行为:在执行阶段执行,doFirst会在doLast...action,还是添加的doLast、doFirst 方法,其实底层都被放入到一个Action 的List 中了,最初这个 action List 是空的,当我们设置了 action【任务自身的行为】,
Android为测试提供了很好的支持,既可以使用传统的Junit测试,又可以使用Android提供的Instrument测试,这一章我们主要讲Android Gradle和Android测试之间的配合和结合...12.1 基本概念 在Android Gradle中,测试应用相关已经被作为项目的一部分,而不再是一个单元的测试工程了,这对我们一起管理引用代码比较方便。...它是一个SourceSet,这个我们之前有过介绍,比如有main SourceSet,对测试来说有androidTest SourceSet。...前面我们讲过,每一个SourceSet都可以配置它自己的dependencies依赖,androidTest也不例外,它也可以,并且它可以有自己的资源,配置等,和我们使用其他的SourceSet是一样的...默认情况下测试Apk测试的目标Apk是debug模式下的,这有很大好处,第一个因为debug模式下的我们都不会混淆代码,对我们发现问题有帮助,第二个对我们查看测试的代码覆盖率有帮助,可以很容易的发现哪些没有覆盖到
属性,因为它会被test app的package name填充进去,这也就是为什么test app的Manifest文件是自动生成的] The sourceSet should not contain...Test reports [在进行单元测试时,Gradle会输出一份HTML文档形式的报告。...Product flavors [product flavor是一个项目的特别定制版的应用程序输出,单个项目可以有很多不同的product flavors,它们的名称不要和build type和sourceSet...[所有的资源文件按照优先级的不同采用覆盖的方式整合,product flavor覆盖main,build type覆盖product flavor] [?这里的优先级总觉得有点问题?]...Manipulating tasks [简单的Java项目一般都是有限的任务一起工作然后得到一个输出,例如classes 任务是用来编译Java源代码的任务,在build.gradle 文件中可以使用classes
仿照例子我们可以添加很多的源集,他们默认的目录结构是: src/sourceSet/java src/sourceSet/resources 看到这里,读者有没有发现这个和我们Android多渠道打包发布很像...,那么有没有专门针对单元测试代码编译的依赖呢,比如junit4,我正常的代码编译时根本用不上,如果强制使用compile也可以,但是会junit4就会被打包到发布的产品中,这不能增加了产品的大小,也为维护带来了不变...6.5 源码集合(SourceSet)概念 SourceSet-源代码集合-源集,是Java插件用来描述和管理源代码及其资源的一个抽象概念,是一个Java源代码文件和资源文件的集合。...sourceSets{}闭包配置的都是SourceSet对象,下面我们会讲它有哪些配置。 源集有很多有用的属性,通过这些属性我们可以很方便的访问或者对源集进行配置。...以上这些是对所有Java项目都适用的任务,对于内置的main和test源集甚至我们自己的新增的源集也新增了一些任务 运行任务的时候,列表中的任务名称中的sourceSet要换成你的源集的名称,比如main
The SourceSet ‘instrumentTest’ is not recognized by the Android Gradle Plugin....在android studio 升级3.2的过程中遇到这个问题, 解决办法 instrumentTest 已经废弃 , 在build.gradle文件中找到instrumentTest , 也可能是在...moudle中的build.gradle文件中 改为 androidTest 重新编译即可
覆盖。...而这个目录的明哲,需要联合它的Build Type以及Flavors,这样用来覆盖那些属性。...在这种情况下,flavors dimensions数组的顺序决定了哪个flavor配置会覆盖另外的。在之前的例子中,Color Dimension会覆盖Price Dimension 。...Resource and manifest merging Android Plugin需要在打包前对Main的SourceSet以及BuildType的SourceSet进行一次Merge。...在这种情况下,Flavor的SourceSet中的资源会被打包到APK中。而Library工程的资源优先级会是最低的。
[srcDir 会自动将给定的目录加入到默认的已有的源码目录列表中,然而srcDirs 会覆盖默认的源码目录设置] To replace the default source folders, you...[setRoot() 会将整个sourceSet包括其中的子目录一起移动到新的目录中,这是Android插件特定的,Java插件没有此功能] Note: setRoot() moves the whole...sourceSet (and its sub folders) to a new folder....[对于每个build type都会生成一个对应的sourceSet,默认的位置是src// ,所以build type的名称不能是main或者androidTest,而且它们相互之间不能重名...[build type的code/resources的处理过程: (1)Manifest整合进app的Manifest; (2)code就作为另一个源码目录; (3)resources覆盖原有的main
目前很多项目构建选择稳健的Maven工具,然而,作为一名Java开发,随着spring全家桶切换成gralde构建,以及越来越多的开源项目从Maven过度到Gradle,Gradle成了程序开发必备的技能之一...如果你还没开始Gradle,别着急,去看下Spring吧,他也才是2020年切换成Gradle的,为时不晚!...环境配置 ---- Windows下载安装Gradle https://services.gradle.org/distributions/gradle-7.0.2-bin.zip 将下载好的zip...) -> { sourceSet.setCompileClasspath(sourceSet.getCompileClasspath().plus(optional));...sourceSet.setRuntimeClasspath(sourceSet.getRuntimeClasspath().plus(optional)); }); project.getTasks
从这章开始我们就开始介绍Android Gradle插件了,会通过几章由浅入深的详细的介绍Android Gradle,本章会简单的介绍下Android Gradle插件,然后通过一个例子对其有大概的了解...;src目录下的androidTest、main、test分别是三个SourceSet,分别对应Android单元测试代码、Android App主代码和资源、普通的单元测试代码。...7.4.4 buildTypes buildTypes是一个NamedDomainObjectContainer类型,是一个域对象,还记得我们讲的SourceSet吗?这个和那个一样。...SourceSet里有main、test等,同样的buildTypes里有release,debug等,我们可以在buildTypes{}里新增任意多个我们需要构建的类型,比如debug,Gradle会帮我们自动创建一个对应的...build.gradle脚本文件做了处理,从上面的例子中我们可以看到,重写了main这个SourceSet,为Android Studio指明我们的java文件、res资源文件、assets文件、aidl
从这章开始,会对Gradle有一个大概的介绍,帮助大家快速的入门Gradle。...3.1 Setting文件 在Gradle中,定义了一个设置文件,用于初始化以及工程树的配置。设置文件的默认名字是settings.gradle,放在根工程目录下。...自定义属性不仅仅局限在Project和Task上,还可以应用在SourceSet,这样等于每种SourceSet又多了一个可供配置的属性,想想我们Android Studio开发的时候,是不是有main...SourceSet,当你使用productFlavors定义多个渠道的时候,还会新增其他很多的SourceSet。...3.8 脚本即代码,代码也是脚本 虽然我们在一个gradle文件中写脚本,但是我们写的都是代码,这一点一定要记清楚,这样你才能时刻的使用Groovy、Java以及Gradle的任何语法和API帮你完成你想做的事情
比如说onVariants,beforeVariants,finalizeDsl这三个不同的阶段,正常情况下我们选择onVariants就足够了。...所以相对来说就比较简单,我们用新的api模拟出原来的效果就差不多可以了,我们只要找到挂载的任务之后,顺便把代码添加到java和kotlin的sourceset中就行了 fun Project.registerJavaGenerateTask...dependsOn(task) } // 获取最新版本sourceSet val application = extensions.findByType...但是把有个坑点,之前因为偷懒就直接用了setSrcDirs这个api,所以文件就被覆盖了。导致了一部分代码没有被编译成class,导致了classnotfound异常。...,本质上是在项目的 gradle.properties 文件中设置了环境变量 org.gradle.unsafe.configuration-cache=true。
() 方法,但是并不能解决依赖顺序问题,需要每个组件都在 app 工程中按顺序添加初始化代码才能正常运行,这使得不熟悉整套组件业务的人很难建立起一个可以独立运行的组件 app。...,所以额外获得了清理无用资源的功能 联合编译完整包 单独运行组件 app 并不能完整的覆盖所有的 case,尤其是在给 QA 测试的时候,还是需要编译完整的主工程包的,所以我们需要一个直接编译完整包的方案...setting.gradle 即可: // ......这时候只能使用添加 sourceSet 的方式,而一旦使用了 sourceSet,代码就不再隔离了。...所以我们使用了一个动态的策略:编译时使用 sourceSet 依赖,其他时候使用 module 依赖,这样可以同时拥有两者的优势。
web3j Gradle插件是从Solidity智能合约生成web3j Java封装的构建工具。它通过添加可以独立运行的特定任务,顺利地与项目的构建生命周期集成。...使用buildscript约定 要使用旧的Gradle buildscript约定安装web3j插件,应该将以下内容添加到构建文件的第一行(目前只有Gradle支持发行版本,而不是SNAPSHOT):...repositories { mavenCentral() } dependencies { classpath 'org.web3j:web3j-gradle-plugin...请注意,消息格式参数不是Gradle属性,不应以$开头。 来源设置 默认情况下,$projectDir/src/main/solidity中的所有.sol文件都将由插件处理。...类似地,Solidity插件将为项目主源添加generateContractWrappers任务,并为每个剩余的源(例如test)添加generate[SourceSet]ContractWrappers
Android Studio3.1.0升级问题记录 每次升级Android Studio时,一般情况下Gradle版本的也会相应的升级,我之前Android Studio 3.0.1、Gradle 是4.1...升级后为:Android Studio 3.1.0、Gradle 为4.4。...-) 第一个错如下: The SourceSet 'instrumentTest' is not recognized by the Android Gradle Plugin....翻译过来就是: “SourceSet” 的'instrumentTest' 没有被Android Gradle插件识别。也许你拼错吗?...猜想可能Gradle移除了’instrumentTest’关键字,网上搜了一下,博客地址如下:http://www.it1352.com/139247.html 新版本Gradle对其做了重命名 即:
文件 重启之后 a.修改app文件夹下的build.gradle文件,修改引用 compile 改为 implementation androidTestCompile 改为 androidTestImplementation...testCompile 改为 testImplementation b.修改project文件夹下的build.gradle文件,修改classpath classpath ‘com.android.tools.build...: The SourceSet ‘instrumentTest’ is not recognized by the Android Gradle Plugin....解决办法: 找build.gradle文件, 可能是moudle中的build.gradle文件 , 找到 instrumentTest 改为 androidTest,重新编译即可。...然后重新编译之后可能会出现找不到moudle中的类 解决办法: moudle 里面的compile 要用api 代替 implementation 不然会找不到对外暴露的方法,把引用改为api 的方式重新编译即可
因为Gradle是基于DSL语法的,如果想看到build.gradle文件中全部可以选项的配置,可以看这里 DSL Reference 基本的项目设置 --- 一个Gradle项目通过一个在项目根目录中的...下面就是一个从Eclipse的老项目结构中配置主要代码并且将androidTest的sourceSet设置给tests目录的例子: android { sourceSets {...注意:因为在旧的项目结构中所有的源文件(Java,AIDL和RenderScript)都放到同一个目录中,我们需要将sourceSet中的这些新部件都设置给src目录。...applicationId: com.example.flavor2 minSdkVersion: 14 versionCode: 10 通常,Build Type配置会覆盖其他的配置...你可以观看这些值来改变不同变量的行为: private void javaCode() { if (BuildConfig.FLAVOR.equals("paidapp")) {
java - 只读 SourceDirectorySet [${project.projectDir}/src/${sourceSet.name}/java] 源集的 Java 源代码 ,只包含 .java...class 文件输出目录 resources - 只读 SourceDirectorySet [${project.projectDir}/src/${sourceSet.name}/resources.../java 给定源集的源代码目录 src/sourceSet/resources 给定源集的资源目录 更改默认目录 这里以更改 main 源集的源代码和资源目录为例 sourceSets {...更多的属性可以查看文档 Convention properties 学习资料: https://wiki.jikexueyuan.com/project/gradle/java-package.html...http://benweizhu.github.io/blog/2015/01/31/deep-into-gradle-in-action-2/ https://docs.gradle.org/current
,多渠道打包的方式比较多,这里我们用Gradle多渠道打包方式。...5.不同渠道如何使用不同的java文件 6.Base模块化中如何使用多渠道 新建项目,在app下build.gradle中android下添加如下代码: productFlavors{ baidu...中的名称相同才可以覆盖,如图所示: ?...并且在gradle中设置sourceSet sourceSets{ baidu{ res.srcDirs = ['src/baidu/res','src/baidu/res']...gradle中添加: publishNonDefault true 变量的使用和上面app的使用方式一样,在这里就不展示了。
近期用android studio来做android开发的IDE,它是使用gradle来构建的,于是開始学习gradle. 如今有一个项目,里面有一个android-library的模块。...的包的,显示这不是我要的,于是便想用gradle来实现。...首先我找到的第一种方法是在模块中的build.gradle添加�一个编译jar包的task.代码例如以下: task releaseJar(type:Jar) { from sourceSet.main.java...这是由于gradle在构建的时候,会对这个模块的class文件先打包成classes.jar并放在build/bundles/release。于是我仅仅须要把它拷出来,并重命名就能够了。.../release" from 'libs' from 'build/libs' } 当中VERSION_NAME是我定义的一个变量,在gradle.properties文件里。
Android Gradle为我们提供了大量的DSL,我们使用这些DSL定义配置我们的工程以满足我们项目中不同的需求。...每一个BuildType都会生成一个SourceSet,默认位置为src//,根据我们以前讲的知识,一个SourceSet包含源代码、资源文件等信息,在Android中就包含了我们的...另外需要注意,因为我们的每个BuildType都会生成一个SourceSet,所以新增的BuildType名字一个要注意,不能是main和androidTest,因为他们两个已经被系统占用,同事每个BuildType...除了会生成对应的SourceSet外,每一个BuildType还会生成相应的assemble任务,比如我们常用的assembleRelease和assembleDebug就是...Android Gradle为我们提供了开启zipalign优化更简便的方式,我们只需要配置开启即可,剩下的操作,比如调用SDK目录下的zipalign工具进行处理等,Android Gradle会帮我们搞定
领取专属 10元无门槛券
手把手带您无忧上云