Skip to content
CAI
Software that uses CAICheck a score

didi/booster

57.2

Adequate · 25 September 2026

14.7k

lines of production code

Kotlin

with Java

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Booster is an Android optimization framework that integrates with the Android Gradle Plugin to perform bytecode instrumentation and build-time transformations. It provides a suite of tools for enhancing application stability through runtime bug fixes, such as handling system exceptions and optimizing thread management, while also reducing APK size via resource inlining. The system supports a wide range of AGP versions through a compatibility abstraction layer and includes utilities for static analysis, dependency auditing, and build visualization.

How it got here

2019 — AGP 8.x migration and instrumentation expansion

43 changes.

The project underwent a major refactoring to support Android Gradle Plugin 8.x, migrating from the deprecated Transform API to the modern Artifact API and removing legacy compatibility layers. Concurrently, the Booster framework significantly expanded its bytecode instrumentation capabilities, introducing new transformers for thread optimization, media player interception, and resource validation, while adding diagnostic Gradle tasks for build artifact inspection.

2020–2026 — AGP compatibility and static analysis expansion

18 changes.

This period focused on extending support for Android Gradle Plugin versions 8.0 through 9.0 via a new compatibility abstraction layer. It also introduced standalone modules for class hierarchy analysis, call graph construction, and Gradle task visualization to enhance static analysis and build tooling capabilities.

Features

Add Priority annotation and Chinese API documentation

The booster-annotations module now includes a new Priority annotation for class-level metadata and a Chinese-language API reference document (packages-zh-CN.md) describing the package's role in Booster plugin development.

booster-annotations · high confidence

Add runtime resource validation via class transformation

The \booster-transform-res-check\ module introduces a new \ResCheckTransformer\ that automatically injects calls to \com.didiglobal.booster.instrument.ResChecker.checkRes\ into the \attachBaseContext\ and \onCreate\ methods of Android Application classes during the build process. This enables automatic resource validation at application launch time. A corresponding \ResCheckVariantProcessor\ ensures the necessary instrumentation dependency is added to application variants, while excluding library and dynamic feature variants.

booster-transform-res-check · high confidence

Add support for Android Gradle Plugin 8.0, 8.1, and 8.2

This change introduces three new modules—booster-android-gradle-v8\_0, v8\_1, and v8\_2—that implement the AGP interface for Android Gradle Plugin versions 8.0, 8.1, and 8.2 respectively. Each module provides a factory (V80Factory, V81Factory, V82Factory) to instantiate the corresponding version-specific adapter and includes integration tests to verify variant properties, task providers, and resource handling. This enables Booster to work with projects using AGP 8.x.

_booster-android-gradle-v8\_0, booster-android-gradle-v8\_1, booster-android-gradle-v8\_2, booster-android-gradle-v8\_12, booster-android-gradle-v9\0 · high confidence

Added AAPT2 binary resource parsing support

The booster-aapt2 module now includes the core infrastructure to parse AAPT2 binary resource containers. This change introduces Protocol Buffer definitions (Configuration.proto, Resources.proto) and their generated Java classes to model Android resource configurations and tables. It also adds Kotlin-based parsers (Aapt2Parser, BinaryParser) and data structures (Aapt2Container, Configuration) that allow the tool to read and inspect compiled Android resources, including handling both modern AAPT2 formats and legacy configurations.

booster-aapt2/src · high confidence

Added Android SDK location resolution utility

A new AndroidSdk utility class has been added to the build system to programmatically locate the Android SDK. It implements a fallback search strategy that checks the ANDROID\_HOME environment variable, the PATH for android/sdkmanager commands, the local.properties file, and platform-specific default directories (macOS, Linux, Windows). This enables build tasks to reliably find the SDK location and access platform-specific artifacts like android.jar without manual configuration.

booster-build/src · high confidence

Added MediaPlayer instrumentation to hook event callbacks

A new ShadowMediaPlayer class has been introduced in the booster-android-instrument-media-player module to intercept and modify the internal event handling of Android MediaPlayer instances. This implementation works by locating the MediaPlayer's internal EventHandler and replacing its callback with a custom 'CaughtCallback' wrapper, enabling the framework to monitor or alter media playback events at the handler level.

booster-android-instrument-media-player · high confidence

Added browser-based Android API signature extraction script

