buildscript { repositories { google() mavenCentral() maven { url 'https://jitpack.io' } // 混淆 maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' } maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' } maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' } maven { url 'https://maven.aliyun.com/nexus/content/repositories/gradle-plugin' } } dependencies { classpath "com.github.CodingGay:BlackObfuscator-ASPlugin:3.9" classpath 'com.github.Petterpx.walle:plugin:1.0.5' } } allprojects { repositories { google() mavenCentral() maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' } maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' } maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' } maven { url 'https://maven.aliyun.com/nexus/content/repositories/gradle-plugin' } } } rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } def ensureAndroidNamespace = { project -> def androidExtension = project.extensions.findByName("android") if (androidExtension == null || !androidExtension.hasProperty("namespace") || androidExtension.namespace != null) { return } def manifestFile = project.file("src/main/AndroidManifest.xml") if (manifestFile.exists()) { def manifestPackage = new XmlSlurper(false, false).parse(manifestFile).@package?.text() if (manifestPackage) { androidExtension.namespace = manifestPackage return } } if (project.group) { androidExtension.namespace = project.group.toString() } } def setLibraryCompileSdk = { project -> def androidExtension = project.extensions.findByName("android") if (androidExtension == null) { return } try { if (androidExtension.hasProperty("compileSdk")) { androidExtension.compileSdk = 36 } else if (androidExtension.hasProperty("compileSdkVersion")) { androidExtension.compileSdkVersion 36 } } catch (Exception ignored) { // AGP 已锁定 compileSdk,跳过;该模块用自己声明的值即可 } } def alignAndroidJvmTargets = { project -> def androidExtension = project.extensions.findByName("android") if (androidExtension == null) { return } try { if (androidExtension.hasProperty("compileOptions")) { androidExtension.compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } } } catch (Exception ignored) {} try { if (androidExtension.hasProperty("kotlinOptions")) { androidExtension.kotlinOptions { jvmTarget = JavaVersion.VERSION_17.toString() } } } catch (Exception ignored) {} } def finalizeAndroidAlignment = { project -> if (project.plugins.hasPlugin("com.android.application") || project.plugins.hasPlugin("com.android.library")) { ensureAndroidNamespace(project) alignAndroidJvmTargets(project) } // afterEvaluate 阶段再强制一次 library 的 compileSdk,覆盖个别老插件 // (如 flutter_custom_dialog 在自身 build.gradle 写死 compileSdkVersion 28) // 在 plugin apply 之后声明的低版本,否则配 Java 17 编译会报需 compileSdk≥30 if (project.plugins.hasPlugin("com.android.library")) { setLibraryCompileSdk(project) } } subprojects { plugins.withId("com.android.application") { ensureAndroidNamespace(project) // app 自己 build.gradle 已声明 compileSdk 36,这里不再重设(AGP 8.x 在 plugin apply 后会立即锁定 compileSdk) } plugins.withId("com.android.library") { ensureAndroidNamespace(project) setLibraryCompileSdk(project) } if (project.state.executed) { finalizeAndroidAlignment(project) } else { afterEvaluate { finalizeAndroidAlignment(project) } } project.evaluationDependsOn(':app') } tasks.register("clean", Delete) { delete rootProject.buildDir }