# didi/virtualapk

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/didi-virtualapk).**

9,055 stars · 1,532 forks · Java · Apache-2.0 · archived

## Links

- GitHub: https://github.com/didi/VirtualAPK
- awesome-repositories: https://awesome-repositories.com/repository/didi-virtualapk.md

## Description

VirtualAPK is an Android plugin framework and runtime environment designed to load and execute external Android packages dynamically. It functions as a component host that allows a main application to run activities, services, and providers delivered via external modules without requiring system installation or manifest registration.

The framework enables dynamic feature delivery by loading external packages at runtime, allowing application functionality to be updated without redeploying the entire app. It provides a mechanism for Android sandbox execution, running isolated components within a host process to manage external code execution.

The system manages the full lifecycle of plugin components through runtime delegation and isolated class loaders to prevent dependency conflicts. It utilizes context wrapping and proxy-based hosting to simulate manifest registration and redirect resource lookups from the host to the plugin.

## Tags

### Mobile Development

- [Android Plugin Frameworks](https://awesome-repositories.com/f/mobile-development/android-plugin-frameworks.md) — Provides a framework for loading and running external feature modules in Android without requiring system installation.
- [Android Component Orchestrators](https://awesome-repositories.com/f/mobile-development/android-component-orchestrators.md) — Functions as a runtime environment managing the lifecycle of activities, services, and providers delivered via external modules.
- [Android Component Proxies](https://awesome-repositories.com/f/mobile-development/android-component-proxies.md) — Wraps plugin activities and services in host-declared proxies to simulate manifest registration for the Android OS.
- [Android Context Wrappers](https://awesome-repositories.com/f/mobile-development/android-context-wrappers.md) — Implements a custom wrapper around the Android Context to redirect resource lookups from the host to plugins.
- [Android App Modularization](https://awesome-repositories.com/f/mobile-development/android-app-modularization.md) — Supports developing decoupled application components that can be loaded as plugins to reduce main app size.
- [Host Resource Access Interfaces](https://awesome-repositories.com/f/mobile-development/host-resource-access-interfaces.md) — Provides a secure interface for external plugin modules to interact with the host application's classes and resources. ([source](https://github.com/didi/virtualapk#readme))
- [Plugin Runtime Extensions](https://awesome-repositories.com/f/mobile-development/plugin-runtime-extensions.md) — Provides a mechanism for external plugins to interact with host application classes and resources through a secure interface.

### Development Tools & Productivity

- [Plugin Lifecycle Management](https://awesome-repositories.com/f/development-tools-productivity/plugin-lifecycle-management.md) — Hosts and controls the lifecycle of activities, services, and providers delivered via external plugin modules. ([source](https://github.com/didi/virtualapk#readme))
- [Classloader Isolation](https://awesome-repositories.com/f/development-tools-productivity/plugin-systems/process-isolated-plugins/plugin-resource-context-isolation/classloader-isolation.md) — Maintains separate class loader hierarchies for each plugin to prevent dependency conflicts between modules.

### DevOps & Infrastructure

- [APK Loaders](https://awesome-repositories.com/f/devops-infrastructure/distribution-packaging/software-distribution/application-packaging/android-packages/apk-loaders.md) — Runs external Android package files and resources within a host application without requiring manifest registration.
- [Android Component Sandboxes](https://awesome-repositories.com/f/devops-infrastructure/execution-environments/code-execution-runtimes/code-execution-sandboxes/android-component-sandboxes.md) — Runs isolated Android components and activities within a host process to manage external code execution securely.

### Operating Systems & Systems Programming

- [Dynamic Android Component Loading](https://awesome-repositories.com/f/operating-systems-systems-programming/dynamic-library-loading/dynamic-android-component-loading.md) — Executes external Android packages dynamically at runtime without requiring registration in the application manifest. ([source](https://github.com/didi/virtualapk#readme))

### Programming Languages & Runtimes

- [Class Loading Mechanisms](https://awesome-repositories.com/f/programming-languages-runtimes/dynamic-class-creation/class-loading-mechanisms.md) — Loads external Java classes from APK files at runtime using a custom class loader to bypass system installation.
- [Reflection-Based Access](https://awesome-repositories.com/f/programming-languages-runtimes/class-member-access/object-member-access/private-property-access/reflection-based-access.md) — Interacts with plugin resources by manually invoking internal Android framework methods via Java reflection.

### Software Engineering & Architecture

- [Dynamic Feature Delivery Systems](https://awesome-repositories.com/f/software-engineering-architecture/dynamic-feature-delivery-systems.md) — Enables updating app functionality by loading external Android packages at runtime without redeploying the entire app.
- [Lifecycle Event Delegation](https://awesome-repositories.com/f/software-engineering-architecture/lifecycle-event-delegation.md) — Routes system callback events from the host application to internal plugin components to manage their state.
- [Plugin Component Execution](https://awesome-repositories.com/f/software-engineering-architecture/plugin-component-execution.md) — Runs classes, resources, and Android components from loaded packages as if they were declared in the host manifest. ([source](https://github.com/didi/virtualapk#readme))