A new JavaScript file (assets/android-api-signature.js) has been added to the assets directory. This script is designed to run in a browser environment to parse and extract Android API signatures from HTML elements on a page, transforming them into a standardized format suitable for further processing or documentation.

assets · high confidence

Added support for Android Gradle Plugin 8.3 and 8.10

Users can now use Booster with Android Gradle Plugin (AGP) versions 8.3.0 and 8.10.0. This change introduces new adapter modules (\booster-android-gradle-v8\_3\ and \booster-android-gradle-v8\_10\) that implement the \AGPInterface\ to bridge Booster with the internal APIs of these specific AGP versions. The update includes the necessary factory registrations (\V83Factory\, \V810Factory\) and integration tests to verify compatibility with the corresponding AGP releases.

(repo-wide) · high confidence

Expanded Android API stubs for package manager, context, and XML parsing

The \booster-android-api\ module now includes a broader set of Android API stubs to support more complex application code. New stub classes have been added for package management (\ApplicationInfo\, \PackageItemInfo\, \PackageManager\), file observation (\FileObserver\), and XML processing (\Xml\, \XmlPullParser\, \XmlSerializer\, \XmlPullParserException\). The \Context\ and \ContextWrapper\ stubs now expose methods for retrieving the application package name, files directory, and application info, while \SharedPreferences\ has been expanded to include full read/write operations and change listeners. Additionally, \Activity\ now extends \ContextThemeWrapper\, and \WebView\ includes a stub for setting the data directory suffix.

booster-android-api/src · high confidence

Instrumentation of Android MediaPlayer via bytecode transformation

The booster-transform-media-player module now intercepts and redirects calls to the standard Android MediaPlayer class. A new MediaPlayerTransformer rewrites bytecode to replace direct instantiations (new MediaPlayer) and static factory calls (MediaPlayer.create) with equivalents from a shadow implementation (ShadowMediaPlayer). Additionally, a MediaPlayerVariantProcessor automatically adds the necessary instrumentation dependency to application variants (excluding library and dynamic feature variants), ensuring that all MediaPlayer usage in the app is routed through the shadow class for enhanced monitoring or behavior modification.

booster-transform-media-player · high confidence

Introduce ActivityThread transformer to hook application onCreate

A new ActivityThreadTransformer is added to the Booster transform pipeline. It scans merged manifests to identify application classes and injects a hook into their onCreate methods, allowing for interception of application initialization logic. A corresponding VariantProcessor ensures the necessary instrumentation dependency is automatically added to relevant build variants.

booster-transform-activity-thread · high confidence

Introduce Javassist-based bytecode transformer with diff reporting

This location adds a new Javassist-based bytecode transformer implementation. It introduces a \ClassTransformer\ interface for defining transformation logic, a \JavassistTransformer\ that loads these transformers via ServiceLoader and applies them to class bytecode, and utility extensions for handling ClassPool classpaths and textifying classes for debugging. A key behavioral addition is support for generating transform diffs: when the property \booster.transform.diff\ is set to true, the transformer captures the bytecode state before and after each transformation step and writes the differences to report files, aiding in debugging and verification of transformation effects.

booster-transform-javassist/src · high confidence

Introduce Logcat Transformer to intercept Android logging calls

Added a new LogcatTransformer that intercepts standard Android logging calls (Log.v/d/i/w/e/wtf/println, Throwable.printStackTrace, and System.out/err) and redirects them to shadow implementations (ShadowLog, ShadowThrowable, ShadowSystem) for non-debuggable builds. A corresponding LogcatVariantProcessor automatically adds the required booster-android-instrument-logcat dependency to application variants, enabling centralized control over log output behavior.

booster-transform-logcat · high confidence

Introduce booster-graph library for graph data structures and rendering

The booster-graph module now provides a new Kotlin-based graph library, including core classes for Nodes, Edges, and a Builder pattern to construct graphs. It supports traversing predecessors and successors, reversing graph direction, and rendering via a pluggable GraphRenderer interface that accepts options. A GroupedNode interface is also added to support grouping logic within graphs.

booster-graph · high confidence

Introduce command-line tool abstraction and installation service

The \booster-command\ module now provides a structured way to manage external command-line tools. It introduces a \Command\ abstraction with an \execute\ method, a \CommandProvider\ SPI for discovering commands, and a \CommandService\ that loads providers via \ServiceLoader\ and falls back to searching the system \PATH\. Additionally, a \CommandInstaller\ Gradle task is added to download and install command binaries, handling platform-specific permission changes (chmod on Linux/Mac, cacls on Windows). This allows the build system to reliably locate, install, and execute external tools required for the build process.

