explaingit

droidpluginteam/droidplugin

6,973JavaAudience · developerComplexity · 4/5Setup · hard

TLDR

DroidPlugin is an Android framework that lets a host app load and run other Android apps as plugins at runtime, without installing them on the device or modifying their code.

Mindmap

mindmap
  root((repo))
    What it does
      Run APKs as plugins
      No install needed
      No code changes
    How it works
      Hook system calls
      Intercept Java layer
      Isolated processes
    Use cases
      Dynamic plugin system
      In-app app store
      Memory isolation
    Limitations
      No native C code
      No custom notifications
    Audience
      Android developers
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Load and run third-party APKs inside your Android app without requiring the device to install them first.

USE CASE 2

Build a dynamic plugin or app-store system where users can add features without updating the main app.

USE CASE 3

Isolate plugin apps in their own processes so idle plugins are shut down automatically to save memory.

Tech stack

JavaAndroid

Getting it running

Difficulty · hard Time to first run · 1h+

Apps with native C or C++ code cannot be used as plugins, custom-layout notifications from plugins are also unsupported.

In plain English

DroidPlugin is an Android framework that lets a host app run other Android apps (APKs) without installing them on the device, without modifying their code, and without repacking them. Normally, to run an Android app, the operating system must install it first. DroidPlugin intercepts Android's own system calls at the Java layer so the host app can load and run a foreign APK as if it were a plugin, while the rest of the device sees nothing new installed. The framework handles the Android component system on behalf of the plugin. Services, activities, broadcast receivers, and content providers inside the plugin do not need to be declared in the host app's manifest. The plugin gets its own isolated resources and its own process management, so idle plugin processes are shut down to save memory. From the plugin's point of view, it runs normally, it can even interact with other plugins loaded by the same host. Integrating DroidPlugin into a host app takes a small amount of code. You either set the framework's Application class in your manifest, or you add two method calls to your own Application class. After that, you call the plugin manager to install, upgrade, or uninstall APK files by their file path, much like a miniature package manager running inside your app. The README is honest about limitations. Notifications that use custom layouts or drawable resources from the plugin do not work correctly. The plugin's components cannot be discovered by other apps on the device through Intent filters, so the plugin is invisible to the outside system. Apps that include native (C or C++) code cannot be loaded as plugins because the framework does not hook into the native layer. DroidPlugin was originally developed at Qihoo 360 and is used in the 360 App Store.

Copy-paste prompts

Prompt 1
I want to use DroidPlugin to load a plugin APK inside my Android host app. Show me the AndroidManifest.xml changes and the Java code to install and launch the plugin APK.
Prompt 2
Walk me through how DroidPlugin intercepts Android system calls at the Java layer to make a plugin app think it is installed normally on the device.
Prompt 3
What are the known limitations of DroidPlugin, specifically around notifications with custom layouts and apps that include native C or C++ code?
Prompt 4
Show me how to use the DroidPlugin manager API to install, upgrade, and uninstall a plugin APK programmatically from a file path.
Open on GitHub → Explain another repo

← droidpluginteam on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.