AOSP System Service Generator CLI. One command generates everything you need for a new Android framework system service.
From a single command, aosp-gen creates:
| Component | File | Description |
|---|---|---|
| AIDL Interface | IXxxManager.aidl |
Binder IPC interface |
| AIDL Callback | IXxxCallback.aidl |
Async event callbacks |
| Manager | XxxManager.java |
Client-side API (singleton, listener pattern) |
| Service | XxxManagerService.java |
Server-side impl (system_server) |
| SELinux | service_contexts, .te files |
Security policies |
| SystemServer | SystemServer_addService.patch |
Service registration |
| Android.bp | Android.bp.example |
Build configuration |
| Sample App | MainActivity.java + layouts |
Working demo app |
| README | README.md |
API docs + integration guide |
npm install -g aosp-gen# Simple service
aosp-gen create -n LedController \
--apis "setBrightness:int:void;getBrightness::int;turnOff::void"
# Service with callbacks
aosp-gen create -n SensorHub \
--apis "startMonitor;stopMonitor;getData::String" \
--callbacks "onDataReceived:String;onError:int+String"
# Multi-param methods (use + between params)
aosp-gen create -n AudioRouter \
--apis "setRoute:int+String:boolean;getVolume:int:int;setVolume:int+int:void"
# From config file
aosp-gen init # creates service.json template
aosp-gen create -c service.jsonmethodName → void methodName()
methodName:paramType → void methodName(paramType value)
methodName::returnType → returnType methodName()
methodName:paramType:returnType → returnType methodName(paramType value)
methodName:int+String:boolean → boolean methodName(int value, String data)
Separate multiple APIs with semicolons (;).
Supported types: int, long, float, double, boolean, String, byte[], List<String>, Bundle
--name, -n Service name (PascalCase)
--package, -p Server package (default: com.android.server)
--apis, -a API methods (semicolon-separated)
--callbacks, -cb Callback methods (semicolon-separated)
--config, -c Load from JSON config file
--output, -o Output directory (default: ./generated)
--service-prefix Service prefix (default: sk)
--dry-run Preview without writing files
{
"name": "MyService",
"package": "com.android.server",
"servicePrefix": "sk",
"apis": [
"getStatus::String",
"setEnabled:boolean:void",
"configure:String+int:boolean"
],
"callbacks": [
"onStatusChanged:int",
"onError:int+String"
]
}- Singleton pattern (
getInstance()) RemoteExceptionhandling with fallback values- Typed listener interfaces per callback
- Internal AIDL callback dispatch
release()cleanup
- Extends
AIDL.Stub RemoteCallbackListfor safe callback managementdump()fordumpsysdebugging- Permission enforcement hook
- Handler for main thread operations
service_contextsmapping- Service type declaration
- Per-domain access rules (system_app, platform_app, untrusted_app)
- Hardware access stubs (sysfs, device nodes)
aosp-gen list-templates| Template | Description |
|---|---|
| standard | Generic AOSP system service |
| hardware | GPIO/LED/sensor (sysfs-based) |
| network | MQTT/BLE/serial communication |
| ui | System overlay UI components |
| media | Audio stream/volume/routing |
- Copy
framework/→${AOSP}/frameworks/base/core/java/ - Copy
services/→${AOSP}/frameworks/base/services/core/java/ - Apply
SystemServer_addService.patch - Copy
sepolicy/→device/<vendor>/<device>/sepolicy/ make framework services -j$(nproc)- Verify:
adb shell service list | grep <service_name>
MIT