booster-command/src/main · high confidence

Introduce core call graph data structures

Added foundational classes for representing call graph nodes, including \CallNode\ for method-level entries with signature parsing and \ClassNode\ for class-level entries, along with a \ROOT\ virtual node to serve as the entry point for graph traversal.

booster-cha/src/main/kotlin/com/didiglobal/booster/cha/graph · high confidence

Introduce standalone CHA module with generic class parsing and hierarchy analysis

The static analysis class hierarchy analysis (CHA) logic has been extracted into a new standalone module (\booster-cha\) featuring a generic \ClassFileParser\ interface that allows pluggable parsing implementations (such as ASM-based parsers). This change introduces a new \ClassHierarchy\ class to compute inheritance relationships, alongside \ClassSet\ implementations (\ArchivedClassSet\, \DirectoryClassSet\, \CompositeClassSet\) that support loading classes from JAR/AAR archives, directories, and composite sources with parallel loading and caching to reduce memory footprint.

booster-cha/src/main/kotlin/com/didiglobal/booster/cha · high confidence

New AGP compatibility abstraction layer

A new \booster-android-gradle-compat\ module has been introduced to abstract the Android Gradle Plugin (AGP) API, providing a unified interface (\AGPInterface\) that eliminates differences between AGP versions. This allows Booster to support a wide range of AGP versions (including 7.0 through 8.2) by handling internal API changes, such as accessing merged native libs and variant artifacts, behind a consistent contract.

booster-android-gradle-compat · high confidence

New API utilities for resource path resolution and variant artifact access

The booster-api module now includes new Kotlin utilities to help plugins manage Android build artifacts and resource paths. The \RelativeResourceUtils\ class provides functions to convert between relative and absolute resource file paths based on source-set ordering, and to read/write mappings of source-set identifiers to their absolute paths. Additionally, an extension property \artifactManager\ is added to the \Variant\ interface, allowing plugins to easily access specific build artifacts (such as APKs, AARs, merged resources, and manifests) through a unified \ArtifactManager\ interface.

booster-api · high confidence

New ASM-based Class Hierarchy Analysis module

The \booster-cha-asm\ module introduces a new Class Hierarchy Analysis (CHA) implementation powered by the ASM library. This addition provides an alternative to existing CHA mechanisms, offering features such as a class set cache to reduce memory footprint and a reference analyzer for building dependency graphs between class sets. Users can now leverage this module for more efficient or specialized class hierarchy and reference analysis tasks within the Booster toolchain.

booster-cha-asm · high confidence

New DOT graph rendering capability

A new module has been introduced to render graphs in the DOT format, providing a \DotGraph\ implementation of the \GraphRenderer\ interface. This addition allows users to generate directed graph visualizations (digraphs) with styled nodes and edges, supporting options for output format (defaulting to PNG) and layout direction, and integrates with the system's \dot\ command-line tool for final image generation.

booster-graph-dot, booster-graph-json · high confidence

New booster-task-graph module for visualizing Gradle task and project dependencies

A new \booster-task-graph\ module has been added to generate visual graphs of Gradle task execution and project dependencies. It introduces a \GraphVariantProcessor\ that registers a \generateDependencyGraph\ task, producing \.dot\ and \.png\ files in the build directory to visualize task dependencies. Additionally, a \GenerateProjectGraph\ task is provided to map upstream project relationships. Users can run these tasks (e.g., \./gradlew assembleDebug --dry-run\) to obtain visual representations of their build structure.

booster-task-graph · high confidence

New listArtifacts Gradle task to display build artifacts

A new \listArtifacts\ task has been added to the Booster toolset, allowing users to inspect the build artifacts associated with their Android project variants. By running \./gradlew listArtifacts\ (or the variant-specific \list\<VariantName\>Artifacts\), users can now view a categorized list of files produced during the build process, aiding in debugging and verification of build outputs.

booster-task-list-artifact · high confidence

New listPermissions task to display Android permissions in AARs

A new Gradle task named \listPermissions\ has been added to the Booster toolkit. This task parses the merged AndroidManifest.xml of the project's dependencies (AARs) and prints a sorted list of the Android permissions they declare. Users can run \./gradlew listPermissions\ to view these permissions, which aids in auditing dependency requirements.

booster-task-list-permission · high confidence

