android gradle taskk是函数还是线程

当前访客身份:游客 [
我的blog主要是给自己看的,转的,读书笔记,抄!!!来源很广泛!
:膜拜大神!
:学习了 素人派 ...
:RabbitMQ之工作队列 里面的代码,可以先启动生产...
:您好,我现在尝试了几次您给出的代码,但是会出现...
:退出按:CTRL + C。这个太逗了吧,不都是后台运行...
:为什么不用firewall 设置防火墙
:楼主 这个lic是不是过期啦。
:引用来自“痕迹BLANK”的评论是不是一定要iLO4 ...
今日访问:21
昨日访问:531
本周访问:1814
本月访问:1452
所有访问:97363
构建Gradle范例项目之构建Java项目
发表于4个月前( 23:02)&&
阅读(42)&|&评论()
0人收藏此文章,
Gradle插件通过引入特定领域的约定和任务来构建你的项目。Java插件是Gradle自身装载的一个插件。Java插件提供的基本功能远比源代码编译和打包多。它为你的项目建立了一个标准的项目布局,并确保有意义,有顺序地执行任务。现在,为你的项目创建一个构建脚本并使用Java插件。
使用Java插件
每个Gradle项目都是以创建名字为build.gradle的文件开始的。创建这个文件,然后像下面这样告诉它要使用Java插件:
apply&plugin:&'java'
一行代码足够构建你的Java代码,但是Gradle怎么知道去哪里找源文件呢?Java插件引入的约定之一就是源代码的位置。在默认情况下,插件会到 src/main/java 目录下查找。
自动化生成项目结构
但是,我们要手工来创建build.gradle文件与源代码目录吗?显示不是,gradle提供了初始化项目目录的命令init:
gradle init --type [java-library | scala-library | groovy-library | basic | pom]
type参数当前只支持以下类型:
basic:缺省值,仅仅为我们创建好构建脚本
pom:将一个maven构建的项目转换成一个gradle构建的项目。如果pom.xml存在,这个类型值会被自动指定。
java-library:初始化创建一个gradle构建的java项目
scala-library:初始化创建一个gradle构建的scala项目
groovy-library:初始化创建一个gradle构建的groovy项目
这里以创建java项目为例:
$&gradle&init&--type&java-library
上图显示,gradle构建的完整的java项目结构就完成了。注意,你们还带了包装器的,后面再讲。
你可以开始构建项目了。java插件提供的一个任务叫作build。这个build任务会以正确的顺序编译你的源代码,运行测试,组装JAR文件。运行gradle build命令,你应该可以得到类似于下面的输出:
$&gradle&build
每一行输出都代表着java插件提供的一个可执行任务。你也许注意到某些任务被标记为 UP-TO-DATE 消息。这意味着这个任务被跳过了。Gradle的增量式构建支持自动鉴别不需要被运行的任务。特别是在大型的企业级项目中,这个特性是节省时间的好帮手。在上面的例子中,你可以看到有测试任务执行,测试源代码默认的位置为:src/test/java。
运行构建后,在项目的根目录下,你会看到有一个build目录,里面包含了构建运行的所有输出,包括class文件,测试报告和JAR文件,还有一些像清单(manifest)一样的对构建有用的临时文件。注:1. 构建输出目录的名字是可配置的属性。2. JAR文件的名字是继承自项目的名字。
运行一个Java应用程序是非常简单的。因为项目是通过命令:
$&gradle&init&--type&java-library
创建的,会产生一个java源文件类的示例和一个java测试类的示例,但并没有带有main函数入口的java类。这里我们创建一个测试用:
public&class&Main&{
&&public&static&final&void&main(String[]&args){
&&&&System.out.println("test&File");
再重新构建一下:
$&gradle&build
下面,我们来运行项目,执行下面的命令:
$&java&-cp&build/classes/main/&Main
就是这样——使用Gradle,你不费吹灰之力就实现和构建了一个Java应用。只要使用标准约定,你所需要做的只是一行脚本
定制你的项目
Java插件是一个很灵活的框架。它会给项目的许多方面设置有意义的默认值,比如项目结构。如果你看待开发世界的方式不同,Gradle给予你定制这些约定的选项。如何知道什么可配置?有一个好地方,就是Gradle构语言指导:&还记得前面讲的命令行选项 properties 吗?&&运行:
$&gradle&properties
&&它会给你一个可配置标准和插件属性的列表,同时还会显示它们的默认值。你可以通过扩展初始构建脚本来定制你的项目。
?修改项目和插件属性?
下面的例子中,你将给项目指定一个版本号,并且指定Java源代码的兼容性。另外,之前你通过java命令运行应用,通过classpath命令行选项 -cp build/classes/main 告诉Java运行时去哪里找class。为了能够从JAR文件启动应用,清单文件MANIFEST.MF需要包含信息头Main-Class。示例(用前面gradle&init&--type&java-library命令生成的build.gradle,在上面添 加配置项):
&*&This&build&file&was&auto&generated&by&running&the&Gradle&'init'&task
&*&by&'fuhd'&at&'15-10-22&下午8:14'&with&Gradle&2.7
&*&This&generated&file&contains&a&sample&Java&project&to&get&you&started.
&*&For&more&details&take&a&look&at&the&Java&Quickstart&chapter&in&the&Gradle
&*&user&guide&available&at&https://docs.gradle.org/2.7/userguide/tutorial_java_projects.html
//&Apply&the&java&plugin&to&add&support&for&Java
apply&plugin:&'java'
version&=&0.1
sourceCompatibility&=&1.8
&&manifest{
&&&&attributes&'Main-Class':'Main'
//&In&this&section&you&declare&where&to&find&the&dependencies&of&your&project
repositories&{
&&&&//&Use&'jcenter'&for&resolving&your&dependencies.
&&&&//&You&can&declare&any&Maven/Ivy/file&repository&here.
&&&&jcenter()
//&In&this&section&you&declare&the&dependencies&for&your&production&and&test&code
dependencies&{
&&&&//&The&production&code&uses&the&SLF4J&logging&API&at&compile&time
&&&&compile&'org.slf4j:slf4j-api:1.7.12'
&&&&//&Declare&the&dependency&for&your&favourite&test&framework&you&want&to&use&in&your&tests.
&&&&//&TestNG&is&also&supported&by&the&Gradle&Test&task.&Just&change&the
&&&&//&testCompile&dependency&to&testCompile&'org.testng:testng:6.8.1'&and&add
&&&&//&'test.useTestNG()'&to&your&build&script.
&&&&testCompile&'junit:junit:4.12'
然后运行:
$&gradle&build
你会看到版本号添加到了JAR文件的名字中。现在名字是abc-0.1.jar。现在生成的JAR文件包含了主类头属性,你可以通过下面这条命令运行应用:
$&java&-jar&build/libs/abc-0.1.jar
改造遗留项目
和一个遗留系统集成,迁移已有项目的技术栈,或者坚持内部标准或者限制,实在太常见了。构建工具必须足够灵活,可以通过改变默认配置来适应来自外部的限制。
让我们假设你是在一个完全不一样的目录结构下开始这个项目的。你需要把源代码放置在src目录下,而不是 src/main/java 。同样的道理,也适用于改变默认的测试代码目录。另外,你想要让Gradle将输出结果放置在out目录下, 而不是build。下面代码展示了如何让你的构建适应一个定制的项目结构:
&*&This&build&file&was&auto&generated&by&running&the&Gradle&'init'&task
&*&by&'fuhd'&at&'15-10-22&下午8:14'&with&Gradle&2.7
&*&This&generated&file&contains&a&sample&Java&project&to&get&you&started.
&*&For&more&details&take&a&look&at&the&Java&Quickstart&chapter&in&the&Gradle
&*&user&guide&available&at&https://docs.gradle.org/2.7/userguide/tutorial_java_projects.html
//&Apply&the&java&plugin&to&add&support&for&Java
apply&plugin:&'java'
version&=&0.1
sourceCompatibility&=&1.8
&&manifest{
&&&&attributes&'Main-Class':'Main'
sourceSets{
&&&&&&srcDirs&=&['src']&&&&&&&&&&&&//用不同目录的列表代替约定的源代码
&&&&&&srcDirs&=&['test']&&&&&&&&&&&//用不同目录的列表代替约定的测试代码目录
buildDir&=&'out'&&&&&&&&&&&&&&&&&&&//改变项目输出属性(路径)到out目录
//&In&this&section&you&declare&where&to&find&the&dependencies&of&your&project
repositories&{
&&&&//&Use&'jcenter'&for&resolving&your&dependencies.
&&&&//&You&can&declare&any&Maven/Ivy/file&repository&here.
&&&&jcenter()
//&In&this&section&you&declare&the&dependencies&for&your&production&and&test&code
dependencies&{
&&&&//&The&production&code&uses&the&SLF4J&logging&API&at&compile&time
&&&&compile&'org.slf4j:slf4j-api:1.7.12'
&&&&//&Declare&the&dependency&for&your&favourite&test&framework&you&want&to&use&in&your&tests.
&&&&//&TestNG&is&also&supported&by&the&Gradle&Test&task.&Just&change&the
&&&&//&testCompile&dependency&to&testCompile&'org.testng:testng:6.8.1'&and&add
&&&&//&'test.useTestNG()'&to&your&build&script.
&&&&testCompile&'junit:junit:4.12'
配置和使用外部依赖
Gradle如何引用外部库?我们来看看两个DSL配置元素:repositories和dependencies。
在Java世界,依赖都是以JAR文件的形式发布和使用的。许多类库都可以在仓库中找到,仓库可以是一个文件系统或者一个中心服务器。Gradle要求你定义至少一个仓库来使用依赖。为此,你需要使用公共的可访问的仓库Maven Central:
repositories&{
&&&&mavenCentral()&&&&&&&&//配置对Maven&Central2仓库访问的快捷方式&
定义好仓库之后,你就可以声明类库了。让我们看看依赖是如何定义的!
一个依赖是通过group标识符,名字和一个指定版本来确定的。如例:
dependencies&{
&&&&compile&group:'mons',name:'commons-lang3',version:'3.1'
在Gradle中,依赖是由configuration分组的。Java插件引入的一种configuration是compile。你可以通过configuration的名字看出它是给编译源代码使用的。
Gradle会自动检测到一个新的依赖添加到项目中。如果依赖没有被成功解析,那么就会在下一个需要使用该依赖的任务启动时去下载它。
更多开发者职位上
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读Gradle学习 - 简书
下载简书移动应用
写了23386字,被8人关注,获得了3个喜欢
Gradle学习
GradleGradle是一个工具,同时它也是一个编程框架。前面也提到过,使用这个工具可以完成app的编译打包等工作。当然你也可以用它干其他的事情。
相关Gradle的官网:
settings.gradlesettings.gradle除了可以include外,还可以设置一些函数。这些函数会在gradle构建整个工程任务的时候执行,所以,可以在settings做一些初始化的工作。比如:我的settings.gradle的内容://定义一个名为initMinshengGradleEnvironment的函数。该函数内部完成一些初始化操作//比如创建特定的目录,设置特定的参数等
def initMinshengGradleEnvironment(){
println"initialize Minsheng Gradle Environment ....."
......//干一些special的私活....
println"initialize Minsheng Gradle Environment completes..."
//settings.gradle加载的时候,会执行initMinshengGradleEnvironment
initMinshengGradleEnvironment()
//include也是一个函数:
include 'CPosSystemSdk' , 'CPosDeviceSdk' , 'CPosSdkDemo','CPosDeviceServerApk','CPosSystemSdkWizarPosImpl'
gradle命令介绍
gradle projects查看工程信息
gradle tasks查看任务信息
gradle task-name执行任务列出了好多任务,这时候就可以通过 gradle 任务名来执行某个任务。这和make xxx很像。比如:gradle clean是执行清理任务,和make clean类似。gradle properites用来查看所有属性信息。gradle tasks会列出每个任务的描述,通过描述,我们大概能知道这些任务是干什么的.....。然后gradle task-name执行它就好。这里要强调一点:Task和Task之间往往是有关系的,这就是所谓的依赖关系。比如,assemble task就依赖其他task先执行,assemble才能完成最终的输出。
Gradle基本类型
gradle基于groovy, gradle提供的基本类型也都实现了script.并且提供了大量的方法和属性
Build script -& Project (每个project的build.gradle也就是一个project)Init script -& GradleSettings script -& Settings (对应setting.gradle)
每个project的build.gradle都会转换成一个project
每一个settings.gradle都会转换成一个Settings对象
Gradle 生命周期
1.初始化创建Settings实例2.解析settings.gradle 构造各个Project实例3.解析每个Project对应的build.gradle,配置相应Project
即 setting.gradle -& 各个build.gradle
Paste_Image.png
Paste_Image.png
上面第一张图是settings.gradle的配置第二张是执行assemble 打印出来的执行顺序,也就是说settings.gradle先执行然后是root.gradle (也就是我们根目录下的gradle) 接下来就是按照settings.gradle配置顺序进行执行~
每个对象的方法就不再赘述,api中都有。
root gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
mavenCentral()
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
allprojects {//对所有projects都起作用
repositories {
mavenCentral()
ext {//定义所有project公用参数
使用rootProject.ext.XX就能拿到相应对象
compileSdk = 23
minSdk = 11
targetSdk = 23
support = "23.1.1"
buildTools = "23.0.2"
glide = "3.6.0"
okio = "1.4.0"
okhttp = "2.4.0"
fabric = "2.4.0"
leakcanary = "1.3.1"
logansquare = "1.1.0"
dagger = "2.0.1"
packageName = "com.evilsoulm.keep_nice"
butterknife = "7.0.1"
retrofit = "2.0.0-beta2"
greendao = "2.0.0"
task clean(type: Delete) {
delete rootProject.buildDir
commonandroid.gradle android项目共用gradle 相当于基类 可以通过apply from 引入
compileSdkVersion pileSdk
buildToolsVersion rootProject.ext.buildTools
defaultConfig {
minSdkVersion rootProject.ext.minSdk
targetSdkVersion rootProject.ext.targetSdk
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
dexOptions {
javaMaxHeapSize "2048m"
dexOptions {
preDexLibraries project.hasProperty('debug')
incremental project.hasProperty('debug')
packagingOptions {
exclude '.readme'
exclude 'LICENSE.txt'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/dependencies'
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/dependencies.txt'
commonproject.gradle project项目共用gradle
repositories {
mavenCentral()
apply plugin: 'findbugs'
apply plugin: 'checkstyle'
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
apply from: rootProject.file('basegradle/commonProject.gradle')//引入commonProject
apply from: rootProject.file('basegradle/commonAndroid.gradle')//引入commonAndroid
buildscript {
repositories {
mavenCentral()
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
defaultConfig {
applicationId rootProject.ext.packageName
versionCode 1
versionName "1.0"
buildTypes {
minifyEnabled false
debuggable true
jniDebuggable true
minifyEnabled true
shrinkResources false
debuggable false
jniDebuggable false
zipAlignEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
configurations {
all*.exclude group: 'com.google.android', module: 'android'
all*.exclude group: 'com.google.android', module: 'support-v4'
all*.exclude group: 'asm', module: 'asm'
all*.exclude group: 'com.google.code.gson'
productFlavors {//很棒的一个参数可以在底下更改包名,资源等。。
dependencies {
compile project(':common')
compile project(':model')
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:' + rootProject.ext.support
compile 'com.android.support:design:' + rootProject.ext.support
compile 'com.squareup.okio:okio:' + rootProject.ext.okio
compile('com.squareup.okhttp:okhttp:' + rootProject.ext.okhttp) {
exclude group: 'com.squareup.okio', module: 'okio'
//图片加载
compile 'com.github.bumptech.glide:glide:' + rootProject.ext.glide
//leakcanary
debugCompile 'com.squareup.leakcanary:leakcanary-android:' + rootProject.ext.leakcanary
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:' + rootProject.ext.leakcanary
//logansquare
apt 'com.bluelinelabs:logansquare-compiler:' + rootProject.ext.logansquare
compile 'com.bluelinelabs:logansquare:' + rootProject.ext.logansquare
//dagger2 注入
apt 'com.google.dagger:dagger-compiler:' + rootProject.ext.dagger
compile 'com.google.dagger:dagger:' + rootProject.ext.dagger
compile 'com.jakewharton:butterknife:' + rootProject.ext.butterknife
compile 'io.reactivex:rxjava:1.0.10'
compile 'io.reactivex:rxandroid:0.24.0'
//网络框架
compile 'com.squareup.retrofit:retrofit:' + rootProject.ext.retrofit
compile 'com.squareup.retrofit:converter-gson:' + rootProject.ext.retrofit
compile 'com.squareup.retrofit:adapter-rxjava:' + rootProject.ext.retrofit
另一种写法就是只有一个root.build 通过configure进行每个module的配置 ,每个module下的build.gradle就可以删除了~统一在root.build下进行管理eg.只写了一个module
buildscript {
repositories {
mavenCentral()
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
allprojects {
repositories {
mavenCentral()
compileSdk = 23
minSdk = 11
targetSdk = 23
support = "23.1.1"
buildTools = "23.0.2"
glide = "3.6.0"
okio = "1.4.0"
okhttp = "2.4.0"
fabric = "2.4.0"
leakcanary = "1.3.1"
logansquare = "1.1.0"
dagger = "2.0.1"
packageName = "com.evilsoulm.keep_nice"
butterknife = "7.0.1"
retrofit = "2.0.0-beta2"
greendao = "2.0.0"
configure(project(':app').subprojects) {//相当于放在app下的build.gradle
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
apply from: rootProject.file('basegradle/commonProject.gradle')
apply from: rootProject.file('basegradle/commonAndroid.gradle')
buildscript {
repositories {
mavenCentral()
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
defaultConfig {
applicationId rootProject.ext.packageName
versionCode 1
versionName "1.0"
buildTypes {
minifyEnabled false
debuggable true
jniDebuggable true
minifyEnabled true
shrinkResources false
debuggable false
jniDebuggable false
zipAlignEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
configurations {
all*.exclude group: 'com.google.android', module: 'android'
all*.exclude group: 'com.google.android', module: 'support-v4'
all*.exclude group: 'asm', module: 'asm'
all*.exclude group: 'com.google.code.gson'
productFlavors {
dependencies {
compile project(':common')
compile project(':model')
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:' + rootProject.ext.support
compile 'com.android.support:design:' + rootProject.ext.support
compile 'com.squareup.okio:okio:' + rootProject.ext.okio
compile('com.squareup.okhttp:okhttp:' + rootProject.ext.okhttp) {
exclude group: 'com.squareup.okio', module: 'okio'
//图片加载
compile 'com.github.bumptech.glide:glide:' + rootProject.ext.glide
//leakcanary
debugCompile 'com.squareup.leakcanary:leakcanary-android:' + rootProject.ext.leakcanary
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:' + rootProject.ext.leakcanary
//logansquare
apt 'com.bluelinelabs:logansquare-compiler:' + rootProject.ext.logansquare
compile 'com.bluelinelabs:logansquare:' + rootProject.ext.logansquare
//dagger2 注入
apt 'com.google.dagger:dagger-compiler:' + rootProject.ext.dagger
compile 'com.google.dagger:dagger:' + rootProject.ext.dagger
compile 'com.jakewharton:butterknife:' + rootProject.ext.butterknife
compile 'io.reactivex:rxjava:1.0.10'
compile 'io.reactivex:rxandroid:0.24.0'
//网络框架
compile 'com.squareup.retrofit:retrofit:' + rootProject.ext.retrofit
compile 'com.squareup.retrofit:converter-gson:' + rootProject.ext.retrofit
compile 'com.squareup.retrofit:adapter-rxjava:' + rootProject.ext.retrofit
如果是单个脚本,则不需要考虑属性的跨脚本传播,但是Gradle往往包含不止一个build.gradle文件,比如我设置的utils.gradle,settings.gradle。如何在多个脚本中设置属性呢?Gradle提供了一种名为extra property的方法。extra property是额外属性的意思,在第一次定义该属性的时候需要通过ext前缀来标示它是一个额外的属性。定义好之后,后面的存取就不需要ext前缀了。ext属性支持Project和Gradle对象。即Project和Gradle对象都可以设置ext属性
在上面的例子中其实我们已经用到了ext来定义一些常亮,eg:packageName,compileversion等现在结合groovy相关知识,再重构下上面的gradle配置.
定义一个const.gradle用来管理我们的常亮和各个库所依赖的库.
android_const = [
compileSdk : 23,
: "23.1.1",
buildTools : "23.0.2",
packageName: "com.evilsoulm.keep_nice"
dep_const = [
: "3.6.0",
: "1.4.0",
: "2.4.0",
: "2.4.0",
leakcanary : "1.3.1",
logansquare: "1.1.0",
: "2.0.1",
butterknife: "7.0.1",
: "2.0.0-beta2",
app_dep = [
"appcompat-v7"
: 'com.android.support:appcompat-v7:' + android_const.support,
: 'com.android.support:design:' + android_const.support,
: 'com.squareup.okio:okio:' + dep_const.okio,
: 'com.squareup.okhttp:okhttp:' + dep_const.okhttp,
: 'com.github.bumptech.glide:glide:' + dep_const.glide,
"debug_leakcanary"
: 'com.squareup.leakcanary:leakcanary-android:' + dep_const.leakcanary,
"release_leakcanary": 'com.squareup.leakcanary:leakcanary-android-no-op:' + dep_const.leakcanary,
: 'com.github.bumptech.glide:glide:' + dep_const.glide,
"apt_logansquare"
: 'com.bluelinelabs:logansquare-compiler:' + dep_const.logansquare,
"logansquare"
: 'com.bluelinelabs:logansquare:' + dep_const.logansquare,
"apt_dagger"
: 'com.google.dagger:dagger-compiler:' + dep_const.dagger,
: 'com.google.dagger:dagger:' + dep_const.dagger,
"butterknife"
: 'com.jakewharton:butterknife:' + dep_const.butterknife,
: 'io.reactivex:rxjava:1.0.10',
"rxandroid"
: 'io.reactivex:rxandroid:0.24.0',
"retrofit"
: 'com.squareup.retrofit:retrofit:' + dep_const.retrofit,
"converter-gson"
: 'com.squareup.retrofit:converter-gson:' + dep_const.retrofit,
"adapter-rxjava"
: 'com.squareup.retrofit:adapter-rxjava:' + dep_const.retrofit
model_generator_dep = [
"greendao-generator": 'de.greenrobot:greendao-generator:' + dep_const.greendao
model_dep = [
"greendao": 'de.greenrobot:greendao:' + dep_const.greendao,
"android" : 'com.google.android:android:4.1.1.4'
根目录的build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
apply from: "basegradle/const.gradle" //引入const.gradle 有点继承的感觉 也就是现在rootProject也就拥有const.gradle里的方法和变量
buildscript {
repositories {
mavenCentral()
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
allprojects {
repositories {
mavenCentral()
使用//老的版本
apply plugin: 'java'
dependencies {
compile 'de.greenrobot:greendao:' + rootProject.ext.greendao
compile(group: 'com.google.android', name: 'android', version: '4.1.1.4')
改造后 简单清楚
apply plugin: 'java'
dependencies {
compile rootProject.ext.model_dep.greendao
compile rootProject.ext.model_dep.android
查看依赖树
gradle dependencies
其他gradle:
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:

我要回帖

更多关于 gradle task 的文章

 

随机推荐