Shadow is an Android plugin framework that enables dynamic loading of plugin applications without reflection or system API hacking.
Shadow solves the problem of extending Android app functionality through plugins while maintaining compatibility with Google's restrictions on non-public SDK interfaces. It achieves this through a fully dynamic architecture where the plugin framework itself is distributed as part of the plugin rather than baked into the host application. This approach allows plugin source code to function as a standalone installable app, and plugins can be iterated independently of host app releases. The framework supports all four Android components, Fragments, DataBinding, cross-process plugin Services, custom themes, plugin access to host classes, native library loading, and segmented plugin loading across multiple APKs.
Shadow suits projects requiring plugin architecture without the maintenance burden of framework version mismatches between host and plugins. Teams should choose it if they need minimal host app footprint—the framework adds only approximately fifteen kilobytes to the host—and want to avoid reflection-based hacks or undocumented API calls. The tool is particularly valuable for applications that need to ship plugin updates independently of host updates. The README does not compare Shadow to alternative plugin frameworks, so no comparative guidance can be offered.
The project maintains automated testing across multiple Android versions and JDK versions to verify compatibility. The core loader and transform components are implemented in Kotlin, prioritizing code clarity and maintainability. The framework has been validated at scale through deployment to hundreds of millions of users.