New task to list shared libraries (.so) in Android variants

A new Gradle task named \listSharedLibraries\ has been added to the Booster toolchain. When executed, it scans the dependencies of each Android build variant (AAR and JAR files) and prints a list of any embedded shared libraries (.so files). This helps developers identify native library dependencies within their project's build artifacts.

booster-task-list-shared-library/src · high confidence

New thread optimization module with configurable enable/disable

A new \booster-transform-thread\ module has been added to provide multi-threading optimization by automatically renaming threads and optimizing thread pool executors (such as \ThreadPoolExecutor\ and \ScheduledThreadPoolExecutor\) at build time. This optimization is enabled by default but can be disabled by setting the \booster.transform.thread.optimization.enabled\ property to \false\ in \gradle.properties\ or via the command line. The module also includes a variant processor that automatically adds the required instrumentation dependency for application variants.

booster-transform-thread · high confidence

Prevent crashes from FinalizerWatchdogDaemon timeouts

The Booster Android instrumentation now includes a mechanism to stop the Android system's FinalizerWatchdogDaemon thread. This new component, FinalizerWatchdogDaemonKiller, attempts to clear the daemon's thread reference or invoke its stop method to prevent TimeoutExceptions that can cause application crashes, particularly on devices where this watchdog is active.

booster-android-instrument-finalizer-watchdog-daemon · high confidence

Removals

Removal of Android Gradle Plugin 3.0 compatibility layer

The \VariantScopeV30.java\ file, which provided helper methods to access variant outputs (such as merged manifests, resources, and APKs) for Android Gradle Plugin 3.0, has been deleted. This change removes the specific compatibility support for AGP 3.0 within this module, likely as part of a broader refactoring or deprecation of older AGP versions.

_booster-android-gradle-v3\0 · high confidence

Removal of legacy Gradle variant utilities and artifact processing tasks

This change removes several Kotlin extension functions and utility classes from the \booster-gradle-base\ module, including \BaseVariant.dependencies\, \BaseVariant.scope\, \BaseVariant.variantData\, \Project.getAndroid()\, and \TransformInvocation\ helpers for classpath and variant resolution. It also deletes the \ArtifactVariantProcessor\ and \ArtifactsResolver\ tasks from \booster-task-artifact\, which previously exposed build artifacts via Gradle tasks, and removes the \ToastBugfixVariantProcessor\ from \booster-transform-bugfix-toast\ that automatically added the toast bugfix dependency to library variants. Users relying on these specific Gradle extensions or the \showArtifacts\ task will need to update their build scripts or migration paths.

booster-gradle-base, booster-task-artifact, booster-transform-bugfix-toast · high confidence

Removal of legacy permission extraction task

The \PermissionExtractor\ and \PermissionVariantProcessor\ classes have been removed from the booster-task-permission module. This eliminates the \showPermissions\ Gradle task that previously scanned AAR files in the runtime classpath to list Android permissions using SAX parsing. Users relying on this specific task to inspect dependency permissions will no longer have access to this functionality through this module.

booster-task-permission · high confidence

Removal of snapshot dependency detection task

The \CheckSnapshot\ task and its associated \DependencyVariantProcessor\ have been removed from the booster-task-dependency module. This eliminates the functionality that previously scanned build variants for SNAPSHOT artifacts and warned users about their presence in release builds.

booster-task-dependency · high confidence

Removal of the BuildPropsGenerator Gradle plugin and its test suite

The buildSrc module no longer includes the \BuildPropsGenerator\ task, the \BuildPropsPlugin\, or the associated \BuildPropsGeneratorTest\. This change removes the automatic generation of a Java \Build\ interface containing project metadata (group, artifact, version, and git revision) into the main source set, and eliminates the corresponding unit test for the package-name sanitization logic.

buildSrc · high confidence

Removal of the booster-transform-shrink module

The \booster-transform-shrink\ module has been removed from the codebase. This eliminates the previous functionality that performed constants shrinking by replacing R-styleable and BuildConfig symbol references with literal constants during the build transformation phase. Users relying on this specific shrinking behavior will no longer have it applied.

booster-transform-shrink · high confidence

Removal of the lint transformer module

The \booster-transform-lint\ module has been removed from the codebase. This change deletes the \LintTransformer\ class, which previously performed static analysis by building a call graph to detect main-thread operations on UI components, along with its supporting \EntryPoint\ definitions, \CallGraph\ implementation, and associated unit tests. Users relying on this specific linting capability for detecting main-thread violations will no longer have access to this feature.

