为了账号安全,请及时绑定邮箱和手机立即绑定

groovy-gradle(1)

标签:
Android

gradle 编程框架的组成:groovy核心语法 ,build script block,gradle api.

gradle的生命周期:

->1.Initialization初始化阶段(解析真个工程中所有project,构建所有的project对应的project对象)

->2.Configuration配置阶段(解析所有的projects对象中的task,构建好所有task的拓扑图)

->3.Execution执行阶段(执行具体的task及其依赖task)
gradle执行流程监听:

/**
 * 配置阶段开始前的监听回调
 */
this.beforeEvaluate {}
/**
 * 配置阶段完成以后的回调
 */
this.afterEvaluate {}
/**
 * gradle 执行完毕以后的监听
 */
this.gradle.buildFinished {}
//第二组监听
/**
 *等同于beforeEvaluate
 */
this.gradle.beforeProject {}
/**
 *等同于afterEvaluate.完毕的监听也是通过buildFinised
 */
this.gradle.afterProject {}
gradle Project详解:project是gradle构建程序的入口.对于gradle 来说项目和module和lib库等都是一个project,每个project都有一个build.gradle 文件.
只有有build.gradle文件的文件夹才是project.
根project的project作用是管理子project,子project的作用是一个子project对应一个输出.Android中module的对应的是输出一个app,lib对应输出的是aar的生成.
java项目中每个project对应是每个jar包的生成.网站项目中一个project对应输出一个war.
project api的组成包括:gadlew生命周期api,project相关api,task相关api,属性相关api,file相关api和其他api.
1.>project相关api:是让当前project拥有操作父project和管理子project的能力.
2.>task相关api:为当前project新增task及使用使用当前project中已有task的能力.
3.>属性相关api:project本身的gradle提供了一些属性,属性api拥有让我们为project添加额外属性的能力.
4.>project下file相关api:project下file相关api提供用来操作当前project下文件的作用.
5.>gradle声明周期的api:提供回调来进行监听等操作.
6.>其他api:例如为project添加依赖,添加配置以及如何引入一些外部文件等等.

每个project中都包含一个build.gradle文件,build.gradle 文件都会被编译为一个project字节码.所以在build.gradle文件,就相当于在一个project类,在build.gradle中写代码就相当于在project类中写代码.

project方法介绍:

//获取子project

this.getSubprojects().eachWithIndex { Project entry, int i ->

    println("----getSubprojects:project----- ': ${entry.name}'")
}
//获取所有的project
this.getAllprojects()
//获取父project
this.getParent().name//name属性获取project的name
//获取rootproject
this.getRootProject()
/**
 * 配置当前节点工程和所有子工程.
 */
allprojects {
    group 'com.hexindai.com'//配置公共方法
    version '1.0.0-release'//配置公共方法
    repositories {
        google()
        jcenter()
    }
}
/**
 * 不包括当前节点工程,只包含子工程.
 * 如果不是所有的字工程都需要,可以建一个单独的gradle,谁使用谁apply 调用.
 */
subprojects{
    //上传到maven仓库,apk不需要上传到maven
    //判断是否是库工程
    if(project.plugins.hasPlugin('com.android.library')){
        apply from:'../publishToMaven.gradle'
    }
}
/**
 * project api,在rootproject中配置制定子project,但是没必要,模块化各自干各自的活.
 */
