diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 271aae19..0e8520d4 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -19,21 +19,25 @@ import java.time.Instant +@Suppress("DSL_SCOPE_VIOLATION") plugins { - id("com.android.application") - id("androidx.navigation.safeargs") - id("dev.rikka.tools.autoresconfig") - id("dev.rikka.tools.materialthemebuilder") - id("org.lsposed.lsplugin.resopt") + alias(libs.plugins.agp.app) + alias(libs.plugins.nav.safeargs) + alias(libs.plugins.autoresconfig) + alias(libs.plugins.materialthemebuilder) + alias(libs.plugins.lsplugin.resopt) + alias(libs.plugins.lsplugin.apksign) +} + +apksign { + storeFileProperty = "androidStoreFile" + storePasswordProperty = "androidStorePassword" + keyAliasProperty = "androidKeyAlias" + keyPasswordProperty = "androidKeyPassword" } val defaultManagerPackageName: String by rootProject.extra -val androidStoreFile: String? by rootProject -val androidStorePassword: String? by rootProject -val androidKeyAlias: String? by rootProject -val androidKeyPassword: String? by rootProject - android { buildFeatures { viewBinding = true @@ -58,29 +62,11 @@ android { dependenciesInfo.includeInApk = false - signingConfigs { - create("config") { - androidStoreFile?.also { - storeFile = rootProject.file(it) - storePassword = androidStorePassword - keyAlias = androidKeyAlias - keyPassword = androidKeyPassword - } - } - } - buildTypes { - signingConfigs.named("config").get().also { - debug { - if (it.storeFile?.exists() == true) signingConfig = it - } - release { - signingConfig = if (it.storeFile?.exists() == true) it - else signingConfigs.named("debug").get() - isMinifyEnabled = true - isShrinkResources = true - proguardFiles("proguard-rules.pro") - } + release { + isMinifyEnabled = true + isShrinkResources = true + proguardFiles("proguard-rules.pro") } } @@ -137,46 +123,41 @@ materialThemeBuilder { } dependencies { - val glideVersion = "4.15.0" - val navVersion: String by project - val kotlinVersion: String by project - annotationProcessor("com.github.bumptech.glide:compiler:$glideVersion") - implementation("androidx.activity:activity:1.6.1") - implementation("androidx.browser:browser:1.4.0") - implementation("androidx.constraintlayout:constraintlayout:2.1.4") - implementation("androidx.core:core:1.9.0") - implementation("androidx.fragment:fragment:1.5.5") - implementation("androidx.navigation:navigation-fragment:$navVersion") - implementation("androidx.navigation:navigation-ui:$navVersion") - implementation("androidx.preference:preference:1.2.0") - implementation("androidx.recyclerview:recyclerview:1.2.1") - implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01") - implementation("com.github.bumptech.glide:glide:$glideVersion") - implementation("com.google.android.material:material:1.8.0") - implementation("com.google.code.gson:gson:2.10.1") - implementation(platform("com.squareup.okhttp3:okhttp-bom:4.10.0")) - implementation("com.squareup.okhttp3:okhttp") - implementation("com.squareup.okhttp3:okhttp-dnsoverhttps") - implementation("com.squareup.okhttp3:logging-interceptor") - implementation("dev.rikka.rikkax.appcompat:appcompat:1.5.0.1") - implementation("dev.rikka.rikkax.core:core:1.4.1") - implementation("dev.rikka.rikkax.insets:insets:1.3.0") - implementation("dev.rikka.rikkax.material:material:2.5.1") - implementation("dev.rikka.rikkax.material:material-preference:2.0.0") - implementation("dev.rikka.rikkax.preference:simplemenu-preference:1.0.3") - implementation("dev.rikka.rikkax.recyclerview:recyclerview-ktx:1.3.1") - implementation("dev.rikka.rikkax.widget:borderview:1.1.0") - implementation("dev.rikka.rikkax.widget:mainswitchbar:1.0.2") - implementation("dev.rikka.rikkax.layoutinflater:layoutinflater:1.2.0") - implementation("me.zhanghai.android.appiconloader:appiconloader:1.5.0") - implementation("org.lsposed.hiddenapibypass:hiddenapibypass:4.3") - implementation(kotlin("stdlib", kotlinVersion)) - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4") + annotationProcessor(libs.glide.compiler) + implementation(libs.androidx.activity) + implementation(libs.androidx.browser) + implementation(libs.androidx.constraintlayout) + implementation(libs.androidx.core) + implementation(libs.androidx.fragment) + implementation(libs.androidx.navigation.fragment) + implementation(libs.androidx.navigation.ui) + implementation(libs.androidx.preference) + implementation(libs.androidx.recyclerview) + implementation(libs.androidx.swiperefreshlayout) + implementation(libs.glide) + implementation(libs.material) + implementation(libs.gson) + implementation(libs.okhttp) + implementation(libs.okhttp.dnsoverhttps) + implementation(libs.okhttp.logging.interceptor) + implementation(libs.rikkax.appcompat) + implementation(libs.rikkax.core) + implementation(libs.rikkax.insets) + implementation(libs.rikkax.material) + implementation(libs.rikkax.material.preference) + implementation(libs.rikkax.preference) + implementation(libs.rikkax.recyclerview) + implementation(libs.rikkax.widget.borderview) + implementation(libs.rikkax.widget.mainswitchbar) + implementation(libs.rikkax.layoutinflater) + implementation(libs.appiconloader) + implementation(libs.hiddenapibypass) + implementation(libs.kotlin.stdlib) + implementation(libs.kotlinx.coroutines.core) implementation(projects.services.managerService) - val appCenter = "5.0.0" - debugImplementation("com.microsoft.appcenter:appcenter-crashes:${appCenter}") - debugImplementation("com.microsoft.appcenter:appcenter-analytics:${appCenter}") + debugImplementation(libs.appcenter.analytics) + debugImplementation(libs.appcenter.crashes) } configurations.all { diff --git a/build.gradle.kts b/build.gradle.kts index 1983fed7..2ee09b31 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -17,41 +17,46 @@ * Copyright (C) 2021 - 2022 LSPosed Contributors */ -import com.android.build.api.dsl.ApplicationExtension -import com.android.build.gradle.BaseExtension -import org.eclipse.jgit.api.Git -import org.eclipse.jgit.storage.file.FileRepositoryBuilder -import org.gradle.internal.os.OperatingSystem -import java.nio.file.Paths +import com.android.build.api.dsl.ApplicationDefaultConfig +import com.android.build.api.dsl.CommonExtension +import com.android.build.gradle.api.AndroidBasePlugin +@Suppress("DSL_SCOPE_VIOLATION") plugins { - id("com.android.application") apply false - id("com.android.library") apply false + alias(libs.plugins.lsplugin.cmaker) + alias(libs.plugins.lsplugin.jgit) + alias(libs.plugins.agp.lib) apply false + alias(libs.plugins.agp.app) apply false } -buildscript { - repositories { - google() - mavenCentral() +cmaker { + default { + arguments.addAll( + arrayOf( + "-DEXTERNAL_ROOT=${File(rootDir.absolutePath, "external")}", + "-DCORE_ROOT=${File(rootDir.absolutePath, "core/src/main/jni")}", + "-DANDROID_STL=none" + ) + ) + val flags = arrayOf( + "-DINJECTED_AID=$injectedPackageUid", + "-Wno-gnu-string-literal-operator-template", + "-Wno-c++2b-extensions", + ) + cFlags.addAll(flags) + cppFlags.addAll(flags) + abiFilters("arm64-v8a", "armeabi-v7a", "x86", "x86_64") } - dependencies { - classpath("org.eclipse.jgit:org.eclipse.jgit:6.4.0.202211300538-r") + buildTypes { + if (it.name == "release") { + arguments += "-DDEBUG_SYMBOLS_PATH=${buildDir.absolutePath}/symbols" + } } } -val (commitCount, latestTag) = FileRepositoryBuilder().setGitDir(rootProject.file(".git")) - .runCatching { - build().use { repo -> - val git = Git(repo) - val commitCount = - git.log() - .add(repo.refDatabase.exactRef("refs/remotes/origin/master").objectId) - .call().count() + 4200 - val ver = git.describe() - .setTags(true) - .setAbbrev(0).call().removePrefix("v") - commitCount to ver - } - }.getOrNull() ?: (1 to "1.0") + +val repo = jgit.repo() +val commitCount = repo?.commitCount("refs/remotes/origin/master") ?: 1 +val latestTag = repo?.latestTag ?: "1.0" val injectedPackageName by extra("com.android.shell") val injectedPackageUid by extra(2000) @@ -71,140 +76,43 @@ tasks.register("Delete", Delete::class) { delete(rootProject.buildDir) } -fun findInPath(executable: String): String? { - val pathEnv = System.getenv("PATH") - return pathEnv.split(File.pathSeparator).map { folder -> - Paths.get("${folder}${File.separator}${executable}${if (OperatingSystem.current().isWindows) ".exe" else ""}") - .toFile() - }.firstOrNull { path -> - path.exists() - }?.absolutePath -} - -fun Project.configureBaseExtension() { - extensions.findByType(BaseExtension::class)?.run { - compileSdkVersion(androidCompileSdkVersion) - ndkVersion = androidCompileNdkVersion - buildToolsVersion = androidBuildToolsVersion - - externalNativeBuild { - cmake { - version = "3.22.1+" - } - } - - defaultConfig { - minSdk = androidMinSdkVersion - targetSdk = androidTargetSdkVersion - versionCode = verCode - versionName = verName +subprojects { + plugins.withType(AndroidBasePlugin::class.java) { + extensions.configure(CommonExtension::class.java) { + compileSdk = androidCompileSdkVersion + ndkVersion = androidCompileNdkVersion + buildToolsVersion = androidBuildToolsVersion externalNativeBuild { cmake { - arguments += "-DEXTERNAL_ROOT=${File(rootDir.absolutePath, "external")}" - arguments += "-DCORE_ROOT=${File(rootDir.absolutePath, "core/src/main/jni")}" - 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=c2x", *flags) - arguments( - "-DANDROID_STL=none", - ) - findInPath("ccache")?.let { - println("Using ccache $it") - arguments += "-DANDROID_CCACHE=$it" - } + version = "3.22.1+" } } - } - compileOptions { - targetCompatibility(androidTargetCompatibility) - sourceCompatibility(androidSourceCompatibility) - } - - buildTypes { - named("debug") { - externalNativeBuild { - cmake { - arguments.addAll( - arrayOf( - "-DCMAKE_CXX_FLAGS_DEBUG=-Og", - "-DCMAKE_C_FLAGS_DEBUG=-Og", - ) - ) - } + defaultConfig { + minSdk = androidMinSdkVersion + if (this is ApplicationDefaultConfig) { + targetSdk = androidTargetSdkVersion + versionCode = verCode + versionName = verName } } - 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_BUILD_TYPE=Release", - "-DCMAKE_CXX_FLAGS_RELEASE=$configFlags", - "-DCMAKE_C_FLAGS_RELEASE=$configFlags", - "-DDEBUG_SYMBOLS_PATH=${buildDir.absolutePath}/symbols", - ) - ) - } - } + + lint { + abortOnError = true + checkReleaseBuilds = false + } + + compileOptions { + sourceCompatibility = androidSourceCompatibility + targetCompatibility = androidTargetCompatibility } } } - - extensions.findByType(ApplicationExtension::class)?.lint { - abortOnError = true - checkReleaseBuilds = false - } -} - -fun Project.configureJavaExtension() { - extensions.findByType(JavaPluginExtension::class.java)?.run { - sourceCompatibility = androidSourceCompatibility - targetCompatibility = androidTargetCompatibility - } -} - -subprojects { - plugins.withId("com.android.application") { - configureBaseExtension() - } - plugins.withId("com.android.library") { - configureBaseExtension() - } - plugins.withId("org.gradle.java-library") { - configureJavaExtension() + plugins.withType(JavaPlugin::class.java) { + extensions.configure(JavaPluginExtension::class.java) { + sourceCompatibility = androidSourceCompatibility + targetCompatibility = androidTargetCompatibility + } } } diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 85f92534..715adfb1 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -20,8 +20,9 @@ val verName: String by rootProject.extra val verCode: Int by rootProject.extra +@Suppress("DSL_SCOPE_VIOLATION") plugins { - id("com.android.library") + alias(libs.plugins.agp.lib) } android { @@ -55,12 +56,12 @@ copy { } dependencies { - api("io.github.libxposed:api:100") - implementation("org.apache.commons:commons-lang3:3.12.0") - implementation("de.upb.cs.swt:axml:2.1.3") - compileOnly("androidx.annotation:annotation:1.5.0") - compileOnly(projects.hiddenapi.stubs) + api(libs.libxposed.api) + implementation(libs.commons.lang3) + implementation(libs.axml) implementation(projects.hiddenapi.bridge) implementation(projects.services.daemonService) implementation(projects.services.managerService) + compileOnly(libs.androidx.annotation) + compileOnly(projects.hiddenapi.stubs) } diff --git a/daemon/build.gradle.kts b/daemon/build.gradle.kts index 39cda51f..8f9183fd 100644 --- a/daemon/build.gradle.kts +++ b/daemon/build.gradle.kts @@ -17,13 +17,15 @@ * Copyright (C) 2021 LSPosed Contributors */ +import com.android.build.api.dsl.ApplicationExtension import com.android.ide.common.signing.KeystoreHelper import java.io.PrintStream import java.util.* +@Suppress("DSL_SCOPE_VIOLATION") plugins { - id("com.android.application") - id("org.lsposed.lsplugin.resopt") + alias(libs.plugins.agp.app) + alias(libs.plugins.lsplugin.resopt) } val daemonName = "LSPosed" @@ -31,7 +33,7 @@ val daemonName = "LSPosed" val injectedPackageName: String by rootProject.extra val injectedPackageUid: Int by rootProject.extra -val agpVersion : String by project +val agpVersion: String by project val defaultManagerPackageName: String by rootProject.extra @@ -90,7 +92,7 @@ android.applicationVariants.all { val outSrcDir = file("$buildDir/generated/source/signInfo/${variantLowered}") val signInfoTask = tasks.register("generate${variantCapped}SignInfo") { dependsOn(":app:validateSigning${variantCapped}") - val sign = signingConfig + val sign = rootProject.project(":app").extensions.getByType(ApplicationExtension::class.java).buildTypes.named(variantLowered).get().signingConfig val outSrc = file("$outSrcDir/org/lsposed/lspd/util/SignInfo.java") outputs.file(outSrc) doLast { @@ -117,12 +119,12 @@ android.applicationVariants.all { } dependencies { - implementation("io.github.libxposed:service-interface:100") - implementation("com.android.tools.build:apksig:$agpVersion") - implementation("org.apache.commons:commons-lang3:3.12.0") - compileOnly("androidx.annotation:annotation:1.5.0") - compileOnly(projects.hiddenapi.stubs) + implementation(libs.libxposed.service.`interface`) + implementation(libs.agp.apksig) + implementation(libs.commons.lang3) implementation(projects.hiddenapi.bridge) implementation(projects.services.daemonService) implementation(projects.services.managerService) + compileOnly(libs.androidx.annotation) + compileOnly(projects.hiddenapi.stubs) } diff --git a/dex2oat/build.gradle.kts b/dex2oat/build.gradle.kts index 0309cece..e4f75ed5 100644 --- a/dex2oat/build.gradle.kts +++ b/dex2oat/build.gradle.kts @@ -17,8 +17,9 @@ * Copyright (C) 2022 LSPosed Contributors */ +@Suppress("DSL_SCOPE_VIOLATION") plugins { - id("com.android.library") + alias(libs.plugins.agp.lib) } android { diff --git a/gradle.properties b/gradle.properties index 8d1fafab..72a2d379 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,7 +19,3 @@ android.enableR8.fullMode=true android.useAndroidX=true org.gradle.unsafe.configuration-cache=true - -agpVersion=7.4.1 -navVersion=2.5.3 -kotlinVersion=1.8.10 diff --git a/magisk-loader/build.gradle.kts b/magisk-loader/build.gradle.kts index 42c8bb60..3489fc1b 100644 --- a/magisk-loader/build.gradle.kts +++ b/magisk-loader/build.gradle.kts @@ -33,9 +33,10 @@ import org.objectweb.asm.ClassVisitor import org.objectweb.asm.MethodVisitor import org.objectweb.asm.Opcodes +@Suppress("DSL_SCOPE_VIOLATION") plugins { - id("com.android.application") - id("org.lsposed.lsplugin.resopt") + alias(libs.plugins.agp.app) + alias(libs.plugins.lsplugin.resopt) } val moduleName = "LSPosed" @@ -123,12 +124,12 @@ abstract class Injected @Inject constructor(val magiskDir: String) { } dependencies { - compileOnly("androidx.annotation:annotation:1.5.0") - compileOnly(projects.hiddenapi.stubs) implementation(projects.core) implementation(projects.hiddenapi.bridge) implementation(projects.services.managerService) implementation(projects.services.daemonService) + compileOnly(libs.androidx.annotation) + compileOnly(projects.hiddenapi.stubs) } val zipAll = task("zipAll") { diff --git a/services/daemon-service/build.gradle.kts b/services/daemon-service/build.gradle.kts index bda349c6..c97744d4 100644 --- a/services/daemon-service/build.gradle.kts +++ b/services/daemon-service/build.gradle.kts @@ -17,8 +17,9 @@ * Copyright (C) 2021 LSPosed Contributors */ +@Suppress("DSL_SCOPE_VIOLATION") plugins { - id("com.android.library") + alias(libs.plugins.agp.lib) } android { diff --git a/services/manager-service/build.gradle.kts b/services/manager-service/build.gradle.kts index f2ef2a28..89161fef 100644 --- a/services/manager-service/build.gradle.kts +++ b/services/manager-service/build.gradle.kts @@ -17,8 +17,9 @@ * Copyright (C) 2021 LSPosed Contributors */ +@Suppress("DSL_SCOPE_VIOLATION") plugins { - id("com.android.library") + alias(libs.plugins.agp.lib) } android { @@ -35,5 +36,5 @@ android { } dependencies { - api("dev.rikka.rikkax.parcelablelist:parcelablelist:2.0.1") + api(libs.rikkax.parcelablelist) } diff --git a/settings.gradle.kts b/settings.gradle.kts index c235120b..5d920fbc 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -9,15 +9,6 @@ pluginManagement { google() mavenCentral() } - plugins { - id("com.android.library") version agpVersion - id("com.android.application") version agpVersion - id("org.jetbrains.kotlin.android") version kotlinVersion - id("androidx.navigation.safeargs") version navVersion - id("dev.rikka.tools.autoresconfig") version "1.2.2" - id("dev.rikka.tools.materialthemebuilder") version "1.3.3" - id("org.lsposed.lsplugin.resopt") version "1.2" - } } dependencyResolutionManagement { @@ -27,6 +18,77 @@ dependencyResolutionManagement { mavenCentral() mavenLocal() } + versionCatalogs { + create("libs") { + val agpVersion = version("agp", "7.4.1") + val kotlinVersion = version("kotlin", "1.8.10") + val navVersion = version("nav", "2.5.3") + val appCenterVersion = version("appcenter", "5.0.0") + val libxposedVersion = version("libxposed", "100") + val glideVersion = version("glide", "4.15.0") + val okhttpVersion = version("okhttp", "4.10.0") + + plugin("agp-lib", "com.android.library").versionRef(agpVersion) + plugin("agp-app", "com.android.application").versionRef(agpVersion) + plugin("kotlin", "org.jetbrains.kotlin.android").versionRef(kotlinVersion) + plugin("nav-safeargs", "androidx.navigation.safeargs").versionRef(navVersion) + plugin("autoresconfig", "dev.rikka.tools.autoresconfig").version("1.2.2") + plugin("materialthemebuilder", "dev.rikka.tools.materialthemebuilder").version("1.3.3") + plugin("lsplugin-resopt", "org.lsposed.lsplugin.resopt").version("1.3") + plugin("lsplugin-apksign", "org.lsposed.lsplugin.apksign").version("1.1") + plugin("lsplugin-cmaker", "org.lsposed.lsplugin.cmaker").version("1.0") + plugin("lsplugin-jgit", "org.lsposed.lsplugin.jgit").version("1.0") + + library("appcenter-crashes", "com.microsoft.appcenter", "appcenter-crashes").versionRef(appCenterVersion) + library("appcenter-analytics", "com.microsoft.appcenter", "appcenter-analytics").versionRef(appCenterVersion) + + library("libxposed-api", "io.github.libxposed", "api").versionRef(libxposedVersion) + library("libxposed-service-interface", "io.github.libxposed", "service-interface").versionRef(libxposedVersion) + + + library("rikkax-appcompat", "dev.rikka.rikkax.appcompat:appcompat:1.5.0.1") + library("rikkax-core", "dev.rikka.rikkax.core:core:1.4.1") + library("rikkax-insets", "dev.rikka.rikkax.insets:insets:1.3.0") + library("rikkax-layoutinflater", "dev.rikka.rikkax.layoutinflater:layoutinflater:1.2.0") + library("rikkax-material", "dev.rikka.rikkax.material:material:2.5.1") + library("rikkax-material-preference", "dev.rikka.rikkax.material:material-preference:2.0.0") + library("rikkax-parcelablelist", "dev.rikka.rikkax.parcelablelist:parcelablelist:2.0.1") + library("rikkax-preference", "dev.rikka.rikkax.preference:simplemenu-preference:1.0.3") + library("rikkax-recyclerview", "dev.rikka.rikkax.recyclerview:recyclerview-ktx:1.3.1") + library("rikkax-widget-borderview", "dev.rikka.rikkax.widget:borderview:1.1.0") + library("rikkax-widget-mainswitchbar", "dev.rikka.rikkax.widget:mainswitchbar:1.0.2") + + library("androidx-activity", "androidx.activity:activity:1.6.1") + library("androidx-annotation", "androidx.annotation:annotation:1.5.0") + library("androidx-browser", "androidx.browser:browser:1.5.0") + library("androidx-constraintlayout", "androidx.constraintlayout:constraintlayout:2.1.4") + library("androidx-core", "androidx.core:core:1.9.0") + library("androidx-fragment", "androidx.fragment:fragment:1.5.5") + library("androidx-navigation-fragment", "androidx.navigation", "navigation-fragment").versionRef(navVersion) + library("androidx-navigation-ui", "androidx.navigation", "navigation-ui").versionRef(navVersion) + library("androidx-preference", "androidx.preference:preference:1.2.0") + library("androidx-recyclerview", "androidx.recyclerview:recyclerview:1.2.1") + library("androidx-swiperefreshlayout", "androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01") + + library("glide", "com.github.bumptech.glide", "glide").versionRef(glideVersion) + library("glide-compiler", "com.github.bumptech.glide", "compiler").versionRef(glideVersion) + + library("okhttp", "com.squareup.okhttp3", "okhttp").versionRef(okhttpVersion) + library("okhttp-dnsoverhttps", "com.squareup.okhttp3", "okhttp-dnsoverhttps").versionRef(okhttpVersion) + library("okhttp-logging-interceptor", "com.squareup.okhttp3", "logging-interceptor").versionRef(okhttpVersion) + + + library("agp-apksig", "com.android.tools.build", "apksig").versionRef(agpVersion) + library("appiconloader", "me.zhanghai.android.appiconloader:appiconloader:1.5.0") + library("axml", "de.upb.cs.swt:axml:2.1.3") + library("commons-lang3", "org.apache.commons:commons-lang3:3.12.0") + library("material", "com.google.android.material:material:1.8.0") + library("gson", "com.google.code.gson:gson:2.10.1") + library("hiddenapibypass", "org.lsposed.hiddenapibypass:hiddenapibypass:4.3") + library("kotlin-stdlib", "org.jetbrains.kotlin", "kotlin-stdlib").versionRef(kotlinVersion) + library("kotlinx-coroutines-core", "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4") + } + } } rootProject.name = "LSPosed"