150 lines
6.7 KiB
Plaintext
150 lines
6.7 KiB
Plaintext
allprojects {
|
||
repositories {
|
||
// 优先使用阿里云镜像(国内访问更快)
|
||
maven { url = uri("https://maven.aliyun.com/repository/public") }
|
||
maven { url = uri("https://maven.aliyun.com/repository/google") }
|
||
maven { url = uri("https://maven.aliyun.com/repository/central") }
|
||
maven { url = uri("https://maven.aliyun.com/repository/gradle-plugin") }
|
||
// 备用:官方仓库
|
||
google()
|
||
mavenCentral()
|
||
gradlePluginPortal()
|
||
}
|
||
// 固定 rtc_room_engine 版本,避免解析 3.6.+ 时去 JitPack 拉 maven-metadata 导致 Read timed out(服务器网络)
|
||
// 该依赖在 Maven Central 有 3.6.x,用固定版本后从阿里云/中央仓库解析即可
|
||
configurations.all {
|
||
resolutionStrategy {
|
||
force("io.trtc.uikit:rtc_room_engine:3.6.4.104")
|
||
}
|
||
}
|
||
}
|
||
|
||
buildscript {
|
||
repositories {
|
||
// 优先使用阿里云镜像(国内访问更快)
|
||
maven { url = uri("https://maven.aliyun.com/repository/public") }
|
||
maven { url = uri("https://maven.aliyun.com/repository/google") }
|
||
maven { url = uri("https://maven.aliyun.com/repository/central") }
|
||
maven { url = uri("https://maven.aliyun.com/repository/gradle-plugin") }
|
||
// 备用:官方仓库
|
||
google()
|
||
mavenCentral()
|
||
gradlePluginPortal()
|
||
}
|
||
dependencies {
|
||
// Google Play Services / Firebase 已移除,不再需要 google-services
|
||
}
|
||
}
|
||
|
||
val newBuildDir: Directory =
|
||
rootProject.layout.buildDirectory
|
||
.dir("../../build")
|
||
.get()
|
||
rootProject.layout.buildDirectory.value(newBuildDir)
|
||
|
||
subprojects {
|
||
val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name)
|
||
project.layout.buildDirectory.value(newSubprojectBuildDir)
|
||
}
|
||
subprojects {
|
||
project.evaluationDependsOn(":app")
|
||
|
||
// 为所有缺少 namespace 的 Android 库项目自动设置 namespace(解决 AGP 8.x 要求)
|
||
// 使用 whenPluginAdded 在插件应用时立即配置
|
||
project.plugins.whenPluginAdded {
|
||
if (this is com.android.build.gradle.LibraryPlugin) {
|
||
// 在插件应用时立即配置,不要延迟到 afterEvaluate
|
||
try {
|
||
project.extensions.configure<com.android.build.gradle.LibraryExtension>("android") {
|
||
// 检查 namespace 是否已设置
|
||
val currentNamespace = try {
|
||
this::class.java.getDeclaredField("namespace").apply { isAccessible = true }.get(this) as? String
|
||
} catch (e: Exception) {
|
||
null
|
||
}
|
||
|
||
if (currentNamespace.isNullOrBlank()) {
|
||
// 尝试从 AndroidManifest.xml 读取 package 作为 namespace
|
||
val manifestFile = project.file("src/main/AndroidManifest.xml")
|
||
val namespaceValue = if (manifestFile.exists()) {
|
||
try {
|
||
val manifestContent = manifestFile.readText()
|
||
val packageMatch = Regex("package=\"([^\"]+)\"").find(manifestContent)
|
||
packageMatch?.groupValues?.get(1)
|
||
} catch (e: Exception) {
|
||
null
|
||
}
|
||
} else {
|
||
null
|
||
}
|
||
|
||
// 如果从 manifest 读取失败,根据项目名称设置默认值
|
||
val finalNamespace = namespaceValue ?: when {
|
||
project.name.contains("flutter_openim_sdk", ignoreCase = true) -> "io.openim.flutter.openim_sdk"
|
||
project.name.contains("flutter_openim", ignoreCase = true) -> "io.openim.flutter.${project.name.replace("-", "_")}"
|
||
else -> null
|
||
}
|
||
|
||
if (finalNamespace != null) {
|
||
namespace = finalNamespace
|
||
println("已为 ${project.name} 设置 namespace: $finalNamespace")
|
||
}
|
||
}
|
||
}
|
||
} catch (e: Exception) {
|
||
// 如果扩展还不存在,忽略错误
|
||
println("警告: 无法为 ${project.name} 配置 namespace: ${e.message}")
|
||
}
|
||
}
|
||
}
|
||
|
||
// 双重保险:也尝试使用 withId(适用于插件已应用的情况)
|
||
project.plugins.withId("com.android.library") {
|
||
try {
|
||
project.extensions.configure<com.android.build.gradle.LibraryExtension>("android") {
|
||
// 检查 namespace 是否已设置
|
||
val currentNamespace = try {
|
||
this::class.java.getDeclaredField("namespace").apply { isAccessible = true }.get(this) as? String
|
||
} catch (e: Exception) {
|
||
null
|
||
}
|
||
|
||
if (currentNamespace.isNullOrBlank()) {
|
||
// 尝试从 AndroidManifest.xml 读取 package 作为 namespace
|
||
val manifestFile = project.file("src/main/AndroidManifest.xml")
|
||
val namespaceValue = if (manifestFile.exists()) {
|
||
try {
|
||
val manifestContent = manifestFile.readText()
|
||
val packageMatch = Regex("package=\"([^\"]+)\"").find(manifestContent)
|
||
packageMatch?.groupValues?.get(1)
|
||
} catch (e: Exception) {
|
||
null
|
||
}
|
||
} else {
|
||
null
|
||
}
|
||
|
||
// 如果从 manifest 读取失败,根据项目名称设置默认值
|
||
val finalNamespace = namespaceValue ?: when {
|
||
project.name.contains("flutter_openim_sdk", ignoreCase = true) -> "io.openim.flutter.openim_sdk"
|
||
project.name.contains("flutter_openim", ignoreCase = true) -> "io.openim.flutter.${project.name.replace("-", "_")}"
|
||
else -> null
|
||
}
|
||
|
||
if (finalNamespace != null) {
|
||
namespace = finalNamespace
|
||
println("已为 ${project.name} 设置 namespace (withId): $finalNamespace")
|
||
}
|
||
}
|
||
}
|
||
} catch (e: Exception) {
|
||
// 如果扩展还不存在,忽略错误
|
||
println("警告: 无法为 ${project.name} 配置 namespace (withId): ${e.message}")
|
||
}
|
||
}
|
||
}
|
||
|
||
tasks.register<Delete>("clean") {
|
||
delete(rootProject.layout.buildDirectory)
|
||
}
|