依赖相关api:
/**
* 依赖配置api
*/
buildscript {ScriptHandler scriptHandler->
//配置我们工程的仓库地址,闭包的参数一般都省去,闭包中的this,owner,delegate中的方法都是可以直接调用
scriptHandler.repositories { RepositoryHandler repositoryHandler->
repositoryHandler.google()
repositoryHandler.jcenter()
repositoryHandler.mavenLocal()
repositoryHandler.mavenCentral()
repositoryHandler.ivy{}
repositoryHandler.maven {//私有maven仓库,可以配置多个
MavenArtifactRepository mavenArtifactRepository->
//一般是公司内部的maven地址
mavenArtifactRepository.name 'hexindai'
mavenArtifactRepository.url 'http://localhost:8081:/nexus/repositories'
mavenArtifactRepository.credentials{
username='amdin'
password='andim124'
}
}
}
//buildscript中的dependencies方法是配置我们工程的"插件"依赖,是gradle本身框架对第三方库的依赖
scriptHandler.dependencies {
//应用下面的之后,就能指定工程为Android工程或Android lib
classpath'com.android.tools.build:gradle:3.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
//app中project中的dependencies是配置网站或者app需要引用第三方库.(为应用程序添加依赖)
//应用程序的依赖一般有:
//依赖本地库
implementation fileTree(include: ['*.jar'], dir: 'libs')//fileTree,file ,files
//依赖远程库1 ,使用compile引入的第三方库,不仅会在编译阶段使用,并且会打包到apk包中
compile 'com.jakewharton:butterknife:8.4.0'(jar包,var包,arr包(包含资源的jar包Android独有))
//依赖远程库2 ,使用provided引入的第三方库,只会在编译阶段使用,不会打包到apk包中
provided 'com.jakewharton:butterknife:8.4.0'
//依赖第三方有源码的工程
compile project(':baidumobstat-react-native')
//依赖冲突:第三方库中引入了相同的库
compile 'io.reactivex.rxjava2:rxjava:2.0.7'{
exclude module :'support-v4'//通过module方式排除依赖
exclude group:'com.android.support'//排除同一个组下的多个库冲突
}
//传递依赖.比如 compile 'com.squareup.retrofit2:retrofit:2.1.0',retrofit中引入的
//第三方库,我们项目中也要使用,就可以使用传递依赖,将传递依赖设为true
compile 'io.reactivex.rxjava2:rxjava:2.0.7'{
exclude module :'support-v4'//通过module方式排除依赖
exclude group:'com.android.support'//排除同一个组下的多个库冲突
transitive false //false默认禁止传递依赖,尽量不允许使用传递依赖,因为不确定性.万一依赖的工程升级了,不依赖工程c了.}
//引入方式:compile和provided
/*
compile 第三方依赖里面的类和资源都会被打入到工程中.
provided(占位编译) 编译的时候回引入第三方的类和资源,打包时不会打入项目中.运行时不处理会报错.
比如:场景1:Tinker库,他的作用编译时生成application类,只要生成了application类,运行时是不需要的.
场景2:当前工程是类库工程的话,如果类库中引入的okhttp,我们项目中也使用了okhttp,那么类库中就可以使用provided
*/
//外部命令执行,拷贝apk到外部文件夹中.执行./gradlew build //命令生成apk 后,执行./gradlew apkcopy
//首先自定义一个task
task(name: 'apkcopy'){
//doLast都会在gradle的执行阶段执行
doLast{
def sourcePath=this.buildDir.path+'/outputs/apk'
def desationPath='/Users/lichao/Downloads/'
def command="mv -f ${sourcePath ${desationPath}}"
//exec执行外部命令
exec{
try{
executable'bash'args'-c',command
}catch(Exceptione){
println('the command is execute failed.')
}
}
}
}