booster-transform-lint · high confidence

Behavioural changes

Add runtime resource validation for Android applications

The new ResChecker utility now validates that an Android application's assets and resources are available at launch. If the application context lacks valid assets or resources, the process is immediately terminated to prevent undefined behavior during execution.

booster-android-instrument-res-check · high confidence

Automatic injection to kill FinalizerWatchdogDaemon in Application classes

A new transformer now scans Application classes in the merged manifest and injects a call to \FinalizerWatchdogDaemonKiller.kill()\ at the end of their \onCreate\ methods (before return or throw). This change prevents the FinalizerWatchdogDaemon thread from lingering after the application process ends, which can cause IllegalAccessError issues during hotfix scenarios. The feature is automatically enabled for all non-library and non-dynamic-feature variants via a new variant processor that adds the necessary instrumentation dependency.

booster-transform-finalizer-watchdog-daemon · high confidence

Booster framework updates to v5.1.0 with AGP 9.0 support and documentation overhaul

The Booster Android optimization framework has advanced to version 5.1.0, introducing support for Android Gradle Plugin (AGP) 9.0 alongside existing 8.x versions. This release upgrades the Javassist bytecode library from 3.25.0-GA to 3.30.2-GA and corrects properties within the \TransformContext\ API. To guide users through the transition from the legacy 4.x series, the project has added comprehensive \CLAUDE.md\ and \RELEASE-NOTES.md\ documentation detailing the migration path, AGP compatibility matrices, and integration test procedures. The \README.md\ has been significantly expanded to include bilingual (English/Chinese) guides, updated prerequisite tables, and new examples for integrating specific transformer modules rather than the deprecated 'all' bundles.

(repo-wide) · high confidence

Enhanced thread naming and pool optimization in Android instrumentation

The booster-android-instrument-thread module now provides improved thread management capabilities. It introduces new factory classes (NamedThreadFactory, NamedForkJoinWorkerThreadFactory) and shadow wrappers (ShadowThread, ShadowHandlerThread, ShadowTimer) that automatically prefix thread names with a zero-width space marker for easier identification in logs and debuggers. Additionally, it adds optimized executor factories in ShadowExecutors and ShadowThreadPoolExecutor that enable core thread timeout and set appropriate keep-alive times to reduce resource consumption, and includes a utility to optimize the default AsyncTask ThreadPoolExecutor.

booster-android-instrument-thread · high confidence

Improved system exception handling in ActivityThread instrumentation

The ActivityThread instrumentation now distinguishes between system-caused and user-caused exceptions, preventing crashes originating from Android framework internals (such as DeadSystemException or specific NullPointerExceptions during asset loading) from terminating the app. It achieves this by checking exception stack traces against known system package prefixes (java, android, androidx, dalvik, com.android) and the booster library itself; only exceptions traced back to user code are re-thrown, while system-originated errors are logged and the process is safely aborted to avoid unstable states.

booster-android-instrument-activity-thread · high confidence

Introduce R class constants inlining transformer

The new \booster-transform-r-inline\ module replaces the previous shrinking approach by inlining R class constants directly into bytecode. This transformer reads the \R.txt\ symbol list and replaces static field references (such as \R$id\ or \R$string\) with their literal integer values, significantly reducing the size of the final APK. It includes logic to retain specific symbols required by ConstraintLayout (e.g., \constraint\_referenced\_ids\) and allows users to configure wildcard patterns via the \booster.transform.r.inline.ignores\ property to exclude specific packages from inlining.

booster-transform-r-inline · high confidence

Introduction of shadow classes for Android system APIs

The logcat instrumentation module now includes new shadow implementations for \android.util.Log\, \java.lang.System\, and \java.lang.Throwable\. These classes provide no-op replacements for standard logging, standard output/error streams, and stack trace printing, likely to suppress or redirect system-level output during instrumentation without affecting the application's runtime behavior.

booster-android-instrument-logcat · high confidence

JAR transformation now runs in parallel and skips signature files

The \booster-transform-util\ module now transforms JAR entries in parallel using \ParallelScatterZipCreator\, which significantly improves performance for large archives. Additionally, JAR signature-related files (such as \.SF\, \.RSA\, \.DSA\, and \.EC\ entries under \META-INF/\) are automatically filtered out during the transformation process to prevent JAR signature verification failures. The transformation logic also includes a fix for handling broken classes and duplicate entries within JARs, ensuring that the process does not fail on malformed inputs.

