# understandGradle **Repository Path**: xuliangbo/understandGradle ## Basic Information - **Project Name**: understandGradle - **Description**: understandGradle - **Primary Language**: Android - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-06-22 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1.gradle learning 入门 > gradle 是系统构建工具🔧 DSL构建基于groovy 大部分构建功能通过插件实现 * 安装好gradle环境 `gradle -v` 查看版本 ``` Gradle 6.4 Build time: 2020-05-05 19:18:55 UTC Revision: 42f7c3d0c3066b7b38bd0726760d4881e86fd19f Kotlin: 1.3.71 Groovy: 2.5.10 Ant: Apache Ant(TM) version 1.10.7 compiled on September 1 2019 JVM: 1.8.0_111 (Oracle Corporation 25.111-b14) OS: Mac OS X 10.15.4 x86_64 ``` ## first gradle task :'gradle -q hello' ``` task hello { doLast { println 'Hello World!' } } ``` 执行`gradle命令`默认会加载当前文件夹下的`build.gradle` -q 控制日志等级 ## 认识gradle Wrapper 将`build.gradle`放到一个新建的空文件夹下,在控制台cd到`build.gradle`的目录 执行`gradle wrapper` ls 后发现自动生成 了一下文件 ``` build.gradle gradle gradlew gradlew.bat ``` ## Gradle日志 * EEEOR * Quiet -q --quiet * warning * lifecycle * into -i --info * debug -d --debug sample: $ gradle -q tasks 1 -s 2 -S > gradle内置了`logger`可以使用 logger.info('info日志信息') ### 查看所有可执行的tasks gradel tasks ///./gradlew help -task # 第二章 Grovvy基础 ### '' 和 ""(单引号 和双引号) 单引号只是字符串/双引号可以支持作运算(${name}) ### 定义一个数组 ``` task printList <<{ def numList = [1,2,3,4,5,6]; println numList[1] //访问第二个元素 println numList[-1] //访问倒数第一个元素 println numList[-2] //访问倒数第二个元素 println numList[1..3] //访问第二到第四个元素 numList.each{ println it } def map1 = ['width':1024,'height':768] println map1[height] println map1.height def method(int a,int b){ // 可以不写return println a + b } } ``` ### 闭包委托 thisObject/owner/delegate #### setting.gradle ``` rootProject.name='My Application' include ':app' // 默认同级 //samples include ':kernel' project (':kernel').projectDir = new File('/Users/xx/Documents/xx/xx/mcore') include(':example02') project (':example02').projectDir = new File(rootDir,'chapter01/example02') ``` ### 任务依赖 ``` task ex35 <<{ println 'hello' } task ex35Main(dependsOn : ex35){ doLast{ println 'main' } } task ex35Multi{ dependsOn ex35,ex35Main doLast{ println 'main' } } ``` #### 自定义属性 ``` ext.age = 18 ext { phone = 121212 address = 'aaa' } tast exCustomProperty{ println "Age is ${age}" println "Phone is ${phone}" } def buildTime(){ def date = new Date() def formattedDate = date.format('yyyyMMdd') return formattedDate } ``` ### 多种方式访问 任务 ``` task ex42 tesks['ex42'].doLast{ // get 拿不到会抛异常UnknowTaskException // find 拿不到会返回null println tasks.findByPath(':ex42:ex4201') println tasks.getByPath(':ex42:ex4201') //name后 只能是名称不能是路径 println tasks.findByName('ex42') println tasks.getByName('ex42') } //enabled属性 ex42.enabled = false ``` #### onlyIf ``` task buildOpenSSL () { onlyIf { def armNativeFile = new File("${androidNativeRootDir}/asd.aa") return !armNativeFile.exists() } } ``` ## Gradle插件 apply plugin: 'com.android.application' apply plugin: 'java' #### version.gradle ``` ext{ versionName = '1.0.0' c = 1 } ``` ``` apply from:'version.gradle' task ex52 <<{ println "App name :${versionName} ,code ${versionCode}" } ``` ## Java Gradle插件 apply plugin: 'java' ``` dependencies { //for dependencies found in artifact repositories you can use //the group:name:version notation implementation 'commons-lang:commons-lang:2.6' testImplementation 'org.mockito:mockito:1.9.0-rc1' //map-style notation: implementation group: 'com.google.code.guice', name: 'guice', version: '1.0' //declaring arbitrary files as dependencies implementation files('hibernate.jar', 'libs/spring.jar') //putting all jars from 'libs' onto compile classpath implementation fileTree('libs') } implementation project(":tpolcore") ``` ### gradle signingReport 打印签名信息 ### gradle androidDependencies 打印依赖 ``` > Task :app:androidDependencies debug debugCompileClasspath - Dependencies for compilation +--- org.jetbrains.kotlin:kotlin-android-extensions-runtime:1.3.72@jar +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72@jar +--- androidx.core:core-ktx:1.2.0@aar +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.72@jar +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72@jar +--- org.jetbrains:annotations:13.0@jar +--- com.google.android.material:material:1.1.0@aar +--- androidx.appcompat:appcompat:1.1.0@aar +--- androidx.viewpager2:viewpager2:1.0.0@aar +--- androidx.recyclerview:recyclerview:1.1.0@aar +--- androidx.legacy:legacy-support-v4:1.0.0@aar +--- androidx.fragment:fragment:1.1.0@aar +--- androidx.appcompat:appcompat-resources:1.1.0@aar +--- androidx.legacy:legacy-support-core-ui:1.0.0@aar +--- androidx.drawerlayout:drawerlayout:1.0.0@aar +--- androidx.coordinatorlayout:coordinatorlayout:1.1.0@aar +--- androidx.transition:transition:1.2.0@aar +--- androidx.vectordrawable:vectordrawable-animated:1.1.0@aar +--- androidx.vectordrawable:vectordrawable:1.1.0@aar +--- androidx.media:media:1.0.0@aar +--- androidx.legacy:legacy-support-core-utils:1.0.0@aar +--- androidx.viewpager:viewpager:1.0.0@aar +--- androidx.slidingpanelayout:slidingpanelayout:1.0.0@aar +--- androidx.customview:customview:1.0.0@aar +--- androidx.loader:loader:1.0.0@aar +--- androidx.activity:activity:1.0.0@aar +--- androidx.swiperefreshlayout:swiperefreshlayout:1.0.0@aar +--- androidx.asynclayoutinflater:asynclayoutinflater:1.0.0@aar +--- androidx.core:core:1.2.0@aar +--- androidx.cursoradapter:cursoradapter:1.0.0@aar +--- androidx.versionedparcelable:versionedparcelable:1.1.0@aar +--- androidx.collection:collection:1.1.0@jar +--- androidx.cardview:cardview:1.0.0@aar +--- androidx.lifecycle:lifecycle-runtime:2.1.0@aar +--- androidx.lifecycle:lifecycle-viewmodel:2.1.0@aar +--- androidx.savedstate:savedstate:1.0.0@aar +--- androidx.lifecycle:lifecycle-livedata:2.0.0@aar +--- androidx.lifecycle:lifecycle-livedata-core:2.0.0@aar +--- androidx.lifecycle:lifecycle-common:2.1.0@jar +--- androidx.arch.core:core-runtime:2.0.0@aar +--- androidx.arch.core:core-common:2.1.0@jar +--- androidx.documentfile:documentfile:1.0.0@aar +--- androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar +--- androidx.print:print:1.0.0@aar +--- androidx.interpolator:interpolator:1.0.0@aar +--- androidx.annotation:annotation:1.1.0@jar \--- org.bouncycastle:bcprov-jdk15on:1.65@jar ``` #### 其他功能可以在`app/build.gradle`中查看注释 ``` gradle知识还是挺多的~ 慢慢组织吧,大家有项目中用到的比较好的建议可以私信联系我一起维护 也行 ```