diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 50502d4ab..f4be1cc7a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -56,6 +56,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: + submodules: 'recursive' fetch-depth: 0 - name: Set up JDK 17 uses: actions/setup-java@v4 @@ -109,6 +110,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: + submodules: 'recursive' fetch-depth: 0 - name: Set up JDK 17 uses: actions/setup-java@v4 @@ -144,6 +146,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: + submodules: 'recursive' fetch-depth: 0 - name: Set up JDK 17 uses: actions/setup-java@v4 @@ -189,6 +192,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: + submodules: 'recursive' fetch-depth: 0 - name: Set up JDK 17 uses: actions/setup-java@v4 @@ -236,6 +240,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: + submodules: 'recursive' fetch-depth: 0 - name: Set up JDK 17 uses: actions/setup-java@v4 @@ -292,6 +297,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: + submodules: 'recursive' fetch-depth: 0 - name: Set up JDK 17 uses: actions/setup-java@v4 diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..16a235378 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "composite-builds/external/logback-android"] + path = composite-builds/external/logback-android + url = https://github.com/AndroidIDEOfficial/logback-android diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 62e591b2a..6caaa9a65 100755 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,11 +1,8 @@ @file:Suppress("UnstableApiUsage") -import ch.qos.logback.core.util.EnvUtil import com.itsaky.androidide.build.config.BuildConfig -import com.itsaky.androidide.desugaring.ch.qos.logback.core.util.DesugarEnvUtil import com.itsaky.androidide.desugaring.utils.JavaIOReplacements.applyJavaIOReplacements import com.itsaky.androidide.plugins.AndroidIDEAssetsPlugin -import kotlin.reflect.jvm.javaMethod plugins { id("com.android.application") @@ -62,18 +59,9 @@ desugaring { replacements { includePackage( "org.eclipse.jgit", - "ch.qos.logback.classic.util", ) applyJavaIOReplacements() - - // EnvUtil.logbackVersion() uses newer Java APIs like Class.getModule() which is not available - // on Android. We replace the method usage with DesugarEnvUtil.logbackVersion() which - // always returns null - replaceMethod( - EnvUtil::logbackVersion.javaMethod!!, - DesugarEnvUtil::logbackVersion.javaMethod!! - ) } } diff --git a/composite-builds/build-deps-common/desugaring-core/src/main/java/com/itsaky/androidide/desugaring/ch/qos/logback/core/util/DesugarEnvUtil.java b/composite-builds/build-deps-common/desugaring-core/src/main/java/com/itsaky/androidide/desugaring/ch/qos/logback/core/util/DesugarEnvUtil.java deleted file mode 100644 index 72168394c..000000000 --- a/composite-builds/build-deps-common/desugaring-core/src/main/java/com/itsaky/androidide/desugaring/ch/qos/logback/core/util/DesugarEnvUtil.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * This file is part of AndroidIDE. - * - * AndroidIDE is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * AndroidIDE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with AndroidIDE. If not, see . - */ - -package com.itsaky.androidide.desugaring.ch.qos.logback.core.util; - -/** - * @author Akash Yadav - */ -public class DesugarEnvUtil { - - /** - *

Returns the current version of logback, or null if data is not - * available. - *

- * - * @since 1.3.0 - * @return current version or null if missing version data - */ - static public String logbackVersion() { - return null; - } -} diff --git a/composite-builds/build-deps/logback-core/.gitignore b/composite-builds/build-deps/logback-core/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/composite-builds/build-deps/logback-core/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/composite-builds/build-deps/logback-core/build.gradle.kts b/composite-builds/build-deps/logback-core/build.gradle.kts new file mode 100644 index 000000000..032b3eb6a --- /dev/null +++ b/composite-builds/build-deps/logback-core/build.gradle.kts @@ -0,0 +1,49 @@ +/* + * This file is part of AndroidIDE. + * + * AndroidIDE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AndroidIDE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AndroidIDE. If not, see . + */ + +plugins { + //noinspection JavaPluginLanguageLevel + id("java-library") +} + +java { + sourceSets.getByName("main") { + val srcDir = + rootProject.projectDir.resolve("../external/logback-android/logback-core/src/main/java") + java.srcDirs(srcDir) + + val modInfo = srcDir.resolve("module-info.java") + if (modInfo.exists() && modInfo.isFile) { + modInfo.renameTo(srcDir.resolve("module-info.java.exclude")) + } + } + + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} + +//noinspection UseTomlInstead GradleDynamicVersion +dependencies { + compileOnly("org.codehaus.janino:janino:+") + compileOnly("org.codehaus.janino:commons-compiler:+") + compileOnly("org.fusesource.jansi:jansi:+") + compileOnly("jakarta.mail:jakarta.mail-api:+") + compileOnly("jakarta.servlet:jakarta.servlet-api:+") + + testCompileOnly("org.eclipse.angus:angus-mail:+") + testCompileOnly("org.mockito:mockito-core:+") +} \ No newline at end of file diff --git a/composite-builds/build-deps/settings.gradle.kts b/composite-builds/build-deps/settings.gradle.kts index d8e1e31ab..06da51d94 100644 --- a/composite-builds/build-deps/settings.gradle.kts +++ b/composite-builds/build-deps/settings.gradle.kts @@ -54,6 +54,7 @@ include( ":jdk-jdeps", ":jdt", ":layoutlib-api", + ":logback-core", ) rootProject.name = "build-deps" diff --git a/composite-builds/build-logic/desugaring/src/main/java/com/itsaky/androidide/desugaring/DesugarGradlePlugin.kt b/composite-builds/build-logic/desugaring/src/main/java/com/itsaky/androidide/desugaring/DesugarGradlePlugin.kt index bb83cba14..a5d9e5811 100644 --- a/composite-builds/build-logic/desugaring/src/main/java/com/itsaky/androidide/desugaring/DesugarGradlePlugin.kt +++ b/composite-builds/build-logic/desugaring/src/main/java/com/itsaky/androidide/desugaring/DesugarGradlePlugin.kt @@ -44,7 +44,8 @@ class DesugarGradlePlugin : Plugin { variant.instrumentation.apply { transformClassesWith( - DesugarClassVisitorFactory::class.java, ALL) { params -> + DesugarClassVisitorFactory::class.java, ALL + ) { params -> params.setFrom(extension) } diff --git a/composite-builds/external/README.md b/composite-builds/external/README.md new file mode 100644 index 000000000..d04691fa0 --- /dev/null +++ b/composite-builds/external/README.md @@ -0,0 +1,8 @@ +# External dependencies + +This directory contains external, non-Gradle dependencies that are required to build AndroidIDE. + +## Projects + +- [logback-android](https://github.com/AndroidIDEOfficial/logback-android) - [Logback](https://github.com/qos-ch/logback), + but with modifications for the Android platform. \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0ca6e1e14..492109f44 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -121,7 +121,9 @@ aapt2-annotations = { module = "com.android.tools:annotations", version = "31.2. aapt2-jb-annotations = { module = "org.jetbrains:annotations", version = "24.1.0" } aapt2-proto = { module = "com.android.tools.build:aapt2-proto", version = "8.3.0-10880808" } -logging-logback-core = { module = "ch.qos.logback:logback-core", version.ref = "logback" } +# use logback-core from logback-android instead +#logging-logback-core = { module = "ch.qos.logback:logback-core", version.ref = "logback" } +logging-logback-core = { module = "com.itsaky.androidide.build:logback-core" } logging-logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logback" } # XML diff --git a/logger/build.gradle.kts b/logger/build.gradle.kts index f4c7fe488..1f61c1907 100644 --- a/logger/build.gradle.kts +++ b/logger/build.gradle.kts @@ -27,7 +27,11 @@ dependencies { compileOnly(projects.subprojects.frameworkStubs) api(libs.logging.logback.core) - api(libs.logging.logback.classic) + api(libs.logging.logback.classic) { + // logback classic depends on upstream logback-core + // we exclude it and use our own from logback-android + exclude(group = "ch.qos.logback", module = "logback-core") + } implementation(projects.buildInfo)