booster-transform-util/src/main · high confidence

Migrates from Android Transform API to Artifact API

The Booster Gradle plugin replaces the deprecated Android Transform API with the modern Artifact API. The previous implementation, which relied on \BoosterTransform\ and its subclasses (\BoosterAppTransform\, \BoosterLibTransform\), has been removed and replaced by a new \BoosterTransformTask\ that integrates with \AndroidComponentsExtension\. This change updates how the plugin registers its bytecode transformation logic, ensuring compatibility with newer Android Gradle Plugin versions and aligning with current Android build system standards.

booster-gradle-plugin/src · high confidence

Rebuilt Android Gradle Plugin API compatibility layer for AGP 8.x support

The Booster Android Gradle API has been refactored to replace internal, version-specific VariantScope access with the public AGP Variant API, enabling compatibility with Android Gradle Plugin versions 8.0, 8.1, and 8.2. This change introduces new extension properties and functions in Project.kt and Variant.kt to access variant data (such as dependencies, task providers, and artifact collections) through stable interfaces, while deprecating the legacy ResolvedArtifactResults class in favor of the new Variant.getDependencies method. Users upgrading to AGP 8.x will benefit from stable API usage, though existing code relying on the deprecated ResolvedArtifactResults class should migrate to the new Variant API.

booster-android-gradle-api/src · high confidence

Refactor API usage detection to use pre-transform loading and updated console colors

The UsageTransformer now loads the list of APIs to detect during the onPreTransform phase rather than lazily during class transformation, which ensures the resource is read once and improves consistency. Additionally, the module updates its console output to use the new CSI\_RESET and CSI\_YELLOW constants for color coding, and introduces a DEFAULT\_USED\_APIS constant derived from the included used-apis.txt resource file.

booster-transform-usage · high confidence

Refactor booster-kotlinx library with new extensions and API changes

This change refactors the booster-kotlinx utility library by introducing a suite of new Kotlin extensions and data structures while removing legacy implementations. New additions include parallel file search capabilities (FileSearch), OS detection utilities (OS), process execution helpers (Process), color manipulation classes (RGB, WebSafeColorPalette), reflection helpers, and multi-arity tuple data classes (Quadruple through Octuple). The ansi.kt file has been updated to rename all ANSI control sequence constants with a 'CSI\_' prefix and adds convenience functions for colored text output. Existing functionality has been cleaned up: the FileTree class and primitive wrapper data classes have been removed, and the io.kt file has been significantly reduced by stripping out JAR/ZIP archive operations and parallel walk methods, leaving only basic file I/O helpers. Additionally, the collections.kt file fixes a bug in the isEmpty() extension, and text.kt adds Java identifier validation and capitalization helpers.

booster-kotlinx/src · high confidence

Refactor toast instrumentation module and class structure

The toast-related code has been moved from the 'booster-android-bugfix-toast' module to the 'booster-android-instrument-toast' module. The main implementation class has been renamed from 'Toast' to 'ShadowToast' and its package updated to 'com.didiglobal.booster.instrument'. Internal dependencies have been updated to use the new package structure, and the code now explicitly imports 'android.widget.Toast' to clarify the distinction between the shadow class and the Android framework class.

booster-android-instrument-toast · high confidence

The \booster-android-instrument\ module now includes utilities for bytecode instrumentation, specifically by moving and renaming several classes previously located in \booster-android-bugfix\. This change relocates \CaughtCallback\, \CaughtRunnable\, \Constants\, and \Reflection\ into the \com.didiglobal.booster.instrument\ package, alongside a new \Intrinsics\ class that provides a \sanitizeStackTrace\ utility for cleaning exception stack traces. This reorganization consolidates instrumentation-related logic and exception handling helpers within the instrument module.

booster-android-instrument · high confidence

Refactored Toast transformer to support dynamic features and improve AGP compatibility

The \booster-transform-toast\ module has been refactored to support Android dynamic feature modules and improve compatibility with newer Android Gradle Plugin (AGP) versions (7.3 through 8.2). A new \ToastVariantProcessor\ now automatically injects the \booster-android-instrument-toast\ dependency for library and dynamic feature variants, ensuring the bug fix is applied consistently. The underlying \ToastTransformer\ has been updated to use a more robust class resolution mechanism for detecting \Toast.show()\ calls, which helps prevent stack overflow issues with custom Toast implementations, and now generates a report file detailing the applied transformations.