/*project('app'){Project project->
    apply plugin: 'com.android.application'
    group 'com.hexindai.hxd'
    version '1.0.0.0'

    android {
        compileSdkVersion 26
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
        defaultConfig {
            applicationId "com.oahcil.lichao.duyaxing"
            minSdkVersion 15
            targetSdkVersion 26
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
            multiDexEnabled true
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }

    }
    dependencies {
        implementation fileTree(include: ['*.jar'], dir: 'libs')
        implementation 'com.android.support:appcompat-v7:26.0.0'
        implementation 'com.android.support.constraint:constraint-layout:1.0.2'
        implementation 'com.android.support:design:26.0.0'
        androidTestImplementation 'com.android.support.test:runner:1.0.1'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
        testCompile 'junit:junit:4.12'
        compile 'com.jakewharton:butterknife:8.4.0'
        annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
        compile 'com.apkfuns.logutils:library:1.4.2'
        compile 'com.squareup.retrofit2:converter-gson:2.1.0'
        compile 'com.squareup.retrofit2:retrofit:2.1.0'
        compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
        compile 'com.squareup.okhttp3:logging-interceptor:3.0.0-RC1'
        compile 'io.reactivex.rxjava2:rxjava:2.0.7'
        compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
        compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
        compile 'com.trello.rxlifecycle2:rxlifecycle:2.0.1'
        compile 'com.trello.rxlifecycle2:rxlifecycle-components:2.0.1'
        compile 'com.jiongbull:jlog:1.0.5'
        compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.3@aar'

    }
}*/
project属性:
1:DEFAULT_BUILD_FILE='build.gradle'//默认每个project的生成文件是build.gradle
2:PATH_SEPARATOR=":"//路径分隔符是":",区别于一般路径分隔符是"\"
3:DEFAULT_BUILD_DIR_NAME="build"//默认所有输出文件的文件夹是build
4:GRADLE_PROPERTIES="gradle.properties"//默认gradle的配置文件是gradle.properties
project扩展属性:
1.->
/**
 * build.gradle中存在许多模糊的int,string版本和引用相同的库的路径和版本,造成可读性不好,管理不好.
 * 所以我们就可以在根project中为所有子project进行配置.当然如果是某个子project单独使用的,
 * 就在子project中单独定义变量,或者配置扩展属性的方式.
 * 在根project中配置扩展属性.
 * 此种方式缺点是:在此配置,最终还是会在每个子project中配置一边.
 */
subprojects{
    ext{
        complieSdkVersion=26
        libAndroidDesign='com.android.support:design:26.0.0'
    }
}
2.>
/**
 * 进阶的方式,在根project中直接配置ext扩展属性
 * 调用时即可以指定rootProject(this.rootProject.complieSdkVersion)
 * 也可以直接调用this.complieSdkVersion(因为继承)
 */
ext{
    complieSdkVersion=26
    libAndroidDesign='com.android.support:design:26.0.0'
}
3.>
/**
 * 终极方式.在根目录下创建一个通用的common.gradle,通过apply引入
 */
ext{
    android=[
            compileSdkVersion :26,
            buildToolsVersion :'26.0.0',
            applicationId :'com.hexinda.hxd',
            targetSdkVersion:26,
            versionCode :1,
            versionName:'1.0.0',
            multiDexEnabled:true,
            manifestPlaceholders:[UMENG_CHANNEL_VALUE:'unknown']
    ]
    signConfigs=[
            'storeFile':'hexindai.keystore',
            'storePassword':'liwswswws',
            'keyAlias':'lich',
            'keyPassword' :'hexindaiwswswws'
    ]
}
然后在根project中引入:apply from:this.file('common.gradle'),然后在所有的子project中使用
android {
    compileSdkVersion rootProject.ext.android.complieSdkVersion
    defaultConfig {
        applicationId rootProject.ext.android.applicationId
        minSdkVersion rootProject.ext.android.compileSdkVersion
        targetSdkVersion rootProject.ext.android.targetSdkVersion
        versionCode rootProject.ext.android.versionCode
        versionName rootProject.ext.android.versionName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled rootProject.ext.android.multiDexEnabled
    }
    signingConfigs {
        release {
            storeFile file(rootProject.ext.android.signConfigs.storeFile)
            storePassword rootProject.ext.android.signConfigs.storePassword
            keyAlias rootProject.ext.android.signConfigs.keyAlias
            keyPassword rootProject.ext.android.signConfigs.keyPassword
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

}

原文链接:http://www.apkbus.com/blog-953329-77642.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消