From 625843564560dc0611173526a2465db344da0b56 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Wed, 16 Mar 2022 17:20:43 +0800 Subject: [PATCH] Refine gradle script (#1765) --- app/build.gradle.kts | 67 +------------ build.gradle.kts | 153 ++++++++++++++++++++++++++++++ core/build.gradle.kts | 107 +-------------------- daemon-service/build.gradle.kts | 2 +- daemon/build.gradle.kts | 114 +--------------------- hiddenapi/bridge/build.gradle.kts | 2 +- settings.gradle.kts | 2 + 7 files changed, 166 insertions(+), 281 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a1cd342a..17835e26 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -18,25 +18,14 @@ */ import com.android.build.gradle.internal.dsl.BuildType -import java.nio.file.Paths import java.time.Instant plugins { - id("com.android.application") id("androidx.navigation.safeargs") id("dev.rikka.tools.autoresconfig") } -val androidTargetSdkVersion: Int by rootProject.extra -val androidMinSdkVersion: Int by rootProject.extra -val androidBuildToolsVersion: String by rootProject.extra -val androidCompileSdkVersion: Int by rootProject.extra -val androidCompileNdkVersion: String by rootProject.extra -val androidSourceCompatibility: JavaVersion by rootProject.extra -val androidTargetCompatibility: JavaVersion by rootProject.extra val defaultManagerPackageName: String by rootProject.extra -val verCode: Int by rootProject.extra -val verName: String by rootProject.extra val androidStoreFile: String? by rootProject val androidStorePassword: String? by rootProject @@ -44,10 +33,6 @@ val androidKeyAlias: String? by rootProject val androidKeyPassword: String? by rootProject android { - compileSdk = androidCompileSdkVersion - ndkVersion = androidCompileNdkVersion - buildToolsVersion = androidBuildToolsVersion - buildFeatures { viewBinding = true buildConfig = true @@ -55,24 +40,9 @@ android { defaultConfig { applicationId = defaultManagerPackageName - minSdk = androidMinSdkVersion - targetSdk = androidTargetSdkVersion - versionCode = verCode - versionName = verName buildConfigField("long", "BUILD_TIME", Instant.now().epochSecond.toString()) } - compileOptions { - targetCompatibility(androidTargetCompatibility) - sourceCompatibility(androidSourceCompatibility) - } - - lint { - disable += "MissingTranslation" - abortOnError = true - checkReleaseBuilds = false - } - packagingOptions { resources { excludes += "META-INF/**" @@ -128,41 +98,6 @@ autoResConfig { generatedArrayFirstItem.set("SYSTEM") } -val optimizeReleaseRes = task("optimizeReleaseRes").doLast { - val aapt2 = File( - androidComponents.sdkComponents.sdkDirectory.get().asFile, - "build-tools/${androidBuildToolsVersion}/aapt2" - ) - val zip = Paths.get( - project.buildDir.path, - "intermediates", - "optimized_processed_res", - "release", - "resources-release-optimize.ap_" - ) - val optimized = File("${zip}.opt") - val cmd = exec { - commandLine( - aapt2, "optimize", - "--collapse-resource-names", - "--enable-sparse-encoding", - "-o", optimized, - zip - ) - isIgnoreExitValue = false - } - if (cmd.exitValue == 0) { - delete(zip) - optimized.renameTo(zip.toFile()) - } -} - -tasks.whenTaskAdded { - if (name == "optimizeReleaseResources") { - finalizedBy(optimizeReleaseRes) - } -} - dependencies { val glideVersion = "4.13.1" val navVersion: String by project @@ -195,7 +130,7 @@ dependencies { implementation("dev.rikka.rikkax.layoutinflater:layoutinflater:1.2.0") implementation("me.zhanghai.android.appiconloader:appiconloader:1.3.1") implementation("org.lsposed.hiddenapibypass:hiddenapibypass:4.3") - implementation(project(":manager-service")) + implementation(projects.managerService) val appCenter = "4.4.2" debugImplementation("com.microsoft.appcenter:appcenter-crashes:${appCenter}") diff --git a/build.gradle.kts b/build.gradle.kts index d71d5f54..41cdd95a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,9 +16,18 @@ * * Copyright (C) 2021 LSPosed Contributors */ +import com.android.build.api.variant.ApplicationAndroidComponentsExtension +import com.android.build.gradle.BaseExtension import org.eclipse.jgit.api.Git import org.eclipse.jgit.internal.storage.file.FileRepository +plugins { + id("com.android.application") apply false + id("com.android.library") apply false + id("androidx.navigation.safeargs") apply false + id("dev.rikka.tools.autoresconfig") apply false +} + buildscript { repositories { google() @@ -51,3 +60,147 @@ val androidTargetCompatibility by extra(JavaVersion.VERSION_11) tasks.register("Delete", Delete::class) { delete(rootProject.buildDir) } + +subprojects { + when (path) { + ":app", ":core", ":daemon" -> apply(plugin = "com.android.application") + ":daemon-servie", ":manager-service", ":interface", ":service" -> apply(plugin = "com.android.library") + } + extensions.findByType(BaseExtension::class)?.run { + compileSdkVersion(androidCompileSdkVersion) + ndkVersion = androidCompileNdkVersion + buildToolsVersion = androidBuildToolsVersion + + defaultConfig { + minSdk = androidMinSdkVersion + targetSdk = androidTargetSdkVersion + versionCode = verCode + versionName = verName + + externalNativeBuild { + cmake { + arguments += "-DEXTERNAL_ROOT=${File(rootDir.absolutePath, "external")}" + abiFilters("arm64-v8a", "armeabi-v7a", "x86", "x86_64") + val flags = arrayOf( + "-Wall", + "-Qunused-arguments", + "-Wno-gnu-string-literal-operator-template", + "-fno-rtti", + "-fvisibility=hidden", + "-fvisibility-inlines-hidden", + "-fno-exceptions", + "-fno-stack-protector", + "-fomit-frame-pointer", + "-Wno-builtin-macro-redefined", + "-Wno-unused-value", + "-D__FILE__=__FILE_NAME__", + "-DINJECTED_AID=$injectedPackageUid", + ) + cppFlags("-std=c++20", *flags) + cFlags("-std=c18", *flags) + arguments( + "-DANDROID_STL=none", + "-DVERSION_CODE=$verCode", + "-DVERSION_NAME=$verName", + ) + } + } + } + + (this as? com.android.build.api.dsl.ApplicationExtension)?.run { + lint { + abortOnError = true + checkReleaseBuilds = false + } + } + + compileOptions { + targetCompatibility(androidTargetCompatibility) + sourceCompatibility(androidSourceCompatibility) + } + + buildTypes { + named("debug") { + externalNativeBuild { + cmake { + arguments.addAll( + arrayOf( + "-DCMAKE_CXX_FLAGS_DEBUG=-Og", + "-DCMAKE_C_FLAGS_DEBUG=-Og", + ) + ) + } + } + } + named("release") { + externalNativeBuild { + cmake { + val flags = arrayOf( + "-Wl,--exclude-libs,ALL", + "-ffunction-sections", + "-fdata-sections", + "-Wl,--gc-sections", + "-fno-unwind-tables", + "-fno-asynchronous-unwind-tables", + "-flto=thin", + "-Wl,--thinlto-cache-policy,cache_size_bytes=300m", + "-Wl,--thinlto-cache-dir=${buildDir.absolutePath}/.lto-cache", + ) + cppFlags.addAll(flags) + cFlags.addAll(flags) + val configFlags = arrayOf( + "-Oz", + "-DNDEBUG" + ).joinToString(" ") + arguments.addAll( + arrayOf( + "-DCMAKE_CXX_FLAGS_RELEASE=$configFlags", + "-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=$configFlags", + "-DCMAKE_C_FLAGS_RELEASE=$configFlags", + "-DCMAKE_C_FLAGS_RELWITHDEBINFO=$configFlags", + "-DDEBUG_SYMBOLS_PATH=${buildDir.absolutePath}/symbols", + ) + ) + } + } + } + } + + } + extensions.findByType(ApplicationAndroidComponentsExtension::class)?.let { androidComponents -> + val optimizeReleaseRes = task("optimizeReleaseRes").doLast { + val aapt2 = File( + androidComponents.sdkComponents.sdkDirectory.get().asFile, + "build-tools/${androidBuildToolsVersion}/aapt2" + ) + val zip = java.nio.file.Paths.get( + project.buildDir.path, + "intermediates", + "optimized_processed_res", + "release", + "resources-release-optimize.ap_" + ) + val optimized = File("${zip}.opt") + val cmd = exec { + commandLine( + aapt2, "optimize", + "--collapse-resource-names", + "--enable-sparse-encoding", + "-o", optimized, + zip + ) + isIgnoreExitValue = false + } + if (cmd.exitValue == 0) { + delete(zip) + optimized.renameTo(zip.toFile()) + } + } + + tasks.whenTaskAdded { + if (name == "optimizeReleaseResources") { + finalizedBy(optimizeReleaseRes) + } + } + } +} diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 9b8f7c51..1f749123 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -45,19 +45,7 @@ val apiCode: Int by rootProject.extra val verCode: Int by rootProject.extra val verName: String by rootProject.extra -val androidTargetSdkVersion: Int by rootProject.extra -val androidMinSdkVersion: Int by rootProject.extra -val androidBuildToolsVersion: String by rootProject.extra -val androidCompileSdkVersion: Int by rootProject.extra -val androidCompileNdkVersion: String by rootProject.extra -val androidSourceCompatibility: JavaVersion by rootProject.extra -val androidTargetCompatibility: JavaVersion by rootProject.extra - android { - compileSdk = androidCompileSdkVersion - ndkVersion = androidCompileNdkVersion - buildToolsVersion = androidBuildToolsVersion - flavorDimensions += "api" buildFeatures { @@ -66,42 +54,8 @@ android { defaultConfig { applicationId = "org.lsposed.lspd" - minSdk = androidMinSdkVersion - targetSdk = androidTargetSdkVersion - versionCode = verCode - versionName = verName multiDexEnabled = false - externalNativeBuild { - cmake { - arguments += "-DEXTERNAL_ROOT=${File(rootDir.absolutePath, "external")}" - abiFilters("arm64-v8a", "armeabi-v7a", "x86", "x86_64") - val flags = arrayOf( - "-Wall", - "-Qunused-arguments", - "-Wno-gnu-string-literal-operator-template", - "-fno-rtti", - "-fvisibility=hidden", - "-fvisibility-inlines-hidden", - "-fno-exceptions", - "-fno-stack-protector", - "-fomit-frame-pointer", - "-Wno-builtin-macro-redefined", - "-Wno-unused-value", - "-D__FILE__=__FILE_NAME__", - "-DINJECTED_AID=$injectedPackageUid", - ) - cppFlags("-std=c++20", *flags) - cFlags("-std=c18", *flags) - arguments( - "-DANDROID_STL=none", - "-DVERSION_CODE=$verCode", - "-DVERSION_NAME=$verName", - ) - targets("lspd") - } - } - buildConfigField("int", "API_CODE", "$apiCode") buildConfigField( "String", @@ -112,58 +66,10 @@ android { buildConfigField("int", "MANAGER_INJECTED_UID", """$injectedPackageUid""") } - lint { - abortOnError = true - checkReleaseBuilds = false - } - buildTypes { - debug { - externalNativeBuild { - cmake { - arguments.addAll( - arrayOf( - "-DCMAKE_CXX_FLAGS_DEBUG=-Og", - "-DCMAKE_C_FLAGS_DEBUG=-Og", - ) - ) - } - } - } release { isMinifyEnabled = true proguardFiles("proguard-rules.pro") - - externalNativeBuild { - cmake { - val flags = arrayOf( - "-Wl,--exclude-libs,ALL", - "-ffunction-sections", - "-fdata-sections", - "-Wl,--gc-sections", - "-fno-unwind-tables", - "-fno-asynchronous-unwind-tables", - "-flto=thin", - "-Wl,--thinlto-cache-policy,cache_size_bytes=300m", - "-Wl,--thinlto-cache-dir=${buildDir.absolutePath}/.lto-cache", - ) - cppFlags.addAll(flags) - cFlags.addAll(flags) - val configFlags = arrayOf( - "-Oz", - "-DNDEBUG" - ).joinToString(" ") - arguments.addAll( - arrayOf( - "-DCMAKE_CXX_FLAGS_RELEASE=$configFlags", - "-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=$configFlags", - "-DCMAKE_C_FLAGS_RELEASE=$configFlags", - "-DCMAKE_C_FLAGS_RELWITHDEBINFO=$configFlags", - "-DDEBUG_SYMBOLS_PATH=${buildDir.absolutePath}/symbols", - ) - ) - } - } } } @@ -173,11 +79,6 @@ android { } } - compileOptions { - targetCompatibility(androidTargetCompatibility) - sourceCompatibility(androidSourceCompatibility) - } - productFlavors { all { externalNativeBuild { @@ -215,10 +116,10 @@ dependencies { implementation("org.apache.commons:commons-lang3:3.12.0") implementation("de.upb.cs.swt:axml:2.1.2") compileOnly("androidx.annotation:annotation:1.3.0") - compileOnly(project(":hiddenapi:stubs")) - implementation(project(":hiddenapi:bridge")) - implementation(project(":manager-service")) - implementation(project(":daemon-service")) + compileOnly(projects.hiddenapi.stubs) + implementation(projects.hiddenapi.bridge) + implementation(projects.managerService) + implementation(projects.daemonService) } val zipAll = task("zipAll") { diff --git a/daemon-service/build.gradle.kts b/daemon-service/build.gradle.kts index cbf41d90..29cf01b1 100644 --- a/daemon-service/build.gradle.kts +++ b/daemon-service/build.gradle.kts @@ -53,5 +53,5 @@ android { } dependencies { - compileOnly(project(":hiddenapi:stubs")) + compileOnly(projects.hiddenapi.stubs) } diff --git a/daemon/build.gradle.kts b/daemon/build.gradle.kts index 4e29d7c2..1cf3f4e2 100644 --- a/daemon/build.gradle.kts +++ b/daemon/build.gradle.kts @@ -22,12 +22,6 @@ import com.android.ide.common.signing.KeystoreHelper import java.io.PrintStream import java.util.* -plugins { - id("com.android.application") - id("androidx.navigation.safeargs") - id("dev.rikka.tools.autoresconfig") -} - val daemonName = "LSPosed" val injectedPackageName: String by rootProject.extra @@ -37,33 +31,14 @@ val agpVersion : String by project val defaultManagerPackageName: String by rootProject.extra val apiCode: Int by rootProject.extra -val verCode: Int by rootProject.extra -val verName: String by rootProject.extra - -val androidTargetSdkVersion: Int by rootProject.extra -val androidMinSdkVersion: Int by rootProject.extra -val androidBuildToolsVersion: String by rootProject.extra -val androidCompileSdkVersion: Int by rootProject.extra -val androidCompileNdkVersion: String by rootProject.extra -val androidSourceCompatibility: JavaVersion by rootProject.extra -val androidTargetCompatibility: JavaVersion by rootProject.extra android { - compileSdk = androidCompileSdkVersion - ndkVersion = androidCompileNdkVersion - buildToolsVersion = androidBuildToolsVersion - buildFeatures { prefab = true } defaultConfig { applicationId = "org.lsposed.daemon" - minSdk = androidMinSdkVersion - targetSdk = androidTargetSdkVersion - versionCode = verCode - versionName = verName - multiDexEnabled = false buildConfigField("int", "API_CODE", "$apiCode") buildConfigField( @@ -75,58 +50,10 @@ android { buildConfigField("int", "MANAGER_INJECTED_UID", """$injectedPackageUid""") } - lint { - abortOnError = true - checkReleaseBuilds = false - } - buildTypes { - debug { - externalNativeBuild { - cmake { - arguments.addAll( - arrayOf( - "-DCMAKE_CXX_FLAGS_DEBUG=-Og", - "-DCMAKE_C_FLAGS_DEBUG=-Og" - ) - ) - } - } - } release { isMinifyEnabled = true proguardFiles("proguard-rules.pro") - - externalNativeBuild { - cmake { - val flags = arrayOf( - "-Wl,--exclude-libs,ALL", - "-ffunction-sections", - "-fdata-sections", - "-Wl,--gc-sections", - "-fno-unwind-tables", - "-fno-asynchronous-unwind-tables", - "-flto=thin", - "-Wl,--thinlto-cache-policy,cache_size_bytes=300m", - "-Wl,--thinlto-cache-dir=${buildDir.absolutePath}/.lto-cache", - ) - cppFlags.addAll(flags) - cFlags.addAll(flags) - val configFlags = arrayOf( - "-Oz", - "-DNDEBUG" - ).joinToString(" ") - arguments.addAll( - arrayOf( - "-DCMAKE_CXX_FLAGS_RELEASE=$configFlags", - "-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=$configFlags", - "-DCMAKE_C_FLAGS_RELEASE=$configFlags", - "-DCMAKE_C_FLAGS_RELWITHDEBINFO=$configFlags", - "-DDEBUG_SYMBOLS_PATH=${buildDir.absolutePath}/symbols", - ) - ) - } - } } } @@ -136,39 +63,6 @@ android { } } - compileOptions { - targetCompatibility(androidTargetCompatibility) - sourceCompatibility(androidSourceCompatibility) - } - - defaultConfig { - externalNativeBuild { - cmake { - arguments += "-DEXTERNAL_ROOT=${File(rootDir.absolutePath, "external")}" - abiFilters("arm64-v8a", "armeabi-v7a", "x86", "x86_64") - val flags = arrayOf( - "-Wall", - "-Werror", - "-Qunused-arguments", - "-Wno-gnu-string-literal-operator-template", - "-fno-rtti", - "-fvisibility=hidden", - "-fvisibility-inlines-hidden", - "-fno-exceptions", - "-fno-stack-protector", - "-fomit-frame-pointer", - "-Wno-builtin-macro-redefined", - "-Wno-unused-value", - "-D__FILE__=__FILE_NAME__", - ) - cppFlags("-std=c++20", *flags) - cFlags("-std=c18", *flags) - arguments("-DANDROID_STL=none") - targets("daemon") - } - } - } - sourceSets { named("main") { res { @@ -223,8 +117,8 @@ dependencies { implementation("com.android.tools.build:apksig:$agpVersion") implementation("org.apache.commons:commons-lang3:3.12.0") compileOnly("androidx.annotation:annotation:1.3.0") - compileOnly(project(":hiddenapi:stubs")) - implementation(project(":hiddenapi:bridge")) - implementation(project(":daemon-service")) - implementation(project(":manager-service")) + compileOnly(projects.hiddenapi.stubs) + implementation(projects.hiddenapi.bridge) + implementation(projects.daemonService) + implementation(projects.managerService) } diff --git a/hiddenapi/bridge/build.gradle.kts b/hiddenapi/bridge/build.gradle.kts index 92d05a6e..72b25486 100644 --- a/hiddenapi/bridge/build.gradle.kts +++ b/hiddenapi/bridge/build.gradle.kts @@ -22,5 +22,5 @@ plugins { } dependencies { - compileOnly(project(":hiddenapi:stubs")) + compileOnly(projects.hiddenapi.stubs) } diff --git a/settings.gradle.kts b/settings.gradle.kts index 74f8fd3a..8e3934ef 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,3 +1,5 @@ +enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") + pluginManagement { val navVersion: String by settings val agpVersion: String by settings