booster-transform-toast · high confidence

Refactored TransformContext API and added Kotlin-based SPI abstractions

The transform SPI in \booster-transform-spi\ has been refactored to provide a more structured and type-safe API for build tool integrations. The \TransformContext\ interface has been expanded with new properties including \bootClasspath\, \dependencies\, \klassPool\, \applicationId\, \originalApplicationId\, \isDebuggable\, and \isDataBindingEnabled\, while the previous \executor\ property was removed. A new \Collector\ interface and \registerCollector\/\unregisterCollector\ methods allow plugins to observe and collect information from the transform pipeline without invalidating incremental builds. Additionally, new Kotlin abstractions \AbstractKlassPool\, \Klass\, and \KlassPool\ have been introduced to handle class reflection and type checking, and the \TransformListener\ interface was migrated from Java to Kotlin with simplified default method implementations.

booster-transform-spi/src · high confidence

Removal of internal VariantScopeV32 adapter class

The internal \VariantScopeV32\ class, which provided helper methods to access Android build artifacts (such as merged manifests, resources, and APKs) via internal AGP APIs, has been removed from the \booster-android-gradle-v3\_2\ module. This change eliminates the specific compatibility layer for accessing these internal artifact types in this version of the Android Gradle Plugin integration.

_booster-android-gradle-v3\2 · high confidence

Rewrite ASM class transformer in Kotlin with CPU profiling and diff support

The ASM-based class transformer in \booster-transform-asm\ has been rewritten from Java to Kotlin, introducing several user-facing capabilities. Transformers are now sorted by a \@Priority\ annotation, allowing users to control execution order. The transformer now tracks and reports CPU time spent in each transformer during the post-transform phase. Additionally, setting the property \booster.transform.diff\ to \true\ enables the generation of diff reports for classes modified by transformers, aiding in debugging and verification of bytecode changes.

booster-transform-asm/src · high confidence

VariantProcessor SPI updated to support Android Gradle Plugin 8.x

The booster-task-spi module now supports Android Gradle Plugin (AGP) versions 8.0, 8.1, and 8.2 by migrating the VariantProcessor interface from the deprecated BaseVariant to the new Variant API. The interface now includes a new process method accepting Variant and a beforeProcess hook accepting VariantBuilder, while the original BaseVariant-based method is marked as deprecated to guide plugin developers toward the updated API.

booster-task-spi · high confidence

Test coverage

Added tests for ASM-based test runner; Added tests for Javassist-based unit test runner; Added unit test support with transformer; Added unit tests for ClassSet and CallGraph components; Added unit tests for InstalledCommand and NoneCommand; Added unit tests for booster-transform-util.

Dependencies

Add adapter modules and test projects for Android Gradle Plugin 8.0 through 8.12

New modules (booster-android-gradle-v8\_0 through booster-android-gradle-v8\_12) and their integration/e2e test projects are added to support Android Gradle Plugin (AGP) versions 8.0–8.12. Each module declares compileOnly and testImplementation dependencies on the corresponding com.android.tools.build:gradle version (e.g., 8.0.0, 8.1.0, 8.2.0, 8.3.0, 8.4.0, 8.5.0, 8.10.0, 8.12.0) and related Android tools (repository, common, sdklib). For AGP 8.10+ and 8.12+, Kotlin 2.0 is required; the modules configure KotlinCompile tasks with -Xskip-metadata-version-check to bypass metadata version checks. Test projects (e.g., e2eTest/app/build.gradle.kts) use the matching AGP and Kotlin plugin versions (e.g., AGP 8.10.0 with Kotlin 2.0.21; AGP 8.3.0/8.4.0 with Kotlin 1.9.22) and apply the booster plugin, ensuring compatibility across this range of AGP releases.

(dependencies) · high confidence

Upgrade Gradle wrapper to version 8.5

The Gradle wrapper has been updated to use Gradle 8.5 (previously 4.6). This ensures that builds are executed with a modern, supported version of the Gradle build tool, which may bring performance improvements, new features, and compatibility with newer Android Gradle Plugin versions.

gradle · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 41 → 57 (+16.7)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 98 → 96 (-1.8)
  • Architecture 96 → 99 (+2.9)
  • Maturity 50 → 73 (+23.2)
  • Readiness 27 → 55 (+27.7)
  • Security 33 → 43 (+10.0)

