0
点赞
收藏
分享

微信扫一扫

Gradle生命周期&project&task,2019-2021历年字节跳动Android面试真题解析

彩虹_bd07 2022-02-04 阅读 85

**/

  • 获取所有的子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

}


file相关API


  • 在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失败”

}

}

}

依赖相关API


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’

}

}


sourceSets


/**

在android{}中调用

**/

android{

sourceSets {

main {

jniLibs.srcDirs = [‘libs’]//修改so库存放位置

res.srcDirs = [‘src/main/res’,

‘src/main/res-ad’,

‘src/main/res-buy’]//修改res路径

}

}

}

最后相关架构及资料领取方式:

举报

相关推荐

0 条评论