Skip to content

jamiepaak/aosp-gen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

aosp-gen

AOSP System Service Generator CLI. One command generates everything you need for a new Android framework system service.

What it generates

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

Install

npm install -g aosp-gen

Quick Start

# 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.json

API Method Format

methodName                      → 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

Options

--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

Config File

{
  "name": "MyService",
  "package": "com.android.server",
  "servicePrefix": "sk",
  "apis": [
    "getStatus::String",
    "setEnabled:boolean:void",
    "configure:String+int:boolean"
  ],
  "callbacks": [
    "onStatusChanged:int",
    "onError:int+String"
  ]
}

Generated Code Patterns

Manager (Client API)

  • Singleton pattern (getInstance())
  • RemoteException handling with fallback values
  • Typed listener interfaces per callback
  • Internal AIDL callback dispatch
  • release() cleanup

Service (Server)

  • Extends AIDL.Stub
  • RemoteCallbackList for safe callback management
  • dump() for dumpsys debugging
  • Permission enforcement hook
  • Handler for main thread operations

SELinux

  • service_contexts mapping
  • Service type declaration
  • Per-domain access rules (system_app, platform_app, untrusted_app)
  • Hardware access stubs (sysfs, device nodes)

Templates

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

After Generation

  1. Copy framework/${AOSP}/frameworks/base/core/java/
  2. Copy services/${AOSP}/frameworks/base/services/core/java/
  3. Apply SystemServer_addService.patch
  4. Copy sepolicy/device/<vendor>/<device>/sepolicy/
  5. make framework services -j$(nproc)
  6. Verify: adb shell service list | grep <service_name>

License

MIT

About

AOSP System Service Generator - one command creates AIDL, Manager, Service, SELinux, sample app

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors