From f54919b44af90987d637456d49eb013b39593d91 Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Wed, 4 Mar 2026 17:24:11 +0530 Subject: [PATCH 1/4] fix: remove debug logs that shows up in build output Signed-off-by: Akash Yadav --- .../tooling/api/sync/ProjectSyncHelper.kt | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/subprojects/tooling-api/src/main/java/com/itsaky/androidide/tooling/api/sync/ProjectSyncHelper.kt b/subprojects/tooling-api/src/main/java/com/itsaky/androidide/tooling/api/sync/ProjectSyncHelper.kt index 6f406567b9..d9a3905e68 100644 --- a/subprojects/tooling-api/src/main/java/com/itsaky/androidide/tooling/api/sync/ProjectSyncHelper.kt +++ b/subprojects/tooling-api/src/main/java/com/itsaky/androidide/tooling/api/sync/ProjectSyncHelper.kt @@ -92,8 +92,7 @@ object ProjectSyncHelper { * @param projectDir The project directory. * @return The sync metadata file. */ - fun syncMetaFileForProject(projectDir: File) = - projectDir.resolve(SharedEnvironment.PROJECT_SYNC_CACHE_META_FILE) + fun syncMetaFileForProject(projectDir: File) = projectDir.resolve(SharedEnvironment.PROJECT_SYNC_CACHE_META_FILE) /** * Try to acquire the sync lock. @@ -197,7 +196,6 @@ object ProjectSyncHelper { // /data/data and /sdcard are different devices (partitions) // atomic moves are not possible for cross-device moves val tempCacheFile = Paths.get(targetFile.path + ".tmp") - logger.debug("Write project model to file: {}", tempCacheFile) runCatching { tempCacheFile .outputStream(StandardOpenOption.CREATE, StandardOpenOption.WRITE) @@ -206,9 +204,7 @@ object ProjectSyncHelper { gradleBuild.writeTo(tempOut) tempOut.flush() } - logger.debug("Wrote file {}", tempCacheFile) }.map { - logger.debug("Moving {} to {}", tempCacheFile, targetFile) // update atomically Files.move( tempCacheFile, @@ -226,10 +222,11 @@ object ProjectSyncHelper { * @param projectDir The project directory. * @return `true` if the files exist and are readable, `false` otherwise. */ - fun areSyncFilesReadable(projectDir: File) = areSyncFilesReadable( - syncMetaFile = syncMetaFileForProject(projectDir), - projectCacheFile = cacheFileForProject(projectDir) - ) + fun areSyncFilesReadable(projectDir: File) = + areSyncFilesReadable( + syncMetaFile = syncMetaFileForProject(projectDir), + projectCacheFile = cacheFileForProject(projectDir), + ) /** * Check whether the project sync files for the given project directory @@ -242,10 +239,11 @@ object ProjectSyncHelper { fun areSyncFilesReadable( syncMetaFile: File, projectCacheFile: File, - ): Boolean { - return syncMetaFile.exists() && syncMetaFile.canRead() && - projectCacheFile.exists() && projectCacheFile.canRead() - } + ): Boolean = + syncMetaFile.exists() && + syncMetaFile.canRead() && + projectCacheFile.exists() && + projectCacheFile.canRead() /** * Check if a sync is needed for the given project directory. @@ -263,10 +261,10 @@ object ProjectSyncHelper { // one of the required files are missing, require sync logger.debug( "NEED_SYNC: sync files missing or are unreadable:" + - " sync-meta={}," + - " project-cache={}", + " sync-meta={}," + + " project-cache={}", syncMetaFile, - projectCacheFile + projectCacheFile, ) return true } From a4258e4cb182d3130d4c1ffb9224c3274807c45a Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Wed, 4 Mar 2026 17:48:24 +0530 Subject: [PATCH 2/4] fix: log tooling API stderr messages with DEBUG log level Signed-off-by: Akash Yadav --- .../services/builder/GradleBuildService.kt | 2 +- .../androidide/logging/JvmStdErrAppender.java | 23 ++++++++----------- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/itsaky/androidide/services/builder/GradleBuildService.kt b/app/src/main/java/com/itsaky/androidide/services/builder/GradleBuildService.kt index fbbeff1121..afc4256c52 100644 --- a/app/src/main/java/com/itsaky/androidide/services/builder/GradleBuildService.kt +++ b/app/src/main/java/com/itsaky/androidide/services/builder/GradleBuildService.kt @@ -745,7 +745,7 @@ class GradleBuildService : val reader = input.bufferedReader() try { reader.forEachLine { line -> - SERVER_System_err.error(line) + SERVER_System_err.debug(line) if (!isActive) throw CancellationException() } } catch (e: Throwable) { diff --git a/logger/src/main/java/com/itsaky/androidide/logging/JvmStdErrAppender.java b/logger/src/main/java/com/itsaky/androidide/logging/JvmStdErrAppender.java index e76184eb58..9914135475 100644 --- a/logger/src/main/java/com/itsaky/androidide/logging/JvmStdErrAppender.java +++ b/logger/src/main/java/com/itsaky/androidide/logging/JvmStdErrAppender.java @@ -24,20 +24,15 @@ */ public class JvmStdErrAppender extends StdErrAppender { - public static final String PROP_JVM_STDERR_APPENDER_ENABLED = "ide.logging.jvmStdErrAppenderEnabled"; + public static final String PROP_JVM_STDERR_APPENDER_ENABLED = "ide.logging.jvmStdErrAppenderEnabled"; - private boolean isJvm = false; // JvmStdErrAppender is disabled by default + @Override + public void start() { + boolean jvmStdErrAppenderEnabled = Boolean.parseBoolean( + System.getProperty(PROP_JVM_STDERR_APPENDER_ENABLED, "true")); - @Override - public void start() { - this.isJvm = LogUtils.isJvm(); - super.start(); - } - - @Override - public boolean isStarted() { - return super.isStarted() - && isJvm - && Boolean.parseBoolean(System.getProperty(PROP_JVM_STDERR_APPENDER_ENABLED, "true")); - } + if (LogUtils.isJvm() && jvmStdErrAppenderEnabled) { + super.start(); + } + } } From bd0e5b2c4cdd4d7f21ef89c57b8990b265e9fbbb Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Wed, 4 Mar 2026 17:53:19 +0530 Subject: [PATCH 3/4] fix: do not append tooling api logs to stderr Signed-off-by: Akash Yadav --- .../services/builder/ToolingServerRunner.kt | 2 +- .../androidide/logging/JvmStdErrAppender.java | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/itsaky/androidide/services/builder/ToolingServerRunner.kt b/app/src/main/java/com/itsaky/androidide/services/builder/ToolingServerRunner.kt index 0b893f8bef..a8cbb9f203 100644 --- a/app/src/main/java/com/itsaky/androidide/services/builder/ToolingServerRunner.kt +++ b/app/src/main/java/com/itsaky/androidide/services/builder/ToolingServerRunner.kt @@ -67,7 +67,7 @@ internal class ToolingServerRunner( /** * Whether to enable logging of the error stream of the tooling server. */ - const val TOOLING_ERR_STREAM_LOGGING_ENABLED = true + const val TOOLING_ERR_STREAM_LOGGING_ENABLED = false /** * Whether to enable force killing the Gradle daemon. diff --git a/logger/src/main/java/com/itsaky/androidide/logging/JvmStdErrAppender.java b/logger/src/main/java/com/itsaky/androidide/logging/JvmStdErrAppender.java index 9914135475..13f503e0d0 100644 --- a/logger/src/main/java/com/itsaky/androidide/logging/JvmStdErrAppender.java +++ b/logger/src/main/java/com/itsaky/androidide/logging/JvmStdErrAppender.java @@ -17,6 +17,7 @@ package com.itsaky.androidide.logging; +import ch.qos.logback.classic.spi.ILoggingEvent; import com.itsaky.androidide.logging.utils.LogUtils; /** @@ -26,13 +27,20 @@ public class JvmStdErrAppender extends StdErrAppender { public static final String PROP_JVM_STDERR_APPENDER_ENABLED = "ide.logging.jvmStdErrAppenderEnabled"; + private boolean jvmStdErrAppenderEnabled = true; + @Override public void start() { - boolean jvmStdErrAppenderEnabled = Boolean.parseBoolean( + jvmStdErrAppenderEnabled = Boolean.parseBoolean( System.getProperty(PROP_JVM_STDERR_APPENDER_ENABLED, "true")); + jvmStdErrAppenderEnabled &= LogUtils.isJvm(); + super.start(); + } - if (LogUtils.isJvm() && jvmStdErrAppenderEnabled) { - super.start(); - } + @Override + protected void append(ILoggingEvent eventObject) { + if (!jvmStdErrAppenderEnabled) + return; + super.append(eventObject); } } From 127ae7846234d0db7961eeac816561195f3de7d1 Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Wed, 4 Mar 2026 17:55:05 +0530 Subject: [PATCH 4/4] fix: redirect stderr to logcat if debug logging is enabled Signed-off-by: Akash Yadav --- .../itsaky/androidide/services/builder/ToolingServerRunner.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/itsaky/androidide/services/builder/ToolingServerRunner.kt b/app/src/main/java/com/itsaky/androidide/services/builder/ToolingServerRunner.kt index a8cbb9f203..9755d1fde0 100644 --- a/app/src/main/java/com/itsaky/androidide/services/builder/ToolingServerRunner.kt +++ b/app/src/main/java/com/itsaky/androidide/services/builder/ToolingServerRunner.kt @@ -27,6 +27,7 @@ import com.itsaky.androidide.tooling.api.IToolingApiServer import com.itsaky.androidide.tooling.api.util.ToolingApiLauncher import com.itsaky.androidide.tooling.api.util.ToolingProps import com.itsaky.androidide.utils.Environment +import com.itsaky.androidide.utils.FeatureFlags import com.termux.shared.reflection.ReflectionUtils import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineName @@ -67,7 +68,7 @@ internal class ToolingServerRunner( /** * Whether to enable logging of the error stream of the tooling server. */ - const val TOOLING_ERR_STREAM_LOGGING_ENABLED = false + val TOOLING_ERR_STREAM_LOGGING_ENABLED = FeatureFlags.isDebugLoggingEnabled /** * Whether to enable force killing the Gradle daemon.