buildSrc
我们在编写Android项目时,当我们的项目越来越复杂的时候,我们的业务类以及所需的其他引用会写的到处都是,所以Gradle建议我们使用buildSrc抽象式命令逻辑来构建我们的项目。
之前
在之前我们为了把在build.gradle中dependencies所有的引用库都堆积到一起比如:
···
implementation("com.google.protobuf:protobuf-javalite:3.17.3")
implementation("androidx.datastore:datastore:1.0.0-rc01")
//more...
···
这样我们就不能很好的去管理项目中引用的代码库,使用gradle中的buildSrc可以很好的解决这个问题。
构建buildSrc
根据官方文档buildSrc首先我们先要在Android项目的根目录(注意:一定要是根目录与build.gradle(project)同级)中创建一个buildSrc文件夹如:
然后在该目录下创建一个build.gradle文件。下一步我们同步一下我们的项目,等待Android studio自动引用相关插件。等待同步完成。我们根据官方文档创建以下项目:
buildSrc/build.gradle
···
repositories {
mavenCentral()
}
dependencies {
testImplementation 'junit:junit:4.13'
}
···
├── buildSrc
│ ├── build.gradle
│ └── src
│ ├── main
│ │ └── java
│ │ └── com
│ │ └── enterprise
│ │ ├── Deploy.kt
│ │ └── DeploymentPlugin.kt
│ └── test
│ └── java
│ └── com
│ └── enterprise
│ └── DeploymentPluginTest.kt
├── settings.gradle
├── subprojecto-one
│ └── build.gradle.kts
└── subproject-two
└── build.gradle.kts
接下来我们在Depoly.kt文件下编写一个版本控制代码:
object Deploy{
const val app_version="1.0.0"
}
紧接着在build.gradle引用我们编写的版本控制代码
defaultConfig {
applicationId "com.example.learnproject"
minSdk 24
targetSdk 32
versionCode 1
versionName Deploy.app_version
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
这样我们就把versionName的版本号给抽离了出来,当然你也可以把其他的给抽离出来比如 minSdk,targetSdk等等。
当然我们也可以把依赖给抽离出来,在Deploy文件中创建一个Dependencies对象,然后添加我们需要的依赖如下:
object Versions{
object AndroidX{
const val annotation = "1.1.0"
}
}
object Dependencies {
const val androidx_annotation = "androidx.annotation:annotation:${Versions.AndroidX.annotation}"
}
然后在build.gralde的dependenices中使用:
implementation Dependencies.androidx_annotation
至此关于使用gradle中buildSrc来抽象命令式逻辑使得你的Android项目更加的清晰,易于管理。
(记录一个错误代码,当没有在buildSrc目录下创建build.gradle文件,就编写依赖并使用的情况下会出现一个属性未找到的错误,经排查应该是gradle执行的时候没有关联上,解决办法:去项目目录删除.grdle,buildSrc目录,重新同步项目---->创建buildSrc---->创建build.gradle--->同上代码并同步项目)