Gradle 学习记录
目录
Gradle官方介绍
Android Gradle 插件版本
命令
- 查看gradle版本
gradlew -v
- 查看task
gradle help --task
- 查看项目接口
gradle -q projects
Android SDK VERSION CODE
Android Studio gradle
mirror#
- gradle wrapper:
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.0-bin.zip
- repo : init.gradle.kts
viewBinding#
buildFeatures {
viewBinding = true
dataBinding = true
compose = true
}
aar#
repositories {
google()
mavenCentral()
flatDir {
dirs 'libs'
}
}
implementation(name: 'aar-name', ext: 'aar')
//全部依赖
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
manifest&buildFieldConfig#
android {
// For settings specific to a product flavor, configure these properties
// for each flavor in the productFlavors block.
defaultConfig {
// Creates a property for the FileProvider authority.
def filesAuthorityValue = applicationId + ".files"
// Creates a placeholder property to use in the manifest.
manifestPlaceholders =
[filesAuthority: filesAuthorityValue]
// Adds a new field for the authority to the BuildConfig class.
buildConfigField("String",
"FILES_AUTHORITY",
"\"${filesAuthorityValue}\"")
}
...
}
...
methods#
buildConfigStringField("CODE_BRANCH" to execCommand("git branch --show-current"))
buildConfigStringField("CODE_COMMIT" to execCommand("git rev-parse --short HEAD"))
buildConfigStringField("BUILD_TIME" to getCurrentTime())
fun execCommand(cmd: String, params: List<String> = emptyList()): String {
return try {
val sb = StringBuilder()
val process = if (params.isEmpty()) {
Runtime.getRuntime().exec(cmd)
} else {
Runtime.getRuntime().exec(cmd, params.toTypedArray())
}
process.waitFor()
val readText = process.inputStream.bufferedReader().readText()
sb.append(readText)
sb.toString().trim().replace("\r", "").replace("\n", "")
} catch (e: Exception) {
e.message ?: ""
}
}
fun ApplicationDefaultConfig.buildConfigStringField(pair: Pair<String, String>) {
buildConfigField("String", pair.first, "\"${pair.second}\"")
}
fun getCurrentTime(): String {
val sdf = SimpleDateFormat("yyyy-MM-dd_HH-mm-ss")
return sdf.format(Date())
}
RepositoriesMode
Build was configured to prefer settings repositories over project repositories but repository 'Gradle Libs' was added by unknown code
gradle7.0后android studio会自动生成以下代码
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
这会导致其他模块不能声明repository包括依赖gradleApi(),build直接失败,可改成RepositoriesMode.PREFER_SETTINGS解决。
重命名
app
applicationVariants.all {
outputs.all {
this as com.android.build.gradle.api.ApkVariantOutput
val releaseTime = SimpleDateFormat("yyyyMMddHHmm", Locale.US).format(Date())
outputFileName =
"$dirName/${rootProject.name}_${name}_${versionName}_${releaseTime}.apk"
}
}
library
- kts
libraryVariants.all {
outputs.all {
this as com.android.build.gradle.internal.api.BaseVariantOutputImpl
outputFileName = "${project.name}-${this.name}-${version}.aar"
}
}
- groovy
libraryVariants.all { v ->
outputs.all {
outputFileName = "${project.name}-${v.name}-${project.version}.aar"
}
}
Task
从Android Library导出Jar#
task exportJar(type: Copy) {
def name = "record-aidl.jar"
group("build")
//删除存在的
delete 'build/libs/$name'
//设置拷贝的文件
from('build/intermediates/aar_main_jar/release/')
//打进jar包后的文件目录
into('build/libs/')
//将classes.jar放入build/libs/目录下
//include ,exclude参数来设置过滤
include('classes.jar')
//重命名
rename ('classes.jar', "$name")
}
exportJar.dependsOn(build)
Copy aar to root dir#
afterEvaluate {
task copyAAR(type: Copy) {
doFirst {
new File(rootDir, "aar/sdk").listFiles().each {
delete(it.absolutePath)
}
logger.lifecycle("-------clear aar/sdk")
}
def source = layout.buildDirectory.dir("outputs/aar").get().asFile
from(source)
include("*.aar")
destinationDir = new File(rootDir, "aar/sdk")
}
preBuild.doFirst {
new File(project.buildDir, "outputs/aar").listFiles().each {
logger.lifecycle("delete-------${it.absolutePath}")
delete(it.absolutePath)
}
}
// preBuild.dependsOn(clean)
assemble.finalizedBy(copyAAR)
}
Maven
mavenLocal路径:C:\Users\userName.m2\repository
maven发布
plugins {
id("com.android.library")
kotlin("android")
id("maven-publish")
}
group = "io.github.eldenmango"
version = "1.0.0"
afterEvaluate {
publishing {
repositories {
}
publications {
create("release", MavenPublication::class.java) {
from(components["debug"])
groupId = "$group"
artifactId = "lib-device-info"
this.version = "${project.version}"
}
}
}
}
其他
- Android Studio远程库存放目录C:\Users\USERNAME.gradle\caches\modules-2\files-2.1
作者:徐影魔
出处:https://www.cnblogs.com/xunevermore/p/15931059.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】