Resolved (50)

  • Coverage not measured — test suite did not build
  • Dimension evaluation failed
  • Duplicated block (12 lines × 2) (booster-transform-thread/src/main/kotlin/com/didiglobal/booster/transform/thread/ThreadTransformer.kt)
  • Duplicated block (17 lines × 2) (booster-transform-thread/src/main/kotlin/com/didiglobal/booster/transform/thread/ThreadTransformer.kt)
  • Duplicated block (18 lines × 2) (booster-transform-thread/src/main/kotlin/com/didiglobal/booster/transform/thread/ThreadTransformer.kt)
  • Duplicated block (8 lines × 2) (booster-android-gradle-api/src/main/kotlin/com/didiglobal/booster/gradle/ScopedTask.kt)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • …and 30 more

New (66)

  • Configuration.toString (cognitive 37) (booster-aapt2/src/main/kotlin/com/didiglobal/booster/aapt/Configuration.kt)
  • Configuration.toString (cyclomatic 34) (booster-aapt2/src/main/kotlin/com/didiglobal/booster/aapt/Configuration.kt)
  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no installation or build instructions (README.md)
  • Duplicated block (10 lines × 2) (booster-transform-thread/src/main/kotlin/com/didiglobal/booster/transform/thread/ThreadTransformer.kt)
  • Duplicated block (10 lines × 2) (booster-transform-thread/src/main/kotlin/com/didiglobal/booster/transform/thread/ThreadTransformer.kt)
  • Duplicated block (13 lines × 2) (booster-transform-thread/src/main/kotlin/com/didiglobal/booster/transform/thread/ThreadTransformer.kt)
  • Duplicated block (21 lines × 13) (booster-android-gradle-v8_0/src/main/kotlin/com/didiglobal/booster/android/gradle/v8_0/V80.kt)
  • Duplicated block (7 lines × 12) (booster-android-gradle-v8_0/src/main/kotlin/com/didiglobal/booster/android/gradle/v8_0/V80.kt)
  • Duplicated block (7 lines × 12) (booster-android-gradle-v8_0/src/main/kotlin/com/didiglobal/booster/android/gradle/v8_0/V80.kt)
  • Duplicated block (7 lines × 2) (booster-android-gradle-api/src/main/kotlin/com/didiglobal/booster/gradle/ScopedTask.kt)
  • Duplicated block (7 lines × 2) (booster-cha/src/main/kotlin/com/didiglobal/booster/cha/ArchivedClassSet.kt)
  • Duplicated block (8 lines × 3) (booster-transform-activity-thread/src/main/kotlin/com/didiglobal/booster/transform/activitythread/ActivityThreadTransformer.kt)
  • Duplicated block (9 lines × 2) (booster-transform-asm/src/main/kotlin/com/didiglobal/booster/transform/asm/AsmTransformer.kt)
  • Duplicated block (9 lines × 2) (booster-transform-asm/src/main/kotlin/com/didiglobal/booster/transform/asm/AsmTransformer.kt)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • …and 46 more

Changes since last survey

  • 2 commits — 1 feature/other, 1 fixes

By area

  • .github/workflows — 1 commit
  • booster-android-gradle-v9_0/src — 1 commit

Notable commits

  • fix: Fix Android SDK setup in CI
  • change: Add AGP 9.0 support

Architecture

  • Containers 0 added · 0 removed · contexts 11 added · 0 removed · edges 9 added · 0 removed

Added bounded contexts (11)

  • booster-aapt2
  • booster-android-gradle-api
  • booster-cha
  • booster-cha-asm
  • booster-graph
  • booster-graph-dot
  • booster-kotlinx
  • booster-task-graph
  • booster-transform-r-inline
  • booster-transform-spi
  • booster-transform-util

Added dependency edges (9)

  • booster-cha → booster-graph
  • booster-cha-asm → booster-cha
  • booster-cha-asm → booster-graph
  • booster-graph-dot → booster-graph
  • booster-task-graph → booster-android-gradle-api
  • booster-task-graph → booster-graph
  • booster-transform-r-inline → booster-kotlinx
  • booster-transform-r-inline → booster-transform-spi
  • booster-transform-util → booster-transform-spi

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

didi/booster was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 25 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 0c6c254e3733a1861321f0ed8383aa3a7189821c — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-dd72cc24c749.