**/
- 获取所有的子project
/**
-
获取所有的子project
-
@return
*/
def getSubProjects() {
println ‘-------------------------’
println ‘Sub Project’
println ‘-------------------------’
this.getSubprojects().each { Project project ->
println “±-- project 😒{project.name}”
}
}
this.getSubProjects()
/**
Sub Project
±-- project :app
±-- project :lib_base
±-- project :lib_res
±-- project :module_fun
±-- project :module_me
±-- project :module_search
±-- project :module_thing
±-- project :module_use
**/
- 获取根project
**
-
获取根project
-
@return
*/
def getMRootProject(){
def name = this.getRootProject().name
println “根project是:${name}”
}
this.getMRootProject()
/**
根project是:ParallelSearchGradle
**/
- 在父工程中对子工程进行配置(这里依 app为例,也可以为module_use等)
/**
*在父工程中对子工程进行配置(这里依 app为例,也可以为module_use等)
*/
project(‘app’){ Project project->
apply plugin: ‘com.android.application’
group ‘com.fuyao’
version ‘1.0.0’
dependencies{
}
android{
}
}
- 配置当前结点工程和其subproject的所有project(module)
/**
- 配置当前结点工程和其subproject的所有project(module)
*/
allprojects {
group ‘com.fuyao’
version ‘1.0.0’
}
println project(‘module_use’).group//com.fuyao
- 不包括当前结点工程,只包括它的subproject(子module)
/**
- 不包括当前结点工程,只包括它的subproject(子module)
*/
subprojects {
if (project.plugins.hasPlugin(‘com.android.library’)){
apply from:’…/public.gradle’
}
}
在module的build.gradle中
- 获取父project
/**
- 获取父project
*/
def getParentProject() {
def name = this.getParent().name
println “他的父project 是:${name}”
}
this.getParentProject()
/**
他的父project 是:ParallelSearchGradle
**/
- 获取根project
/**
-
获取根project
-
@return
*/
def getMRootProject() {
def name = this.getRootProject().name
println “根project是:${name}”
}
this.getMRootProject()
/**
根project是:ParallelSearchGradle
**/
- 扩展属性
/**
- 扩展属性 在project的build.gradle中进行声明
*/
subprojects {
ext{
compileSdkVersion=28
libSupport=‘com.android.support:support-v4:28.0.0’
}
}
ext{
minSdkVersion=19
libConstraint=‘com.android.support.constraint:constraint-layout:1.1.3’
}
或者 新建gradle文件(例:public.gradle)
ext {
android = [targetSdkVersion: 28,
applicationId : ‘com.fuyao.parallelsearch’]
signconfigs = []
dependence = []
}
在project的build.gradle中引入
//引入公共库
apply from: this.file(‘public.gradle’)
或者在gradle.properties中声明
#****公共配置
##最低版本minSdkVersion
MIN_SDK_VERSION=19
##最高版本targetSdkVersion
TAR_SDK_VERSION=28
##编译版本compileSdkVersion
COMPILER_SDK_VERSION=28
##版本号
VERSION_CODE=1
##版本名称
VERSION_NAME=1.0
在module中进行引用
android {
compileSdkVersion this.compileSdkVersion
dataBinding {
enabled = true
}
defaultConfig {
applicationId rootProject.ext.android.applicationId
// minSdkVersion this.project.minSdkVersion
//或者
minSdkVersion this.minSdkVersion
targetSdkVersion rootProject.ext.android.targetSdkVersion
versionCode project.VERSION_CODE as int
versionName project.VERSION_NAME
testInstrumentationRunner “androidx.test.runner.AndroidJUnitRunner”
}
…
}
dependencies {
implementation fileTree(include: [’*.jar’], dir: ‘libs’)
implementation this.libSupport
// implementation this.project.libConstraint
//或者
implementation this.libConstraint
}
- 在project的build.gradle中
/**
- 获取根工程的文件路径
*/
println “root file path==>${getRootDir().absolutePath}”
//root file path==>E:\workspace\work_demo\ParallelSearchGradle
/**
- 获取当前工程build文件路径
*/
println “build file path==>${getBuildDir().absolutePath}”
//build file path==>E:\workspace\work_demo\ParallelSearchGradle\build
/**
- 获取当前工程文件路径
*/
println “project file path==>${getProjectDir().absolutePath}”
//project file path==>E:\workspace\work_demo\ParallelSearchGradle
/**
*从当前gradle中寻找file
-
@param path
-
@return
*/
def getContent(String path){
try {
def file=this.file(path)//files
//相当于当前的project工程开始查找
return file.text
}catch(Exception e){
println ‘文件没有找到’
}
}
println getContent(‘public.gradle’)
/**
ext {
android = [targetSdkVersion: 28,
applicationId : ‘com.fuyao.parallelsearch’]
signconfigs = []
dependence = []
}
**/
- 在module的build.gradle中
/**
- 获取根工程的文件路径
*/
println “root file path==>${getRootDir().absolutePath}”
//root file path==>E:\workspace\work_demo\ParallelSearchGradle
/**
- 获取当前工程build文件路径
*/
println “build file path==>${getBuildDir().absolutePath}”
//build file path==>E:\workspace\work_demo\ParallelSearchGradle\app\build
/**
- 获取当前工程文件路径
*/
println “project file path==>${getProjectDir().absolutePath}”
//project file path==>E:\workspace\work_demo\ParallelSearchGradle\app
- 文件copy
/**
- 文件copy
*/
copy {
from file(‘ceshi.jks’)
into getRootProject().getBuildDir()//拷贝到根目录的build下
}
copy {
from file(‘ceshi.jks’)
into getRootDir()//拷贝到根目录下
}
/**
- 拷贝文件夹
*/
copy {
from file(‘dev/release/’)
into getRootProject().getBuildDir().path + “/release/”//拷贝到根目录的build下release中
//筛选不想复制的内容
exclude { details ->
details.file.name.endsWith(’.json’)
}
//更改文件名称
rename { fileName ->
fileName.replace(‘parallelsearch’, ‘huang’)
}
}
/**
- 对文件树进行遍历
*/
fileTree(‘dev/release/’) { FileTree fileTree ->
fileTree.visit { FileTreeElement element ->
println “file name==>${element.file.name}”
copy {
from element.file
into getRootProject().getBuildDir().path + “/test/”
}
}
}
- 执行外部命令(以copy apk包到windows桌面为例)
tasks.create(‘apkcopy’) {
doLast {
//gradle的执行阶段去执行
def sourcePath = this.buildDir.path + ‘\outputs\apk’
def desationPath = ‘C:\Users\Administrator\Desktop\downloads’
def command = “xcopy /s ${sourcePath} ${desationPath}”
try {
exec {
workingDir ‘C:\Users\Administrator\Desktop’
commandLine ‘cmd’, ‘/c’, command
println “执行外部命令copy成功”
}
} catch (Exception e) {
e.printStackTrace()
println “执行外部命令copy失败”
}
}
}
buildscript {
//配置我们工程的仓库地址
repositories {
jcenter()
mavenCentral()
mavenLocal()
ivy {}
maven {
name ‘personal’
url ‘仓库地址url’
credentials {
username = ‘admin’
password = ‘admin123’
}
}
}
//配置我们工程的“插件”依赖地址
dependencies {
classpath ‘com.android.tools.build:gradle:3.4.1’
}
}
/**
在android{}中调用
**/
android{
…
sourceSets {
main {
jniLibs.srcDirs = [‘libs’]//修改so库存放位置
res.srcDirs = [‘src/main/res’,
‘src/main/res-ad’,
‘src/main/res-buy’]//修改res路径
}
}
}
最后相关架构及资料领取方式:
点击我的GitHub免费领取获取往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。