GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Why Go
  • Case Studies
  • Use Cases
  • Security
  • Learn
  • Effective Go
  • Go User Manual
  • Standard library
  • Release Notes
  • API
  • Packages
  • Recorded Talks
  • Meetups
  • Conferences

This view

  • Original page
  • New address

GeezerVison is showing pkg.go.dev (truncated) — binder module - github.com/AndroidGoLab/binder - Go Packages

Details

  • checked Valid go.mod file

    The Go module system was introduced in Go 1.11 and is the official dependency management solution for Go.

  • checked Redistributable license

    Redistributable licenses place minimal restrictions on how software can be used, modified, and redistributed.

  • checked Tagged version

    Modules with tagged versions give importers more predictable builds.

  • unchecked Stable version

    When a project reaches major version v1 it is considered stable.

  • Learn more about best practices

Repository

github.com/AndroidGoLab/binder

Links

  • Open Source Insights Logo Open Source Insights

README ¶

binder

Go Reference Go Report Card CI Go Version Ask AI

Call Android system services from pure Go. Provides ~14,000 type-safe Go methods across 1,500+ Android interfaces — ActivityManager, PowerManager, SurfaceFlinger, PackageManager, audio, camera and sensor HALs, and more — by speaking the Binder IPC wire protocol directly via /dev/binder ioctl syscalls. No Java, no NDK, no cgo required.

Includes a complete AIDL compiler that parses Android Interface Definition Language files and generates the Go proxies, a version-aware runtime that adapts transaction codes across Android API levels, and a CLI tool (bindercli) for interactive service discovery and invocation.

What can it do?

  • Query system services — battery level, GPS location, thermal status, running processes, installed packages
  • Control hardware — connect to WiFi, toggle flashlight, manage Bluetooth, configure audio
  • Interact with any binder service — ActivityManager, PowerManager, SurfaceFlinger, camera/sensor HALs, and more
  • No Java, no cgo — pure Go, cross-compiles to a static binary, runs on Android or any Linux with /dev/binder
  • CLI tool included — bindercli for interactive service discovery, method invocation, and debugging

Quick start

Go library — go get github.com/AndroidGoLab/binder — live GPS location via binder IPC:

package main

import (
    "context"
    "fmt"
    "math"
    "os"
    "time"

    "github.com/AndroidGoLab/binder/android/location"
    androidos "github.com/AndroidGoLab/binder/android/os"
    "github.com/AndroidGoLab/binder/binder"
    "github.com/AndroidGoLab/binder/binder/versionaware"
    "github.com/AndroidGoLab/binder/kernelbinder"
    "github.com/AndroidGoLab/binder/servicemanager"
)

// gpsListener receives location callbacks from the LocationManager.
type gpsListener struct{ fixCh chan location.Location }

func (l *gpsListener) OnLocationChanged(_ context.Context, locs []location.Location, _ androidos.IRemoteCallback) error {
    for _, loc := range locs { select { case l.fixCh <- loc: default: } }
    return nil
}
func (l *gpsListener) OnProviderEnabledChanged(_ context.Context, _ string, _ bool) error { return nil }
func (l *gpsListener) OnFlushComplete(_ context.Context, _ int32) error                   { return nil }

func main() {
    ctx := context.Background()
    drv, _ := kernelbinder.Open(ctx, binder.WithMapSize(128*1024))
    defer drv.Close(ctx)
    transport, _ := versionaware.NewTransport(ctx, drv, 0)
    sm := servicemanager.New(transport)

    lm, _ := location.GetLocationManager(ctx, sm)

    impl := &gpsListener{fixCh: make(chan location.Location, 1)}
    listener := location.NewLocationListenerStub(impl)

    request := location.LocationRequest{
        Provider: location.GpsProvider, IntervalMillis: 1000,
        ExpireAtRealtimeMillis: math.MaxInt64, DurationMillis: math.MaxInt64,
    }
    pkg := binder.DefaultCallerIdentity().PackageName
    _ = lm.RegisterLocationListener(ctx, location.GpsProvider, request, listener, pkg, "gps")
    defer lm.UnregisterLocationListener(ctx, listener)

    select {
    case loc := <-impl.fixCh:
        fmt.Printf("Lat: %.6f  Lon: %.6f  Alt: %.1f m  Accuracy: %.1f m\n",
            loc.LatitudeDegrees, loc.LongitudeDegrees, loc.AltitudeMeters, loc.HorizontalAccuracyMeters)
    case <-time.After(30 * time.Second):
        fmt.Fprintln(os.Stderr, "timed out")
    }
}

Full runnable example: examples/gps_location/

Or query power state:

power, _ := os.GetPowerManager(ctx, sm)
interactive, _ := power.IsInteractive(ctx)
fmt.Printf("Screen on: %v\n", interactive)

Related Projects

ndk, jni, binder (click to expand)

This project is part of a family of three Go libraries that cover the major Android interface surfaces. Each wraps a different layer of the Android platform:

graph TD
    subgraph "Go application"
        GO["Go code"]
    end

    subgraph "Interface libraries"
        NDK["<b>ndk</b><br/>C API bindings via cgo"]
        JNI["<b>jni</b><br/>Java API bindings via JNI+cgo"]
        AIDL["<b>binder</b><br/>Binder IPC, pure Go"]
    end

    subgraph "Android platform"
        CAPI["NDK C libraries<br/>(libcamera2ndk, libaaudio,<br/>libEGL, libvulkan, ...)"]
        JAVA["Java SDK<br/>(android.bluetooth,<br/>android.location, ...)"]
        BINDER["/dev/binder<br/>kernel driver"]
        SYSSVCS["System services<br/>(ActivityManager,<br/>PowerManager, ...)"]
    end

    GO --> NDK
    GO --> JNI
    GO --> AIDL

    NDK -- "cgo / #include" --> CAPI
    JNI -- "cgo / JNIEnv*" --> JAVA
    AIDL -- "ioctl syscalls" --> BINDER
    BINDER --> SYSSVCS
    JAVA -. "internally uses" .-> BINDER
    CAPI -. "some use" .-> BINDER
Library Interface Requires Best for
ndk Android NDK C APIs cgo + NDK toolchain High-performance hardware access: camera, audio, sensors, OpenGL/Vulkan, media codecs
jni Java Android SDK via JNI cgo + JNI + JVM/ART Java-only APIs with no NDK equivalent: Bluetooth, WiFi, NFC, location, telephony, content providers
binder (this project) Binder IPC (system services) pure Go (no cgo) Direct system service calls without Java: works on non-Android Linux with binder, minimal footprint
When to use which
  • Start with ndk when the NDK provides a C API for what you need (camera, audio, sensors, EGL/Vulkan, media codecs). These are the lowest-latency, lowest-overhead bindings since they go straight from Go to the C library via cgo.

  • Use jni when you need a Java Android SDK API that the NDK does not expose. Examples: Bluetooth discovery, WiFi P2P, NFC tag reading, location services, telephony, content providers, notifications. JNI is also the right choice when you need to interact with Java components (Activities, Services, BroadcastReceivers) or when you need the gRPC remote-access layer.

  • Use binder when you want pure-Go access to Android system services without any cgo dependency. This is ideal for lightweight tools, CLI programs, or scenarios where you want to talk to the binder driver from a non-Android Linux system. AIDL covers the same system services that Java SDK wraps (ActivityManager, PowerManager, etc.) but at the wire-protocol level.

  • Combine them when your application needs multiple layers. For example, a streaming app might use ndk for camera capture and audio encoding, jni for Bluetooth controller discovery, and binder for querying battery status from a companion daemon.

How they relate to each other

All three libraries talk to the same Android system services, but through different paths:

  • The NDK C APIs are provided by Google as stable C interfaces to Android platform features. Some (camera, sensors, audio) internally use binder IPC to talk to system services; others (EGL, Vulkan, OpenGL) talk directly to kernel drivers. The ndk library wraps these C APIs via cgo.
  • The Java SDK uses binder IPC internally for system service access (BluetoothManager, LocationManager, etc.), routing calls through the Android Runtime (ART/Dalvik). The jni library calls into these Java APIs via the JNI C interface and cgo.
  • The AIDL binder protocol is the underlying IPC mechanism that system-facing NDK and Java SDK APIs use. The binder library implements this protocol directly in pure Go, bypassing both C and Java layers entirely.

Usage Examples

Get GPS Location
import (
    "context"
    "fmt"
    "log"

    "github.com/AndroidGoLab/binder/android/location"
    "github.com/AndroidGoLab/binder/binder"
    "github.com/AndroidGoLab/binder/binder/versionaware"
    "github.com/AndroidGoLab/binder/kernelbinder"
    "github.com/AndroidGoLab/binder/servicemanager"
)

    ctx := context.Background()

    driver, err := kernelbinder.Open(ctx, binder.WithMapSize(128*1024))
    if err != nil {
        log.Fatal(err)
    }
    defer driver.Close(ctx)

    transport, err := versionaware.NewTransport(ctx, driver, 0)
    if err != nil {
        log.Fatal(err)
    }
    sm := servicemanager.New(transport)

    lm, err := location.GetLocationManager(ctx, sm)
    if err != nil {
        log.Fatal(err)
    }

    loc, err := lm.GetLastLocation(ctx, location.FusedProvider, location.LastLocationRequest{}, binder.DefaultCallerIdentity().PackageName)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("Lat: %f, Lon: %f, Alt: %f\n",
        loc.LatitudeDegrees, loc.LongitudeDegrees, loc.AltitudeMeters)
    fmt.Printf("Speed: %f m/s, Bearing: %f°\n",
        loc.SpeedMetersPerSecond, loc.BearingDegrees)
Check Power State
import (
    "context"
    "fmt"
    "log"

    genOs "github.com/AndroidGoLab/binder/android/os"
    "github.com/AndroidGoLab/binder/binder"
    "github.com/AndroidGoLab/binder/binder/versionaware"
    "github.com/AndroidGoLab/binder/kernelbinder"
    "github.com/AndroidGoLab/binder/servicemanager"
)

    ctx := context.Background()

    driver, err := kernelbinder.Open(ctx, binder.WithMapSize(128*1024))
    if err != nil {
        log.Fatal(err)
    }
    defer driver.Close(ctx)

    transport, err := versionaware.NewTransport(ctx, driver, 0)
    if err != nil {
        log.Fatal(err)
    }
    sm := servicemanager.New(transport)

    power, err := genOs.GetPowerManager(ctx, sm)
    if err != nil {
        log.Fatal(err)
    }

    interactive, _ := power.IsInteractive(ctx)
    fmt.Printf("Screen on: %v\n", interactive)

    powerSave, _ := power.IsPowerSaveMode(ctx)
    fmt.Printf("Power save: %v\n", powerSave)
List Binder Services
    sm := servicemanager.New(transport)

    services, err := sm.ListServices(ctx)
    if err != nil {
        log.Fatal(err)
    }

    for _, name := range services {
        svc, err := sm.CheckService(ctx, name)
        if err == nil && svc != nil && svc.IsAlive(ctx) {
            fmt.Printf("%-60s alive\n", name)
        }
    }
Call a System Service (ActivityManager)
import (
    "github.com/AndroidGoLab/binder/android/app"
    "github.com/AndroidGoLab/binder/servicemanager"
)

    svc, err := sm.GetService(ctx, servicemanager.ActivityService)
    if err != nil {
        log.Fatal(err)
    }
    am := app.NewActivityManagerProxy(svc)

    limit, _ := am.GetProcessLimit(ctx)
    fmt.Printf("Process limit: %d\n", limit)

    monkey, _ := am.IsUserAMonkey(ctx)
    fmt.Printf("Is monkey: %v\n", monkey)
Toggle Flashlight

Requires android.permission.CAMERA; see examples/flashlight_torch/ for the full runnable example with permission handling.

import (
    "context"

    "github.com/AndroidGoLab/binder/android/hardware"
    "github.com/AndroidGoLab/binder/binder"
    "github.com/AndroidGoLab/binder/parcel"
    "github.com/AndroidGoLab/binder/servicemanager"
)

// torchToken is a minimal TransactionReceiver for SetTorchMode's client binder.
type torchToken struct{}

func (t *torchToken) Descriptor() string { return "torch.client" }

func (t *torchToken) OnTransaction(
    _ context.Context,
    _ binder.TransactionCode,
    _ *parcel.Parcel,
) (*parcel.Parcel, error) {
    return parcel.New(), nil
}
    svc, err := sm.GetService(ctx, servicemanager.MediaCameraService)
    if err != nil {
        log.Fatal(err)
    }
    camera := hardware.NewCameraServiceProxy(svc)

    // The camera service requires a non-null client binder token.
    clientToken := binder.NewStubBinder(&torchToken{})
    clientToken.RegisterWithTransport(ctx, transport)

    // Turn torch on for camera "0"
    if err := camera.SetTorchMode(ctx, "0", true, clientToken); err != nil {
        log.Fatal(err)
    }
    fmt.Println("Torch ON")

    // Turn torch off
    _ = camera.SetTorchMode(ctx, "0", false, clientToken)
List All Installed Packages
import (
    "github.com/AndroidGoLab/binder/android/content/pm"
    "github.com/AndroidGoLab/binder/servicemanager"
)

    svc, err := sm.GetService(ctx, servicemanager.PackageService)
    if err != nil {
        log.Fatal(err)
    }
    pkgMgr := pm.NewPackageManagerProxy(svc)

    packages, err := pkgMgr.GetAllPackages(ctx)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("Found %d packages:\n", len(packages))
    for _, pkg := range packages {
        fmt.Println(" ", pkg)
    }
Handle Errors Gracefully
import (
    "errors"
    aidlerrors "github.com/AndroidGoLab/binder/errors"
    "github.com/AndroidGoLab/binder/servicemanager"
)

    // Non-blocking service check (returns nil if not found)
    svc, err := sm.CheckService(ctx, servicemanager.MediaCameraService)
    if err != nil {
        log.Fatal(err)
    }
    if svc == nil {
        fmt.Println("Camera service not available")
        return
    }

    // Typed error inspection
    _, err = someProxy.SomeMethod(ctx)
    var status *aidlerrors.StatusError
    if errors.As(err, &status) {
        switch status.Exception {
        case aidlerrors.ExceptionSecurity:
            fmt.Printf("Permission denied: %s\n", status.Message)
        case aidlerrors.ExceptionServiceSpecific:
            fmt.Printf("Service error %d: %s\n", status.ServiceSpecificCode, status.Message)
        default:
            fmt.Printf("AIDL error: %v\n", status)
        }
    }
Query Battery Level
import (
    "github.com/AndroidGoLab/binder/android/hardware/health"
    "github.com/AndroidGoLab/binder/servicemanager"
)

    svc, err := sm.GetService(ctx, servicemanager.ServiceName(health.DescriptorIHealth+"/default"))
    if err != nil {
        log.Fatal(err)
    }
    h := health.NewHealthProxy(svc)

    capacity, err := h.GetCapacity(ctx)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("Battery level: %d%%\n", capacity)

    info, err := h.GetHealthInfo(ctx)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("Status: %v, Temperature: %.1f °C\n",
        info.BatteryStatus, float64(info.BatteryTemperatureTenthsCelsius)/10)
    fmt.Printf("Voltage: %d mV, Current: %d µA\n",
        info.BatteryVoltageMillivolts, info.BatteryCurrentMicroamps)
Send a Raw Binder Transaction
import (
    "github.com/AndroidGoLab/binder/binder"
    "github.com/AndroidGoLab/binder/parcel"
    "github.com/AndroidGoLab/binder/servicemanager"
)

    svc, err := sm.GetService(ctx, servicemanager.ActivityService)
    if err != nil {
        log.Fatal(err)
    }

    // Build the request parcel.
    data := parcel.New()
    defer data.Recycle()
    data.WriteInterfaceToken("android.app.IActivityManager")
    data.WriteString16("android.permission.INTERNET")
    data.WriteInt32(int32(os.Getpid()))
    data.WriteInt32(int32(os.Getuid()))

    // Resolve the method's transaction code and send.
    code, err := svc.ResolveCode(ctx, "android.app.IActivityManager", "checkPermission")
    if err != nil {
        log.Fatal(err)
    }
    reply, err := svc.Transact(ctx, code, 0, data)
    if err != nil {
        log.Fatal(err)
    }
    defer reply.Recycle()

    // Read the AIDL status header, then the return value.
    if err := binder.ReadStatus(reply); err != nil {
        log.Fatal(err)
    }
    result, _ := reply.ReadInt32()
    fmt.Printf("checkPermission returned: %d\n", result)
Register a Server-Side Service
import (
    "context"

    "github.com/AndroidGoLab/binder/binder"
    "github.com/AndroidGoLab/binder/parcel"
    "github.com/AndroidGoLab/binder/servicemanager"
)

// myService implements binder.TransactionReceiver for a simple ping service.
type myService struct{}

func (s *myService) Descriptor() string { return "com.example.IPingService" }

func (s *myService) OnTransaction(
    ctx context.Context,
    code binder.TransactionCode,
    data *parcel.Parcel,
) (*parcel.Parcel, error) {
    reply := parcel.New()
    binder.WriteStatus(reply, nil)
    reply.WriteString16("pong")
    return reply, nil
}
    // Register with ServiceManager
    err := sm.AddService(ctx, servicemanager.ServiceName("my.service"), &myService{}, false, 0)
Using other services

The examples above cover specific subsystems, but the library supports all Android binder services — over 1,500 interfaces. To work with a service not shown above:

  1. Find the service name. Run bindercli service list on the device, or check servicemanager/service_names_gen.go for well-known constants.

  2. Find the generated proxy. Browse the android/ and com/ packages on pkg.go.dev or use grep:

# Find the proxy for a known AIDL interface
grep -r 'DescriptorI.*= "android.hardware.vibrator.IVibrator"' android/
  1. Connect and call methods:
    svc, err := sm.GetService(ctx, servicemanager.ServiceName(
        vibrator.DescriptorIVibrator+"/default"))
    if err != nil {
        log.Fatal(err)
    }
    proxy := vibrator.NewVibratorProxy(svc)
    caps, err := proxy.GetCapabilities(ctx)
  1. For HAL services (hardware abstraction layers), the service name is the AIDL descriptor plus /default:
    svc, err := sm.GetService(ctx, servicemanager.ServiceName(health.DescriptorIHealth+"/default"))
  1. For services without a generated proxy, use raw transactions (see Send a Raw Binder Transaction above).

More examples: examples/

Example Queries
account_manager List accounts on the device via AccountManager.
activity_manager Process limits, monkey test flag, permission checks
aidl_bridge Expose a bridge service that forwards calls to another binder service.
aidl_explorer Introspect methods on binder services.
alarm_auditor Audit pending alarms via AlarmManager.
app_hibernation Query app hibernation status via the AppHibernationService.
attention_monitor Monitor user presence via PowerManager and display state.
attestation_verify Query attestation verification and related security services.
audio_focus Query current audio focus state via AudioService.
audio_recording_monitor Detect which apps are currently recording audio.
audio_status Audio device info, volume state
battery_health Capacity, charge status, current draw
binder_fuzzer Send randomized parcel data to services to test robustness.
binder_latency Measure round-trip binder transaction times.
ble_sensor_collector BLE sensor collector: scan for BLE devices and register a GATT client.
bluetooth_audio_routing Manage Bluetooth A2DP audio connections via binder.
bluetooth_inventory Enumerate paired/bonded Bluetooth devices and query adapter info.
bluetooth_status Query Bluetooth adapter status and scan for BLE devices via binder.
camera_capture Camera frame capture using gralloc-allocated buffers.
camera_connect Camera device connection with callback stub
carrier_config Query carrier configuration: default carrier service package,
charge_monitor Monitor charging status and battery health via the Health HAL.
clipboard_monitor Set and read clipboard text via the Android clipboard binder service.
codec2_encode Codec2 H.264 encoding via HIDL hwbinder.
compliance_checker Verify device compliance: encryption, security state, OTA update status.
credential_manager Query the CredentialManager service for availability.
device_info Device properties, build info
device_policy Query DevicePolicyManager for device administration state.
display_info Display IDs, brightness, night mode
dnd_controller Query and display Do Not Disturb (Zen) mode via NotificationManager.
dns_config Query network configuration via the netd system service.
dream_manager Query screensaver/daydream state via DreamManager.
dual_sim Monitor SIM slots: query active subscription count, slot info,
error_handling Graceful error handling: service checks, typed errors, permissions
esim_manager Query eSIM/eUICC profile management: OTA status, supported countries,
factory_reset Factory reset demonstration via DevicePolicyManager.
flashlight_torch Toggle flashlight/torch via ICameraService
geofence Query location provider availability for geofencing use cases.
getservice_vs_checkservice Binary getservice_vs_checkservice compares GetService vs CheckService
gnss_diagnostics Query GNSS hardware model name, year, and capabilities via LocationManager.
gps_location Live GPS fix via ILocationListener callback
headless_controller Headless device orchestration: query power, display, and process state.
ims_monitor Monitor IMS registration state via ITelephony proxy.
input_injector Inject input events via InputManager's binder interface.
job_scheduler_monitor Query JobScheduler state from the "jobscheduler" service.
keymint_delete_test Binary keymint_delete_test calls DeleteAllKeys on the KeyMint HAL
keystore_ops Query Keystore2 service for key entries and counts (read-only).
kiosk_lockdown Query activity/window manager for kiosk lockdown information.
last_location Retrieve the last known fused location without registering a listener.
list_packages List all installed packages via GetAllPackages
list_services Enumerate all binder services, ping each
location_benchmark Compare location providers by querying all providers and their properties.
mdm_agent Lightweight MDM agent querying device policies via DevicePolicyManager.
media_session_control Enumerate active media sessions and query global priority.
media_transcoding Query media transcoding service status and media metrics session IDs.
memory_pressure Read memory pressure info from ActivityManager.
mock_service Create a mock binder service for testing.
network_monitor Check network connectivity status via NetworkManagementService.
network_policy Query network policy settings via the INetworkPolicyManager system service.
notification_listener Query notification state via NotificationManager: zen mode, active notifications.
oem_lock_status Query OemLockService for bootloader lock state and OEM unlock status.
ota_status Query update engine for OTA update status.
package_monitor Monitor installed packages by polling the PackageManager.
package_query Package list, installation info
permission_audit Audit permissions for installed apps via the ActivityManager.
permission_boundary Test which binder calls succeed or fail from the current security context.
permission_checker Check permissions for UIDs/PIDs via ActivityManager.
power_profiling Measure battery current draw over time via the Health HAL.
power_save_auto Query power save mode status and related settings via PowerManager.
power_status Power supply state, charging info
process_watchdog List running processes via ActivityManager and check resource usage.
qr_scanner_daemon QR/barcode scanner daemon that captures camera frames for processing.
remote_diagnostics Collect comprehensive device state for remote diagnostics.
rkp_monitor Monitor remote key provisioning (RKP) and device security state.
rotation_resolver Query device rotation and display state via WindowManager and DisplayManager.
satellite_check Check satellite telephony readiness by querying the telephony service.
screen_control Check screen on/off state and display interactivity via PowerManager.
secure_element Query OMAPI SecureElementService for available readers.
security_test_apk Binary security_test_apk probes whether an app-sandboxed process can
sensor_gateway Stream live sensor events via the SensorManager event queue callback.
sensor_reader Read sensor data from the SensorManager HAL.
server_service Register a Go service and call it back via binder
server_service_aidl Register a Go binder service using a generated AIDL stub.
signage_controller Display brightness and power control for digital signage.
sim_status Query telephony service for SIM state: radio, ICC card, data state.
sms_monitor Query SMS service: preferred subscription, IMS SMS support.
softap_manage WiFi hotspot enable/disable, config
softap_tether_offload Tethering offload config, stats
softap_wifi_hal WiFi chip info, AP interface state
sound_trigger List sound trigger modules via SoundTriggerMiddlewareService.
statusbar_control Query status bar state: navigation bar mode, tracing, last system key.
storage_info Storage device stats, mount points
suspend_logger Acquire and release a wake lock via the PowerManager binder service.
system_app_classifier Classify installed packages as system or user apps.
thermal_monitor Poll thermal service for CPU/GPU temperatures, throttling status, and cooling devices.
timelapse_capture Periodic timelapse camera capture via binder.
transaction_resolver Resolve AIDL method names to transaction codes for binder services.
usage_stats Query app usage statistics via the UsageStatsManager.
usb_tracker Query USB device state: ports, functions, speed, and HAL versions.
user_manager Query user profiles from the UserManager service.
vehicle_telematics Collect GPS, battery, and device diagnostics for vehicle telematics.
version_compat Validate proxy compatibility across API levels.
volume_control Get and set stream volumes via AudioService.
vpn_monitor Check VPN status via the IVpnManager system service.
wakelock_audit Enumerate supported wake lock levels via PowerManager.
wifi_scanner Scan available WiFi networks via the wificond system service.

bindercli Quick Start

bindercli lets you call any Android system service from the command line — no Go code needed.

Install and deploy:

GOOS=linux GOARCH=arm64 go build -o build/bindercli ./cmd/bindercli/
adb push build/bindercli /data/local/tmp/

Try it:

# List all binder services
adb shell /data/local/tmp/bindercli service list

# Check battery level
adb shell /data/local/tmp/bindercli android.hardware.health.IHealth get-health-info

# Query ActivityManager
adb shell /data/local/tmp/bindercli android.app.IActivityManager get-process-limit

# Get GPS hardware info
adb shell /data/local/tmp/bindercli android.location.ILocationManager get-gnss-hardware-model-name

See the full bindercli reference for all subcommands and more examples.

Packages

Package Description Import Path
AIDL Pipeline (tools/pkg/)
parser tools/pkg/parser Lexer and recursive-descent parser producing an AST from .aidl files github.com/AndroidGoLab/binder/tools/pkg/parser
resolver tools/pkg/resolver Import resolution across search paths with type registry and circular-import detection github.com/AndroidGoLab/binder/tools/pkg/resolver
codegen tools/pkg/codegen Go code generator for proxies, parcelables, enums, unions, and constants github.com/AndroidGoLab/binder/tools/pkg/codegen
validate tools/pkg/validate Semantic validation: type resolution, parameter directions, oneway constraints github.com/AndroidGoLab/binder/tools/pkg/validate
Runtime
binder binder Binder IPC abstractions: IBinder interface, Transact(), status/exception handling github.com/AndroidGoLab/binder/binder
parcel parcel Binder wire format: 4-byte aligned, little-endian serialization github.com/AndroidGoLab/binder/parcel
kernelbinder kernelbinder Linux /dev/binder driver: open, mmap, ioctl, protocol negotiation github.com/AndroidGoLab/binder/kernelbinder
servicemanager servicemanager Client for android.os.IServiceManager: GetService(), ListServices(), etc. github.com/AndroidGoLab/binder/servicemanager
errors errors AIDL exception types: ExceptionCode, StatusError github.com/AndroidGoLab/binder/errors
Testing
testutil tools/pkg/testutil Mock binder and reflection-based smoke testing for generated proxies github.com/AndroidGoLab/binder/tools/pkg/testutil
Generated AOSP Packages

385 packages: 1513 interfaces, 2370 parcelables, 957 enums, 133 unions.

aaudio (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
aaudio 2 5 0 0 github.com/AndroidGoLab/binder/aaudio
android (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
android 6 1 0 0 github.com/AndroidGoLab/binder/android
android/accessibilityservice (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/accessibilityservice 4 3 0 0 github.com/AndroidGoLab/binder/android/accessibilityservice
android/accounts (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/accounts 4 2 0 0 github.com/AndroidGoLab/binder/android/accounts
android/app (24 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/app 50 61 1 0 github.com/AndroidGoLab/binder/android/app
android/app/admin 6 20 0 0 github.com/AndroidGoLab/binder/android/app/admin
android/app/ambientcontext 2 2 0 0 github.com/AndroidGoLab/binder/android/app/ambientcontext
android/app/assist 0 3 0 0 github.com/AndroidGoLab/binder/android/app/assist
android/app/backup 8 4 0 0 github.com/AndroidGoLab/binder/android/app/backup
android/app/blob 3 3 0 0 github.com/AndroidGoLab/binder/android/app/blob
android/app/contentsuggestions 3 4 0 0 github.com/AndroidGoLab/binder/android/app/contentsuggestions
android/app/job 4 5 0 0 github.com/AndroidGoLab/binder/android/app/job
android/app/ondeviceintelligence 9 3 0 0 github.com/AndroidGoLab/binder/android/app/ondeviceintelligence
android/app/people 2 2 0 0 github.com/AndroidGoLab/binder/android/app/people
android/app/pinner 1 1 0 0 github.com/AndroidGoLab/binder/android/app/pinner
android/app/prediction 2 5 0 0 github.com/AndroidGoLab/binder/android/app/prediction
android/app/search 2 5 0 0 github.com/AndroidGoLab/binder/android/app/search
android/app/servertransaction 0 1 0 0 github.com/AndroidGoLab/binder/android/app/servertransaction
android/app/slice 2 2 0 0 github.com/AndroidGoLab/binder/android/app/slice
android/app/smartspace 2 4 0 0 github.com/AndroidGoLab/binder/android/app/smartspace
android/app/tare 1 0 0 0 github.com/AndroidGoLab/binder/android/app/tare
android/app/time 2 13 0 0 github.com/AndroidGoLab/binder/android/app/time
android/app/timedetector 1 2 0 0 github.com/AndroidGoLab/binder/android/app/timedetector
android/app/timezonedetector 1 2 0 0 github.com/AndroidGoLab/binder/android/app/timezonedetector
android/app/trust 3 0 0 0 github.com/AndroidGoLab/binder/android/app/trust
android/app/usage 3 9 0 0 github.com/AndroidGoLab/binder/android/app/usage
android/app/wallpapereffectsgeneration 2 2 0 0 github.com/AndroidGoLab/binder/android/app/wallpapereffectsgeneration
android/app/wearable 1 0 0 0 github.com/AndroidGoLab/binder/android/app/wearable
android/apphibernation (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/apphibernation 1 1 0 0 github.com/AndroidGoLab/binder/android/apphibernation
android/appwidget (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/appwidget 0 1 0 0 github.com/AndroidGoLab/binder/android/appwidget
android/binderdebug (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/binderdebug/test 1 0 0 0 github.com/AndroidGoLab/binder/android/binderdebug/test
android/bluetooth (2 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/bluetooth 50 32 1 0 github.com/AndroidGoLab/binder/android/bluetooth
android/bluetooth/le 4 12 0 0 github.com/AndroidGoLab/binder/android/bluetooth/le
android/companion (8 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/companion 8 5 0 0 github.com/AndroidGoLab/binder/android/companion
android/companion/datatransfer 0 1 0 0 github.com/AndroidGoLab/binder/android/companion/datatransfer
android/companion/virtual 6 2 0 0 github.com/AndroidGoLab/binder/android/companion/virtual
android/companion/virtual/audio 2 0 0 0 github.com/AndroidGoLab/binder/android/companion/virtual/audio
android/companion/virtual/camera 1 1 0 0 github.com/AndroidGoLab/binder/android/companion/virtual/camera
android/companion/virtual/sensor 1 3 0 0 github.com/AndroidGoLab/binder/android/companion/virtual/sensor
android/companion/virtualcamera 2 2 3 0 github.com/AndroidGoLab/binder/android/companion/virtualcamera
android/companion/virtualnative 1 0 0 0 github.com/AndroidGoLab/binder/android/companion/virtualnative
android/content (9 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/content 12 23 0 0 github.com/AndroidGoLab/binder/android/content
android/content/integrity 1 1 0 0 github.com/AndroidGoLab/binder/android/content/integrity
android/content/om 1 3 0 0 github.com/AndroidGoLab/binder/android/content/om
android/content/pm 27 59 2 0 github.com/AndroidGoLab/binder/android/content/pm
android/content/pm/dex 2 0 0 0 github.com/AndroidGoLab/binder/android/content/pm/dex
android/content/pm/permission 1 1 0 0 github.com/AndroidGoLab/binder/android/content/pm/permission
android/content/pm/verify/domain 1 4 0 0 github.com/AndroidGoLab/binder/android/content/pm/verify/domain
android/content/res 1 3 0 0 github.com/AndroidGoLab/binder/android/content/res
android/content/rollback 1 2 0 0 github.com/AndroidGoLab/binder/android/content/rollback
android/credentials (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/credentials 7 14 0 0 github.com/AndroidGoLab/binder/android/credentials
android/database (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/database 1 1 0 0 github.com/AndroidGoLab/binder/android/database
android/debug (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/debug 3 2 1 0 github.com/AndroidGoLab/binder/android/debug
android/dvr (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/dvr 1 0 0 0 github.com/AndroidGoLab/binder/android/dvr
android/flags (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/flags 2 1 0 0 github.com/AndroidGoLab/binder/android/flags
android/frameworks (11 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/frameworks/automotive/display 1 1 1 0 github.com/AndroidGoLab/binder/android/frameworks/automotive/display
android/frameworks/automotive/powerpolicy 2 2 1 0 github.com/AndroidGoLab/binder/android/frameworks/automotive/powerpolicy
android/frameworks/automotive/powerpolicy/internal_ 1 1 0 0 github.com/AndroidGoLab/binder/android/frameworks/automotive/powerpolicy/internal_
android/frameworks/automotive/telemetry 2 2 0 0 github.com/AndroidGoLab/binder/android/frameworks/automotive/telemetry
android/frameworks/cameraservice/common 0 3 3 0 github.com/AndroidGoLab/binder/android/frameworks/cameraservice/common
android/frameworks/cameraservice/device 2 9 5 1 github.com/AndroidGoLab/binder/android/frameworks/cameraservice/device
android/frameworks/cameraservice/service 2 1 1 0 github.com/AndroidGoLab/binder/android/frameworks/cameraservice/service
android/frameworks/location/altitude 1 4 0 0 github.com/AndroidGoLab/binder/android/frameworks/location/altitude
android/frameworks/sensorservice 4 0 0 0 github.com/AndroidGoLab/binder/android/frameworks/sensorservice
android/frameworks/stats 1 3 2 2 github.com/AndroidGoLab/binder/android/frameworks/stats
android/frameworks/vibrator 2 1 0 1 github.com/AndroidGoLab/binder/android/frameworks/vibrator
android/graphics (4 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/graphics 0 8 0 0 github.com/AndroidGoLab/binder/android/graphics
android/graphics/bufferstreams 3 4 0 1 github.com/AndroidGoLab/binder/android/graphics/bufferstreams
android/graphics/drawable 0 1 0 0 github.com/AndroidGoLab/binder/android/graphics/drawable
android/graphics/fonts 0 1 0 0 github.com/AndroidGoLab/binder/android/graphics/fonts
android/gui (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/gui 12 47 8 2 github.com/AndroidGoLab/binder/android/gui
android/hardware (118 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/hardware 9 9 1 0 github.com/AndroidGoLab/binder/android/hardware
android/hardware/audio/common 0 5 0 0 github.com/AndroidGoLab/binder/android/hardware/audio/common
android/hardware/audio/core 11 18 6 2 github.com/AndroidGoLab/binder/android/hardware/audio/core
android/hardware/audio/core/sounddose 2 1 0 0 github.com/AndroidGoLab/binder/android/hardware/audio/core/sounddose
android/hardware/audio/effect 2 44 15 37 github.com/AndroidGoLab/binder/android/hardware/audio/effect
android/hardware/audio/sounddose 1 0 0 0 github.com/AndroidGoLab/binder/android/hardware/audio/sounddose
android/hardware/authsecret 1 0 0 0 github.com/AndroidGoLab/binder/android/hardware/authsecret
android/hardware/automotive/audiocontrol 4 3 2 0 github.com/AndroidGoLab/binder/android/hardware/automotive/audiocontrol
android/hardware/automotive/can 1 5 2 3 github.com/AndroidGoLab/binder/android/hardware/automotive/can
android/hardware/automotive/evs 7 19 9 0 github.com/AndroidGoLab/binder/android/hardware/automotive/evs
android/hardware/automotive/ivn 1 3 2 0 github.com/AndroidGoLab/binder/android/hardware/automotive/ivn
android/hardware/automotive/occupant_awareness 2 5 4 0 github.com/AndroidGoLab/binder/android/hardware/automotive/occupant_awareness
android/hardware/automotive/remoteaccess 2 2 1 0 github.com/AndroidGoLab/binder/android/hardware/automotive/remoteaccess
android/hardware/automotive/vehicle 2 31 107 0 github.com/AndroidGoLab/binder/android/hardware/automotive/vehicle
android/hardware/biometrics 14 5 1 0 github.com/AndroidGoLab/binder/android/hardware/biometrics
android/hardware/biometrics/common 1 6 7 2 github.com/AndroidGoLab/binder/android/hardware/biometrics/common
android/hardware/biometrics/face 3 7 6 0 github.com/AndroidGoLab/binder/android/hardware/biometrics/face
android/hardware/biometrics/fingerprint 3 4 4 0 github.com/AndroidGoLab/binder/android/hardware/biometrics/fingerprint
android/hardware/bluetooth 2 0 1 0 github.com/AndroidGoLab/binder/android/hardware/bluetooth
android/hardware/bluetooth/audio 3 83 26 12 github.com/AndroidGoLab/binder/android/hardware/bluetooth/audio
android/hardware/bluetooth/finder 1 1 0 0 github.com/AndroidGoLab/binder/android/hardware/bluetooth/finder
android/hardware/bluetooth/lmp_event 2 1 3 0 github.com/AndroidGoLab/binder/android/hardware/bluetooth/lmp_event
android/hardware/bluetooth/offload/leaudio 2 1 0 0 github.com/AndroidGoLab/binder/android/hardware/bluetooth/offload/leaudio
android/hardware/bluetooth/ranging 3 9 12 0 github.com/AndroidGoLab/binder/android/hardware/bluetooth/ranging
android/hardware/boot 1 0 1 0 github.com/AndroidGoLab/binder/android/hardware/boot
android/hardware/broadcastradio 4 11 5 1 github.com/AndroidGoLab/binder/android/hardware/broadcastradio
android/hardware/camera/common 0 3 5 0 github.com/AndroidGoLab/binder/android/hardware/camera/common
android/hardware/camera/device 5 19 9 2 github.com/AndroidGoLab/binder/android/hardware/camera/device
android/hardware/camera/metadata 0 0 97 0 github.com/AndroidGoLab/binder/android/hardware/camera/metadata
android/hardware/camera/provider 2 2 0 0 github.com/AndroidGoLab/binder/android/hardware/camera/provider
android/hardware/camera2 5 1 0 0 github.com/AndroidGoLab/binder/android/hardware/camera2
android/hardware/camera2/extension 15 15 0 0 github.com/AndroidGoLab/binder/android/hardware/camera2/extension
android/hardware/camera2/impl 0 3 0 0 github.com/AndroidGoLab/binder/android/hardware/camera2/impl
android/hardware/camera2/params 0 4 0 0 github.com/AndroidGoLab/binder/android/hardware/camera2/params
android/hardware/camera2/utils 0 3 0 0 github.com/AndroidGoLab/binder/android/hardware/camera2/utils
android/hardware/cas 4 4 4 1 github.com/AndroidGoLab/binder/android/hardware/cas
android/hardware/common 0 3 0 0 github.com/AndroidGoLab/binder/android/hardware/common
android/hardware/common/fmq 0 2 2 0 github.com/AndroidGoLab/binder/android/hardware/common/fmq
android/hardware/confirmationui 2 0 2 0 github.com/AndroidGoLab/binder/android/hardware/confirmationui
android/hardware/contexthub 2 9 4 0 github.com/AndroidGoLab/binder/android/hardware/contexthub
android/hardware/devicestate 2 1 0 0 github.com/AndroidGoLab/binder/android/hardware/devicestate
android/hardware/display 5 11 0 0 github.com/AndroidGoLab/binder/android/hardware/display
android/hardware/drm 4 22 10 2 github.com/AndroidGoLab/binder/android/hardware/drm
android/hardware/dumpstate 1 0 1 0 github.com/AndroidGoLab/binder/android/hardware/dumpstate
android/hardware/face 3 7 0 0 github.com/AndroidGoLab/binder/android/hardware/face
android/hardware/fastboot 1 0 1 0 github.com/AndroidGoLab/binder/android/hardware/fastboot
android/hardware/fingerprint 8 5 0 0 github.com/AndroidGoLab/binder/android/hardware/fingerprint
android/hardware/gatekeeper 1 2 0 0 github.com/AndroidGoLab/binder/android/hardware/gatekeeper
android/hardware/gnss 22 30 17 0 github.com/AndroidGoLab/binder/android/hardware/gnss
android/hardware/gnss/measurement_corrections 2 4 0 0 github.com/AndroidGoLab/binder/android/hardware/gnss/measurement_corrections
android/hardware/gnss/visibility_control 2 1 3 0 github.com/AndroidGoLab/binder/android/hardware/gnss/visibility_control
android/hardware/graphics/allocator 1 2 1 0 github.com/AndroidGoLab/binder/android/hardware/graphics/allocator
android/hardware/graphics/common 0 13 14 1 github.com/AndroidGoLab/binder/android/hardware/graphics/common
android/hardware/graphics/composer3 3 43 14 1 github.com/AndroidGoLab/binder/android/hardware/graphics/composer3
android/hardware/hdmi 12 3 0 0 github.com/AndroidGoLab/binder/android/hardware/hdmi
android/hardware/health 2 4 6 0 github.com/AndroidGoLab/binder/android/hardware/health
android/hardware/health/storage 2 0 1 0 github.com/AndroidGoLab/binder/android/hardware/health/storage
android/hardware/identity 4 5 1 0 github.com/AndroidGoLab/binder/android/hardware/identity
android/hardware/input 7 21 0 0 github.com/AndroidGoLab/binder/android/hardware/input
android/hardware/input/common 0 4 11 0 github.com/AndroidGoLab/binder/android/hardware/input/common
android/hardware/input/processor 1 0 0 0 github.com/AndroidGoLab/binder/android/hardware/input/processor
android/hardware/ir 1 1 0 0 github.com/AndroidGoLab/binder/android/hardware/ir
android/hardware/iris 1 0 0 0 github.com/AndroidGoLab/binder/android/hardware/iris
android/hardware/keymaster 0 3 2 0 github.com/AndroidGoLab/binder/android/hardware/keymaster
android/hardware/light 1 2 3 0 github.com/AndroidGoLab/binder/android/hardware/light
android/hardware/lights 1 2 0 0 github.com/AndroidGoLab/binder/android/hardware/lights
android/hardware/location 12 12 0 0 github.com/AndroidGoLab/binder/android/hardware/location
android/hardware/macsec 1 0 0 0 github.com/AndroidGoLab/binder/android/hardware/macsec
android/hardware/media/bufferpool2 4 7 1 1 github.com/AndroidGoLab/binder/android/hardware/media/bufferpool2
android/hardware/media/c2 10 35 5 2 github.com/AndroidGoLab/binder/android/hardware/media/c2
android/hardware/memtrack 1 2 1 0 github.com/AndroidGoLab/binder/android/hardware/memtrack
android/hardware/net/nlinterceptor 1 1 0 0 github.com/AndroidGoLab/binder/android/hardware/net/nlinterceptor
android/hardware/neuralnetworks 7 26 8 3 github.com/AndroidGoLab/binder/android/hardware/neuralnetworks
android/hardware/nfc 2 2 4 0 github.com/AndroidGoLab/binder/android/hardware/nfc
android/hardware/oemlock 1 0 1 0 github.com/AndroidGoLab/binder/android/hardware/oemlock
android/hardware/power 2 6 5 1 github.com/AndroidGoLab/binder/android/hardware/power
android/hardware/power/stats 1 9 1 0 github.com/AndroidGoLab/binder/android/hardware/power/stats
android/hardware/radio 5 13 7 0 github.com/AndroidGoLab/binder/android/hardware/radio
android/hardware/radio/config 3 4 1 0 github.com/AndroidGoLab/binder/android/hardware/radio/config
android/hardware/radio/data 3 18 6 4 github.com/AndroidGoLab/binder/android/hardware/radio/data
android/hardware/radio/ims 3 4 14 0 github.com/AndroidGoLab/binder/android/hardware/radio/ims
android/hardware/radio/ims/media 4 15 7 2 github.com/AndroidGoLab/binder/android/hardware/radio/ims/media
android/hardware/radio/messaging 3 11 1 0 github.com/AndroidGoLab/binder/android/hardware/radio/messaging
android/hardware/radio/modem 3 8 5 0 github.com/AndroidGoLab/binder/android/hardware/radio/modem
android/hardware/radio/network 3 43 21 5 github.com/AndroidGoLab/binder/android/hardware/radio/network
android/hardware/radio/sap 2 0 6 0 github.com/AndroidGoLab/binder/android/hardware/radio/sap
android/hardware/radio/sim 3 15 7 0 github.com/AndroidGoLab/binder/android/hardware/radio/sim
android/hardware/radio/voice 3 18 9 0 github.com/AndroidGoLab/binder/android/hardware/radio/voice
android/hardware/rebootescrow 1 0 0 0 github.com/AndroidGoLab/binder/android/hardware/rebootescrow
android/hardware/secure_element 2 1 0 0 github.com/AndroidGoLab/binder/android/hardware/secure_element
android/hardware/security/authgraph 1 9 1 1 github.com/AndroidGoLab/binder/android/hardware/security/authgraph
android/hardware/security/keymint 3 12 13 1 github.com/AndroidGoLab/binder/android/hardware/security/keymint
android/hardware/security/secretkeeper 1 1 0 0 github.com/AndroidGoLab/binder/android/hardware/security/secretkeeper
android/hardware/security/secureclock 1 2 0 0 github.com/AndroidGoLab/binder/android/hardware/security/secureclock
android/hardware/security/see/storage 4 4 6 0 github.com/AndroidGoLab/binder/android/hardware/security/see/storage
android/hardware/security/sharedsecret 1 1 0 0 github.com/AndroidGoLab/binder/android/hardware/security/sharedsecret
android/hardware/sensors 2 19 8 2 github.com/AndroidGoLab/binder/android/hardware/sensors
android/hardware/soundtrigger 1 12 1 0 github.com/AndroidGoLab/binder/android/hardware/soundtrigger
android/hardware/soundtrigger3 3 0 0 0 github.com/AndroidGoLab/binder/android/hardware/soundtrigger3
android/hardware/tests/extension/vibrator 1 0 2 0 github.com/AndroidGoLab/binder/android/hardware/tests/extension/vibrator
android/hardware/tetheroffload 2 3 2 0 github.com/AndroidGoLab/binder/android/hardware/tetheroffload
android/hardware/thermal 3 3 3 0 github.com/AndroidGoLab/binder/android/hardware/thermal
android/hardware/threadnetwork 2 0 0 0 github.com/AndroidGoLab/binder/android/hardware/threadnetwork
android/hardware/tv/hdmi/cec 2 1 6 0 github.com/AndroidGoLab/binder/android/hardware/tv/hdmi/cec
android/hardware/tv/hdmi/connection 2 1 3 0 github.com/AndroidGoLab/binder/android/hardware/tv/hdmi/connection
android/hardware/tv/hdmi/earc 2 0 2 0 github.com/AndroidGoLab/binder/android/hardware/tv/hdmi/earc
android/hardware/tv/input 2 5 4 0 github.com/AndroidGoLab/binder/android/hardware/tv/input
android/hardware/tv/tuner 12 60 92 28 github.com/AndroidGoLab/binder/android/hardware/tv/tuner
android/hardware/usb 6 9 14 2 github.com/AndroidGoLab/binder/android/hardware/usb
android/hardware/usb/gadget 2 1 2 0 github.com/AndroidGoLab/binder/android/hardware/usb/gadget
android/hardware/uwb 3 0 2 0 github.com/AndroidGoLab/binder/android/hardware/uwb
android/hardware/uwb/fira_android 0 0 12 0 github.com/AndroidGoLab/binder/android/hardware/uwb/fira_android
android/hardware/vibrator 3 3 4 1 github.com/AndroidGoLab/binder/android/hardware/vibrator
android/hardware/weaver 1 2 1 0 github.com/AndroidGoLab/binder/android/hardware/weaver
android/hardware/wifi 12 92 55 0 github.com/AndroidGoLab/binder/android/hardware/wifi
android/hardware/wifi/common 0 1 0 0 github.com/AndroidGoLab/binder/android/hardware/wifi/common
android/hardware/wifi/hostapd 2 7 8 0 github.com/AndroidGoLab/binder/android/hardware/wifi/hostapd
android/hardware/wifi/supplicant 10 45 65 0 github.com/AndroidGoLab/binder/android/hardware/wifi/supplicant
android/location (2 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/location 14 20 0 0 github.com/AndroidGoLab/binder/android/location
android/location/provider 5 4 0 0 github.com/AndroidGoLab/binder/android/location/provider
android/media (18 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/media 66 97 29 2 github.com/AndroidGoLab/binder/android/media
android/media/audio 1 0 1 0 github.com/AndroidGoLab/binder/android/media/audio
android/media/audio/common 0 41 31 6 github.com/AndroidGoLab/binder/android/media/audio/common
android/media/audiopolicy 1 5 0 0 github.com/AndroidGoLab/binder/android/media/audiopolicy
android/media/browse 0 1 0 0 github.com/AndroidGoLab/binder/android/media/browse
android/media/metrics 1 6 0 0 github.com/AndroidGoLab/binder/android/media/metrics
android/media/midi 5 2 0 0 github.com/AndroidGoLab/binder/android/media/midi
android/media/musicrecognition 5 1 0 0 github.com/AndroidGoLab/binder/android/media/musicrecognition
android/media/permission 0 1 0 0 github.com/AndroidGoLab/binder/android/media/permission
android/media/projection 4 2 1 0 github.com/AndroidGoLab/binder/android/media/projection
android/media/session 11 4 0 0 github.com/AndroidGoLab/binder/android/media/session
android/media/soundtrigger 2 10 6 0 github.com/AndroidGoLab/binder/android/media/soundtrigger
android/media/soundtrigger_middleware 8 3 0 0 github.com/AndroidGoLab/binder/android/media/soundtrigger_middleware
android/media/tv 11 17 0 0 github.com/AndroidGoLab/binder/android/media/tv
android/media/tv/ad 7 1 0 0 github.com/AndroidGoLab/binder/android/media/tv/ad
android/media/tv/interactive 7 2 0 0 github.com/AndroidGoLab/binder/android/media/tv/interactive
android/media/tv/tuner 12 0 0 0 github.com/AndroidGoLab/binder/android/media/tv/tuner
android/media/tv/tunerresourcemanager 2 9 0 0 github.com/AndroidGoLab/binder/android/media/tv/tunerresourcemanager
android/net (5 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/net 11 13 0 0 github.com/AndroidGoLab/binder/android/net
android/net/vcn 3 3 0 0 github.com/AndroidGoLab/binder/android/net/vcn
android/net/wifi/nl80211 10 6 0 0 github.com/AndroidGoLab/binder/android/net/wifi/nl80211
android/net/wifi/sharedconnectivity/app 0 6 0 0 github.com/AndroidGoLab/binder/android/net/wifi/sharedconnectivity/app
android/net/wifi/sharedconnectivity/service 2 0 0 0 github.com/AndroidGoLab/binder/android/net/wifi/sharedconnectivity/service
android/nfc (2 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/nfc 12 9 0 0 github.com/AndroidGoLab/binder/android/nfc
android/nfc/cardemulation 0 3 0 0 github.com/AndroidGoLab/binder/android/nfc/cardemulation
android/os (7 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/os 53 54 5 1 github.com/AndroidGoLab/binder/android/os
android/os/connectivity 0 4 0 0 github.com/AndroidGoLab/binder/android/os/connectivity
android/os/health 0 1 0 0 github.com/AndroidGoLab/binder/android/os/health
android/os/image 1 0 0 0 github.com/AndroidGoLab/binder/android/os/image
android/os/incremental 4 4 0 0 github.com/AndroidGoLab/binder/android/os/incremental
android/os/logcat 1 0 0 0 github.com/AndroidGoLab/binder/android/os/logcat
android/os/storage 4 6 0 0 github.com/AndroidGoLab/binder/android/os/storage
android/permission (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/permission 5 5 0 0 github.com/AndroidGoLab/binder/android/permission
android/print (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/print 11 8 0 0 github.com/AndroidGoLab/binder/android/print
android/printservice (2 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/printservice 2 1 0 0 github.com/AndroidGoLab/binder/android/printservice
android/printservice/recommendation 3 1 0 0 github.com/AndroidGoLab/binder/android/printservice/recommendation
android/se (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/se/omapi 5 0 0 0 github.com/AndroidGoLab/binder/android/se/omapi
android/security (6 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/security 3 1 0 0 github.com/AndroidGoLab/binder/android/security
android/security/attestationverification 2 3 0 0 github.com/AndroidGoLab/binder/android/security/attestationverification
android/security/keymaster 0 1 0 0 github.com/AndroidGoLab/binder/android/security/keymaster
android/security/keystore 1 4 0 0 github.com/AndroidGoLab/binder/android/security/keystore
android/security/keystore/recovery 0 5 0 0 github.com/AndroidGoLab/binder/android/security/keystore/recovery
android/security/rkp 5 1 1 0 github.com/AndroidGoLab/binder/android/security/rkp
android/service (43 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/service/ambientcontext 1 2 0 0 github.com/AndroidGoLab/binder/android/service/ambientcontext
android/service/appprediction 1 0 0 0 github.com/AndroidGoLab/binder/android/service/appprediction
android/service/assist/classification 2 3 0 0 github.com/AndroidGoLab/binder/android/service/assist/classification
android/service/attention 3 0 0 0 github.com/AndroidGoLab/binder/android/service/attention
android/service/autofill 9 10 0 0 github.com/AndroidGoLab/binder/android/service/autofill
android/service/autofill/augmented 2 0 0 0 github.com/AndroidGoLab/binder/android/service/autofill/augmented
android/service/carrier 5 2 0 0 github.com/AndroidGoLab/binder/android/service/carrier
android/service/chooser 2 1 0 0 github.com/AndroidGoLab/binder/android/service/chooser
android/service/contentcapture 6 3 0 0 github.com/AndroidGoLab/binder/android/service/contentcapture
android/service/contentsuggestions 1 0 0 0 github.com/AndroidGoLab/binder/android/service/contentsuggestions
android/service/controls 4 1 0 0 github.com/AndroidGoLab/binder/android/service/controls
android/service/controls/actions 0 1 0 0 github.com/AndroidGoLab/binder/android/service/controls/actions
android/service/controls/templates 0 2 0 0 github.com/AndroidGoLab/binder/android/service/controls/templates
android/service/credentials 4 5 0 0 github.com/AndroidGoLab/binder/android/service/credentials
android/service/displayhash 1 1 0 0 github.com/AndroidGoLab/binder/android/service/displayhash
android/service/dreams 6 0 0 0 github.com/AndroidGoLab/binder/android/service/dreams
android/service/euicc 16 5 0 0 github.com/AndroidGoLab/binder/android/service/euicc
android/service/games 5 4 0 0 github.com/AndroidGoLab/binder/android/service/games
android/service/media 2 0 0 0 github.com/AndroidGoLab/binder/android/service/media
android/service/notification 4 12 0 0 github.com/AndroidGoLab/binder/android/service/notification
android/service/oemlock 1 0 0 0 github.com/AndroidGoLab/binder/android/service/oemlock
android/service/ondeviceintelligence 5 0 0 0 github.com/AndroidGoLab/binder/android/service/ondeviceintelligence
android/service/persistentdata 1 0 0 0 github.com/AndroidGoLab/binder/android/service/persistentdata
android/service/quickaccesswallet 2 7 0 0 github.com/AndroidGoLab/binder/android/service/quickaccesswallet
android/service/quicksettings 2 1 0 0 github.com/AndroidGoLab/binder/android/service/quicksettings
android/service/remotelockscreenvalidation 2 0 0 0 github.com/AndroidGoLab/binder/android/service/remotelockscreenvalidation
android/service/resolver 2 1 0 0 github.com/AndroidGoLab/binder/android/service/resolver
android/service/resumeonreboot 1 0 0 0 github.com/AndroidGoLab/binder/android/service/resumeonreboot
android/service/rotationresolver 2 1 0 0 github.com/AndroidGoLab/binder/android/service/rotationresolver
android/service/search 1 0 0 0 github.com/AndroidGoLab/binder/android/service/search
android/service/settings/suggestions 1 1 0 0 github.com/AndroidGoLab/binder/android/service/settings/suggestions
android/service/smartspace 1 0 0 0 github.com/AndroidGoLab/binder/android/service/smartspace
android/service/storage 1 0 0 0 github.com/AndroidGoLab/binder/android/service/storage
android/service/textclassifier 2 0 0 0 github.com/AndroidGoLab/binder/android/service/textclassifier
android/service/timezone 2 3 0 0 github.com/AndroidGoLab/binder/android/service/timezone
android/service/translation 2 0 0 0 github.com/AndroidGoLab/binder/android/service/translation
android/service/trust 2 1 0 0 github.com/AndroidGoLab/binder/android/service/trust
android/service/voice 9 9 0 0 github.com/AndroidGoLab/binder/android/service/voice
android/service/vr 4 0 0 0 github.com/AndroidGoLab/binder/android/service/vr
android/service/wallpaper 3 0 0 0 github.com/AndroidGoLab/binder/android/service/wallpaper
android/service/wallpapereffectsgeneration 1 0 0 0 github.com/AndroidGoLab/binder/android/service/wallpapereffectsgeneration
android/service/watchdog 1 1 0 0 github.com/AndroidGoLab/binder/android/service/watchdog
android/service/wearable 1 0 0 0 github.com/AndroidGoLab/binder/android/service/wearable
android/speech (2 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/speech 6 4 0 0 github.com/AndroidGoLab/binder/android/speech
android/speech/tts 5 1 0 0 github.com/AndroidGoLab/binder/android/speech/tts
android/system (4 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/system/keystore2 3 9 3 0 github.com/AndroidGoLab/binder/android/system/keystore2
android/system/net/netd 1 1 0 0 github.com/AndroidGoLab/binder/android/system/net/netd
android/system/suspend 5 0 1 0 github.com/AndroidGoLab/binder/android/system/suspend
android/system/suspend/internal_ 1 3 0 0 github.com/AndroidGoLab/binder/android/system/suspend/internal_
android/telecom (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/telecom 0 28 0 0 github.com/AndroidGoLab/binder/android/telecom
android/telephony (14 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/telephony 7 56 0 0 github.com/AndroidGoLab/binder/android/telephony
android/telephony/cdma 0 1 0 0 github.com/AndroidGoLab/binder/android/telephony/cdma
android/telephony/data 4 11 0 0 github.com/AndroidGoLab/binder/android/telephony/data
android/telephony/emergency 0 1 0 0 github.com/AndroidGoLab/binder/android/telephony/emergency
android/telephony/euicc 0 4 0 0 github.com/AndroidGoLab/binder/android/telephony/euicc
android/telephony/gba 1 2 0 0 github.com/AndroidGoLab/binder/android/telephony/gba
android/telephony/ims 0 29 0 0 github.com/AndroidGoLab/binder/android/telephony/ims
android/telephony/ims/aidl 29 0 0 0 github.com/AndroidGoLab/binder/android/telephony/ims/aidl
android/telephony/ims/feature 0 2 0 0 github.com/AndroidGoLab/binder/android/telephony/ims/feature
android/telephony/ims/stub 0 1 0 0 github.com/AndroidGoLab/binder/android/telephony/ims/stub
android/telephony/mbms 7 6 0 0 github.com/AndroidGoLab/binder/android/telephony/mbms
android/telephony/mbms/vendor 3 0 0 0 github.com/AndroidGoLab/binder/android/telephony/mbms/vendor
android/telephony/satellite 8 7 0 0 github.com/AndroidGoLab/binder/android/telephony/satellite
android/telephony/satellite/stub 5 4 4 0 github.com/AndroidGoLab/binder/android/telephony/satellite/stub
android/tests (2 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/tests/binder 1 0 0 0 github.com/AndroidGoLab/binder/android/tests/binder
android/tests/enforcepermission 2 0 0 0 github.com/AndroidGoLab/binder/android/tests/enforcepermission
android/text (2 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/text 0 2 0 0 github.com/AndroidGoLab/binder/android/text
android/text/style 0 1 0 0 github.com/AndroidGoLab/binder/android/text/style
android/tracing (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/tracing 1 1 0 0 github.com/AndroidGoLab/binder/android/tracing
android/util (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/util 1 2 0 0 github.com/AndroidGoLab/binder/android/util
android/view (9 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/view 35 38 1 0 github.com/AndroidGoLab/binder/android/view
android/view/accessibility 8 8 0 0 github.com/AndroidGoLab/binder/android/view/accessibility
android/view/autofill 4 2 0 0 github.com/AndroidGoLab/binder/android/view/autofill
android/view/contentcapture 4 5 0 0 github.com/AndroidGoLab/binder/android/view/contentcapture
android/view/displayhash 0 2 0 0 github.com/AndroidGoLab/binder/android/view/displayhash
android/view/inputmethod 0 26 0 0 github.com/AndroidGoLab/binder/android/view/inputmethod
android/view/textclassifier 0 15 0 0 github.com/AndroidGoLab/binder/android/view/textclassifier
android/view/textservice 0 5 0 0 github.com/AndroidGoLab/binder/android/view/textservice
android/view/translation 3 10 0 0 github.com/AndroidGoLab/binder/android/view/translation
android/webkit (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/webkit 1 2 0 0 github.com/AndroidGoLab/binder/android/webkit
android/widget (2 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/widget 0 3 0 0 github.com/AndroidGoLab/binder/android/widget
android/widget/inline 0 1 0 0 github.com/AndroidGoLab/binder/android/widget/inline
android/window (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
android/window 26 38 0 0 github.com/AndroidGoLab/binder/android/window
bluetooth/constants (2 packages)
Package Interfaces Parcelables Enums Unions Import Path
bluetooth/constants 0 0 1 0 github.com/AndroidGoLab/binder/bluetooth/constants
bluetooth/constants/aics 0 0 3 0 github.com/AndroidGoLab/binder/bluetooth/constants/aics
com/android (61 packages)
Package Interfaces Parcelables Enums Unions Import Path
com/android/codegentest 0 3 0 0 github.com/AndroidGoLab/binder/com/android/codegentest
com/android/frameworks/coretests/aidl 8 0 0 0 github.com/AndroidGoLab/binder/com/android/frameworks/coretests/aidl
com/android/frameworks/perftests/am/util 2 0 0 0 github.com/AndroidGoLab/binder/com/android/frameworks/perftests/am/util
com/android/ims 1 1 0 0 github.com/AndroidGoLab/binder/com/android/ims
com/android/ims/internal_ 19 0 0 0 github.com/AndroidGoLab/binder/com/android/ims/internal_
com/android/ims/internal_/uce/common 0 3 0 0 github.com/AndroidGoLab/binder/com/android/ims/internal_/uce/common
com/android/ims/internal_/uce/options 2 4 0 0 github.com/AndroidGoLab/binder/com/android/ims/internal_/uce/options
com/android/ims/internal_/uce/presence 2 11 0 0 github.com/AndroidGoLab/binder/com/android/ims/internal_/uce/presence
com/android/ims/internal_/uce/uceservice 2 0 0 0 github.com/AndroidGoLab/binder/com/android/ims/internal_/uce/uceservice
com/android/internal_/app 23 1 0 0 github.com/AndroidGoLab/binder/com/android/internal_/app
com/android/internal_/app/procstats 1 1 0 0 github.com/AndroidGoLab/binder/com/android/internal_/app/procstats
com/android/internal_/appwidget 2 0 0 0 github.com/AndroidGoLab/binder/com/android/internal_/appwidget
com/android/internal_/backup 3 0 0 0 github.com/AndroidGoLab/binder/com/android/internal_/backup
com/android/internal_/compat 3 7 0 0 github.com/AndroidGoLab/binder/com/android/internal_/compat
com/android/internal_/content 0 1 0 0 github.com/AndroidGoLab/binder/com/android/internal_/content
com/android/internal_/graphics/fonts 1 0 0 0 github.com/AndroidGoLab/binder/com/android/internal_/graphics/fonts
com/android/internal_/infra 1 1 0 0 github.com/AndroidGoLab/binder/com/android/internal_/infra
com/android/internal_/inputmethod 15 6 0 0 github.com/AndroidGoLab/binder/com/android/internal_/inputmethod
com/android/internal_/logging 0 1 0 0 github.com/AndroidGoLab/binder/com/android/internal_/logging
com/android/internal_/net 3 3 0 0 github.com/AndroidGoLab/binder/com/android/internal_/net
com/android/internal_/os 5 3 0 0 github.com/AndroidGoLab/binder/com/android/internal_/os
com/android/internal_/policy 7 0 0 0 github.com/AndroidGoLab/binder/com/android/internal_/policy
com/android/internal_/statusbar 6 6 0 0 github.com/AndroidGoLab/binder/com/android/internal_/statusbar
com/android/internal_/telecom 23 0 0 0 github.com/AndroidGoLab/binder/com/android/internal_/telecom
com/android/internal_/telephony 29 5 0 0 github.com/AndroidGoLab/binder/com/android/internal_/telephony
com/android/internal_/telephony/euicc 24 0 0 0 github.com/AndroidGoLab/binder/com/android/internal_/telephony/euicc
com/android/internal_/textservice 6 0 0 0 github.com/AndroidGoLab/binder/com/android/internal_/textservice
com/android/internal_/util 0 1 0 0 github.com/AndroidGoLab/binder/com/android/internal_/util
com/android/internal_/view 2 1 0 0 github.com/AndroidGoLab/binder/com/android/internal_/view
com/android/internal_/view/inline 2 0 0 0 github.com/AndroidGoLab/binder/com/android/internal_/view/inline
com/android/internal_/widget 5 2 0 0 github.com/AndroidGoLab/binder/com/android/internal_/widget
com/android/net 3 0 0 0 github.com/AndroidGoLab/binder/com/android/net
com/android/onemedia 2 0 0 0 github.com/AndroidGoLab/binder/com/android/onemedia
com/android/onemedia/playback 1 0 0 0 github.com/AndroidGoLab/binder/com/android/onemedia/playback
com/android/printspooler/renderer 2 0 0 0 github.com/AndroidGoLab/binder/com/android/printspooler/renderer
com/android/server/bluetooth 1 28 0 0 github.com/AndroidGoLab/binder/com/android/server/bluetooth
com/android/server/inputflinger 6 3 1 0 github.com/AndroidGoLab/binder/com/android/server/inputflinger
com/android/server/power/stats 0 1 0 0 github.com/AndroidGoLab/binder/com/android/server/power/stats
com/android/smspush/unitTests 1 0 0 0 github.com/AndroidGoLab/binder/com/android/smspush/unitTests
com/android/systemui/assist 1 0 0 0 github.com/AndroidGoLab/binder/com/android/systemui/assist
com/android/systemui/notetask 1 0 0 0 github.com/AndroidGoLab/binder/com/android/systemui/notetask
com/android/systemui/screenshot 3 0 0 0 github.com/AndroidGoLab/binder/com/android/systemui/screenshot
com/android/systemui/screenshot/appclips 1 1 0 0 github.com/AndroidGoLab/binder/com/android/systemui/screenshot/appclips
com/android/systemui/shared/recents 2 0 0 0 github.com/AndroidGoLab/binder/com/android/systemui/shared/recents
com/android/systemui/shared/recents/model 0 1 0 0 github.com/AndroidGoLab/binder/com/android/systemui/shared/recents/model
com/android/systemui/shared/system/smartspace 2 1 0 0 github.com/AndroidGoLab/binder/com/android/systemui/shared/system/smartspace
com/android/systemui/unfold/progress 2 0 0 0 github.com/AndroidGoLab/binder/com/android/systemui/unfold/progress
com/android/systemui/wallet/controller 2 0 0 0 github.com/AndroidGoLab/binder/com/android/systemui/wallet/controller
com/android/test/binder 2 0 0 0 github.com/AndroidGoLab/binder/com/android/test/binder
com/android/test/viewembed 2 0 0 0 github.com/AndroidGoLab/binder/com/android/test/viewembed
com/android/wm/shell/back 1 0 0 0 github.com/AndroidGoLab/binder/com/android/wm/shell/back
com/android/wm/shell/bubbles 2 0 0 0 github.com/AndroidGoLab/binder/com/android/wm/shell/bubbles
com/android/wm/shell/common/pip 2 0 0 0 github.com/AndroidGoLab/binder/com/android/wm/shell/common/pip
com/android/wm/shell/desktopmode 2 0 0 0 github.com/AndroidGoLab/binder/com/android/wm/shell/desktopmode
com/android/wm/shell/draganddrop 1 0 0 0 github.com/AndroidGoLab/binder/com/android/wm/shell/draganddrop
com/android/wm/shell/onehanded 1 0 0 0 github.com/AndroidGoLab/binder/com/android/wm/shell/onehanded
com/android/wm/shell/recents 2 0 0 0 github.com/AndroidGoLab/binder/com/android/wm/shell/recents
com/android/wm/shell/splitscreen 3 0 0 0 github.com/AndroidGoLab/binder/com/android/wm/shell/splitscreen
com/android/wm/shell/startingsurface 2 0 0 0 github.com/AndroidGoLab/binder/com/android/wm/shell/startingsurface
com/android/wm/shell/transition 2 0 0 0 github.com/AndroidGoLab/binder/com/android/wm/shell/transition
com/android/wm/shell/util 0 1 0 0 github.com/AndroidGoLab/binder/com/android/wm/shell/util
com/example (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
com/example 1 0 0 0 github.com/AndroidGoLab/binder/com/example
com/google (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
com/google/android/lint/integration_tests 1 0 0 0 github.com/AndroidGoLab/binder/com/google/android/lint/integration_tests
fuzztest (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
fuzztest 1 0 0 0 github.com/AndroidGoLab/binder/fuzztest
parcelables (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
parcelables 0 3 1 0 github.com/AndroidGoLab/binder/parcelables
src/com (1 packages)
Package Interfaces Parcelables Enums Unions Import Path
src/com/android/commands/uinput 0 1 0 0 github.com/AndroidGoLab/binder/src/com/android/commands/uinput
Commands and Tools
Description
tools/cmd/aidl2spec AIDL-to-YAML spec compiler: parses AOSP AIDL files and emits spec files
tools/cmd/java2spec Extracts service maps and parcelable info from Java sources into specs
tools/cmd/spec2go Generates Go proxy code (and smoke tests) from YAML spec files
tools/cmd/spec2cli Generates bindercli command registry from YAML spec files
tools/cmd/spec2readme Regenerates the package table in this README from spec files

bindercli

bindercli is a unified command-line tool for interacting with Android Binder services and the AIDL compiler. It auto-generates subcommands for every AIDL interface in the project (1,500+ interfaces, 14,000+ methods), so you can call any Android system service method directly from the command line with typed flags.

Build and deploy:

GOOS=linux GOARCH=arm64 go build -o build/bindercli ./cmd/bindercli/
adb push build/bindercli /data/local/tmp/

Core subcommands:

Command Description
bindercli service list List all registered binder services with alive/dead status
bindercli service inspect <name> Show a service's handle, descriptor, and alive status
bindercli service methods <name> List all methods with their transaction codes
bindercli service transact <name> <code-or-method> [hex] Send a raw binder transaction (code or method name)
bindercli service resolve <name> <method-or-code> Resolve between method names and transaction codes
bindercli aidl compile [-I path] <files> Compile .aidl files to Go
bindercli aidl parse <file> Dump parsed AIDL AST as JSON
bindercli aidl check <files> Validate AIDL files without generating
bindercli <descriptor> <method> [--flags] Call any AIDL method with typed parameters

Global flags: --format json|text|auto, --binder-device, --map-size.

Examples

Note: Transaction codes are resolved dynamically from the device's framework JARs (/system/framework/*.jar) at runtime. Compiled version tables are used as a fallback when JARs are not readable. The service subcommands and ServiceManager-level lookups work across all versions.

List and inspect services
# List all registered binder services with alive/dead status
bindercli service list

# Inspect a specific service (show handle, descriptor, alive status)
bindercli service inspect SurfaceFlinger

# List methods available on a service with transaction codes
bindercli service methods activity

# Resolve a method name to its transaction code (or vice versa)
bindercli service resolve activity is-user-a-monkey

# Send a raw binder transaction by method name or numeric code
bindercli service transact activity is-user-a-monkey
bindercli service transact SurfaceFlinger 64
Query power and battery state
# Check if screen is on
bindercli android.os.IPowerManager is-interactive
# Example output: {"result":true}

# Check power save mode
bindercli android.os.IPowerManager is-power-save-mode
# Example output: {"result":false}

# Check if device is in Doze mode
bindercli android.os.IPowerManager is-device-idle-mode
# Example output: {"result":false}

# Get battery health info
bindercli android.hardware.health.IHealth get-health-info
Connect to a WiFi AP with SSID "MyNetwork" and PSK "secret123"
# Step 1: Add a new network via the supplicant
bindercli android.hardware.wifi.supplicant.ISupplicantStaIface add-network

# Step 2: Set the SSID (pass as hex-encoded bytes; "MyNetwork" = 4d794e6574776f726b)
bindercli android.hardware.wifi.supplicant.ISupplicantStaNetwork set-ssid \
  --ssid 4d794e6574776f726b

# Step 3: Set the WPA passphrase
bindercli android.hardware.wifi.supplicant.ISupplicantStaNetwork set-psk-passphrase \
  --psk secret123

# Step 4: Set key management to WPA-PSK (bit 1 = 0x02)
bindercli android.hardware.wifi.supplicant.ISupplicantStaNetwork set-key-mgmt \
  --keyMgmtMask 2

# Step 5: Enable the network to trigger connection
bindercli android.hardware.wifi.supplicant.ISupplicantStaNetwork enable \
  --noConnect false

# Disconnect from current network
bindercli android.hardware.wifi.supplicant.ISupplicantStaIface disconnect

# List saved networks
bindercli android.hardware.wifi.supplicant.ISupplicantStaIface list-networks
Take a picture from the camera
# List available camera devices
bindercli android.hardware.camera.provider.ICameraProvider get-camera-id-list

# Get camera characteristics (resolution, capabilities, etc.)
bindercli android.hardware.camera.device.ICameraDevice get-camera-characteristics

# Toggle flashlight/torch mode
bindercli android.hardware.camera.provider.ICameraProvider set-torch-mode \
  --cameraDeviceName "0" --enabled true

Note: Full camera capture requires a callback-driven session flow (open -> configure streams -> capture request -> receive frames). The individual steps are available as commands, but the session orchestration needs a script or the Go API directly.

Record from microphone
# Get active microphones on an input stream
bindercli android.hardware.audio.core.IStreamIn get-active-microphones

# Set microphone field dimension (for directional recording)
bindercli android.hardware.audio.core.IStreamIn set-microphone-field-dimension \
  --zoom 1.0

# Set microphone direction
# 0=UNSPECIFIED, 1=FRONT, 2=BACK, 3=EXTERNAL
bindercli android.hardware.audio.core.IStreamIn set-microphone-direction \
  --direction 1

Note: Actual audio capture requires opening an input stream via IModule.openInputStream() with an audio configuration, then reading PCM data from the returned stream handle. Use the Go API for the full recording flow.

Query battery, power, and thermal status
# Get current thermal status (0=none, 1=light, 2=moderate, ...)
bindercli android.os.IThermalService get-current-thermal-status
# Example output: {"result":0}

# Check if device is in power save mode
bindercli android.os.IPowerManager is-power-save-mode
# Example output: {"result":false}

# Check if device is interactive (screen on)
bindercli android.os.IPowerManager is-interactive

# Reboot the device
bindercli android.os.IPowerManager reboot \
  --confirm false --reason "cli-reboot" --wait true
Query packages and app info
# Check if a package is installed
bindercli android.content.pm.IPackageManager is-package-available \
  --packageName com.android.settings --userId 0
# Example output: {"result":true}

# Check a permission
bindercli android.content.pm.IPackageManager check-permission \
  --permName android.permission.INTERNET \
  --pkgName com.android.settings --userId 0

# Get the installer of a package
bindercli android.content.pm.IPackageManager get-installer-package-name \
  --packageName com.android.chrome
Display info
# Get display IDs
bindercli android.hardware.display.IDisplayManager get-display-ids \
  --includeDisabled false
# Example output: {"result":[0]}
Clipboard operations
# Check if clipboard has text
bindercli android.content.IClipboard has-clipboard-text \
  --callingPackage com.android.shell \
  --attributionTag "" --userId 0 --deviceId 0
# Example output: {"result":false}
Bluetooth operations
# Initialize Bluetooth HCI
bindercli android.hardware.bluetooth.IBluetoothHci initialize \
  --callback <callback_service>

# Send raw HCI command (hex bytes)
bindercli android.hardware.bluetooth.IBluetoothHci send-hci-command \
  --command 01030c00

# Close Bluetooth HCI
bindercli android.hardware.bluetooth.IBluetoothHci close
ActivityManager queries
# Check if user is a monkey (automated test)
bindercli android.app.IActivityManager is-user-a-monkey

# Get process memory limit
bindercli android.app.IActivityManager get-process-limit

# Check a permission for a process
bindercli android.app.IActivityManager check-permission \
  --permission android.permission.INTERNET --pid 1 --uid 0

# Force stop a package
bindercli android.app.IActivityManager force-stop-package \
  --packageName com.example.app --userId 0

# Check if app freezer is supported
bindercli android.app.IActivityManager is-app-freezer-supported
Telephony
# Get active phone type (0=NONE, 1=GSM, 2=CDMA)
bindercli com.android.internal.telephony.ITelephony get-active-phone-type

# Get network country ISO
bindercli com.android.internal.telephony.ITelephony get-network-country-iso-for-phone \
  --phoneId 0
Verified Devices

Commands are tested against the following devices. The runtime uses version-aware transaction code resolution (binder/versionaware) that dynamically extracts codes from the device's framework JARs, with compiled tables as a fallback. "SM" = ServiceManager-level lookup, "Proxy" = generated proxy method with version-aware code resolution.

Verification matrix
Command Type Pixel 8a (API 36) Emulator (API 35)
service list SM PASS PASS
service inspect SM PASS PASS
location get-all-providers Proxy PASS PASS
location is-provider-enabled-for-user Proxy PASS PASS
location get-gnss-hardware-model-name Proxy PASS PASS
location get-gnss-year-of-hardware Proxy PASS PASS
thermal get-current-thermal-status Proxy PASS PASS
power is-power-save-mode Proxy PASS PASS
power is-interactive Proxy PASS PASS
pm is-package-available Proxy PASS PASS
display get-display-ids Proxy PASS PASS
clipboard has-clipboard-text Proxy PASS PASS
am check-permission Proxy PASS PASS
am is-user-a-monkey Proxy FLAKY* PASS
am get-process-limit Proxy FLAKY* PASS

* Some IActivityManager methods return empty replies intermittently on the Pixel 8a, likely due to the device's firmware AIDL revision having additional methods beyond the android-16.0.0_r1 snapshot. The transaction code offset may be off by 1-2 for some methods.

Architecture

The project has two major parts: a compiler that turns .aidl files into Go source code, and a runtime that implements the Binder IPC protocol for communicating with Android services.

flowchart TD
    AIDL[".aidl files"]
    AOSP["AOSP tools/pkg/3rdparty/"]

    subgraph COMPILER["Compiler Pipeline"]
        direction TB
        LEX["Lexer<br/><i>tokenizes AIDL syntax</i>"]
        PARSE["Parser<br/><i>recursive-descent → AST</i>"]
        RESOLVE["Resolver<br/><i>import resolution + type registry</i>"]
        GRAPH["Import Graph<br/><i>SCC-based cycle detection</i>"]
        GEN["Code Generator"]
    end

    subgraph GENOUT["Generated Output"]
        direction LR
        PROXY["Interface → Proxy struct<br/>+ transaction methods"]
        PARCEL_GEN["Parcelable → Go struct<br/>+ Marshal/Unmarshal"]
        ENUM["Enum → typed constants"]
        UNION["Union → tagged variant"]
    end

    subgraph RUNTIME["Binder Runtime"]
        direction TB
        KBIND["kernelbinder<br/><i>/dev/binder ioctl</i>"]
        PARCELF["parcel<br/><i>wire format serialization</i>"]
        BIND["binder<br/><i>IBinder + Transact</i>"]
        SM["servicemanager<br/><i>GetService / ListServices</i>"]
    end

    ANDROID["Android System Services<br/><i>ActivityManager, SurfaceFlinger, ...</i>"]

    AIDL --> LEX
    AOSP --> LEX
    LEX --> PARSE
    PARSE --> RESOLVE
    RESOLVE --> GRAPH
    GRAPH --> GEN
    GEN --> GENOUT

    PROXY --> BIND
    BIND --> PARCELF
    BIND --> KBIND
    SM --> BIND
    KBIND --> ANDROID

    style AIDL fill:#fff3cd,color:#000
    style AOSP fill:#fff3cd,color:#000
    style COMPILER fill:#e8eaf6,color:#000
    style GENOUT fill:#d4edda,color:#000
    style RUNTIME fill:#cce5ff,color:#000
    style ANDROID fill:#e0e0e0,color:#000
Compiler Pipeline

The compiler transforms AIDL source files into Go code through four stages:

flowchart LR
    subgraph S1["1. Lex"]
        L1["Keywords, identifiers,<br/>operators, literals"]
    end

    subgraph S2["2. Parse"]
        P1["Document AST:<br/>interfaces, parcelables,<br/>enums, unions, constants"]
    end

    subgraph S3["3. Resolve"]
        R1["Transitive imports<br/>Type registry<br/>Circular import detection"]
    end

    subgraph S4["4. Generate"]
        G1["Go source files:<br/>proxies, structs,<br/>marshal/unmarshal"]
    end

    S1 --> S2 --> S3 --> S4

Stage 1 — Lexer (tools/pkg/parser/lexer.go): Tokenizes AIDL source into keywords (interface, parcelable, oneway, ...), identifiers, operators, and literals. Handles >> splitting for nested generics like List<List<String>>.

Stage 2 — Parser (tools/pkg/parser/parser.go): Recursive-descent parser builds a typed AST. Supports the full AIDL grammar: interfaces with methods and transaction codes, parcelables with typed fields and defaults, enums with explicit or implicit values, unions, nested types, generics (List<T>, Map<K,V>), annotations (@nullable, @Backing, @utf8InCpp), and constant expressions with arithmetic/bitwise operators.

Stage 3 — Resolver (tools/pkg/resolver/resolver.go): Given search paths (-I flags), resolves AIDL imports transitively. Converts qualified names like android.os.IServiceManager to file paths, parses each imported file, and registers all definitions in a shared TypeRegistry. Detects circular imports. Supports skip-unresolved mode for bulk AOSP processing where some imports reference unavailable files.

Stage 4 — Code Generator (tools/pkg/codegen/): Produces Go source for each AIDL definition:

AIDL Type Generated Go Code
Interface Go interface + proxy struct with Transact()-based methods, descriptor constant, transaction code constants
Parcelable Go struct with MarshalParcel(*parcel.Parcel) error and UnmarshalParcel(*parcel.Parcel) error
Enum Type alias on backing type (int32, int64, byte) + typed const block
Union Struct with tag field + typed variant accessors

The code generator includes an import graph (tools/pkg/codegen/import_graph.go) that computes strongly-connected components (Tarjan's SCC algorithm) to detect and break import cycles between generated packages.

Binder Runtime

The runtime implements the Android Binder IPC protocol in pure Go:

flowchart TD
    subgraph APP["Your Go Application"]
        PROXY2["ActivityManagerProxy.GetProcessLimit(ctx)"]
    end

    subgraph MARSHAL["parcel"]
        M1["WriteInterfaceToken(descriptor)"]
        M2["WriteInt32 / WriteString16 / ..."]
        M3["ReadInt32 / ReadString16 / ..."]
    end

    subgraph BINDER["binder"]
        B1["IBinder.Transact(ctx, code, flags, data)"]
        B2["ReadStatus(reply) → check AIDL exceptions"]
    end

    subgraph KERNEL["kernelbinder"]
        K1["open(/dev/binder)"]
        K2["mmap(1MB read buffer)"]
        K3["ioctl(BINDER_WRITE_READ)"]
    end

    PROXY2 --> M1
    M1 --> M2
    M2 --> B1
    B1 --> K3
    K3 -->|reply| B2
    B2 --> M3
    M3 -->|typed result| PROXY2

kernelbinder.Driver: Opens /dev/binder, verifies the protocol version via ioctl, memory-maps the kernel buffer, and implements Transact() as a write-read ioctl. Handles transaction replies, error codes, and death notifications.

parcel.Parcel: 4-byte aligned, little-endian byte buffer implementing the Binder wire format. Writes/reads all AIDL primitive types (int32, int64, float, double, bool, byte, String as UTF-16), arrays, binder handles (flat_binder_object), and file descriptors.

binder.ProxyBinder: Client-side handle wrapping a kernel binder reference. Provides Transact(), IsAlive() (ping), and death notification registration (LinkToDeath/UnlinkToDeath).

servicemanager: Client for Android's ServiceManager, the registry of all system services. Implements GetService(), CheckService(), ListServices(), and AddService() as typed binder transactions.

Generated Code

For an AIDL interface like:

// android/app/IActivityManager.aidl
package android.app;

interface IActivityManager {
    int getProcessLimit();
    int checkPermission(in String permission, int pid, int uid);
    boolean isUserAMonkey();
    // ... 200+ more methods
}

The compiler generates:

package app

const DescriptorIActivityManager = "android.app.IActivityManager"

const (
    TransactionIActivityManagerGetProcessLimit  = binder.FirstCallTransaction + 51
    TransactionIActivityManagerCheckPermission  = binder.FirstCallTransaction + 8
    // ...
)

const (
    MethodIActivityManagerGetProcessLimit  = "getProcessLimit"
    MethodIActivityManagerCheckPermission  = "checkPermission"
    // ...
)

type IActivityManager interface {
    GetProcessLimit(ctx context.Context) (int32, error)
    CheckPermission(ctx context.Context, permission string, pid int32, uid int32) (int32, error)
    IsUserAMonkey(ctx context.Context) (bool, error)
    // ...
}

type ActivityManagerProxy struct {
    Remote binder.IBinder
}

func NewActivityManagerProxy(remote binder.IBinder) *ActivityManagerProxy {
    return &ActivityManagerProxy{Remote: remote}
}

func (p *ActivityManagerProxy) GetProcessLimit(ctx context.Context) (int32, error) {
    var _result int32
    _data := parcel.New()
    defer _data.Recycle()
    _data.WriteInterfaceToken(DescriptorIActivityManager)

    _code, _err := p.Remote.ResolveCode(ctx, DescriptorIActivityManager, MethodIActivityManagerGetProcessLimit)
    if _err != nil {
        return _result, fmt.Errorf("resolving %s.%s: %w", DescriptorIActivityManager, MethodIActivityManagerGetProcessLimit, _err)
    }

    _reply, _err := p.Remote.Transact(ctx, _code, 0, _data)
    if _err != nil {
        return _result, _err
    }
    defer _reply.Recycle()

    if _err = binder.ReadStatus(_reply); _err != nil {
        return _result, _err
    }

    _result, _err = _reply.ReadInt32()
    if _err != nil {
        return _result, _err
    }
    return _result, nil
}
Supported AIDL Constructs
Construct Example Generated Go
Interface methods String getName(); Proxy method with marshal/unmarshal
oneway methods oneway void fire(in String msg); Fire-and-forget (no reply parcel)
Parcelable fields int id; String name; Struct + MarshalParcel/UnmarshalParcel
Enums @Backing(type="int") enum Status { OK, FAIL } type Status int32 + typed constants
Unions union Result { int value; String error; } Struct with tag + variant accessors
Generics List<String>, Map<String, int> []string, map[string]int32
Nullable types @nullable String desc; *string
Constants const int VERSION = 1; Package-level const
Nested types Parcelable inside interface Separate file, qualified name
In/out/inout void read(out byte[] buf); Bidirectional parcel marshaling
Annotations @nullable, @utf8InCpp, @Backing Affects type mapping and codegen

Code Generation

From Individual AIDL Files
# Compile AIDL files to Go via bindercli:
bindercli aidl compile -I path/to/search/root --output gen file1.aidl file2.aidl
From AOSP (Bulk Generation)

With the AOSP submodules in tools/pkg/3rdparty/:

git submodule update --init --depth 1
go run ./tools/cmd/aidl2spec -3rdparty tools/pkg/3rdparty -output specs/
go run ./tools/cmd/spec2go -specs specs/ -output . -smoke-tests

This discovers all AIDL files across frameworks-base, frameworks-native, hardware-interfaces, and system-hardware-interfaces, infers search roots from package declarations, and generates Go proxies for all AOSP services. The current AOSP snapshot produces 5,174 Go files across 407 packages.

Transaction Code Resolution

Each binder method has a numeric transaction code that can differ between Android versions. The generated proxies call ResolveCode() at runtime to get the correct code for the device, using a multi-layer detection strategy:

  1. DEX bytecode extraction (primary) — scans /system/framework/*.jar and APEX module JARs, parses DEX bytecode, and reads TRANSACTION_* constants from $Stub classes. Individual interfaces are extracted on demand (lazy), and results are cached to avoid re-scanning. This gives definitive codes for the exact firmware running on the device. This method is expected to work on all Android devices. If it fails on your platform, please open an issue.

  2. Compiled version tables + ELF filtering (fallback) — pre-compiled tables from AOSP revision tags, narrowed by API level and exported symbols in libbinder.so. Used when framework JARs are not readable (e.g. non-Android host, restricted SELinux context).

  3. Live transaction probing (last resort) — sends a test transaction (isUserAMonkey() on ActivityManager) with each candidate code and picks the one that returns a valid response. Used only to distinguish between AOSP revisions when ELF inspection is ambiguous.

Methods 2 and 3 exist only for environments where framework JARs are unavailable. On a standard Android device, all transaction codes are resolved dynamically from the device's own JARs.

Testing and Verification

The project is verified at four levels:

1. Unit Tests

The compiler packages (parser, codegen, resolver, binder, parcel, typesys) and tools/pkg/testutil have unit tests that run without any Android device or special environment:

go test ./tools/pkg/... ./binder/ ./parcel/

These test:

  • Parser correctness: Lexing/parsing of all AIDL constructs against testdata fixtures (interfaces, parcelables, enums, unions, generics, constants, annotations)
  • Code generation: Each generator (GenerateInterface, GenerateParcelable, GenerateEnum, GenerateUnion) is tested by parsing AIDL input, generating Go, and verifying the output is valid gofmt-compliant Go source that contains expected identifiers (descriptors, transaction codes, type names, method signatures)
  • Import cycle detection: Verifies the SCC algorithm correctly identifies and breaks cross-package import cycles
  • Marshal/unmarshal naming: Maps from AIDL types to parcel read/write expressions
  • Parcel serialization: Round-trip encoding/decoding of all primitive types
  • Binder status: Exception code marshaling
2. AOSP Codegen Test

Tests that code generation succeeds for the entire AOSP AIDL surface (requires tools/pkg/3rdparty/ submodules):

go test -tags aosp_codegen -v -run TestCodegenAllAOSP ./tools/pkg/codegen/

Walks all ~11,000 AIDL files, parses each, generates Go code, and verifies the output parses as valid Go. Reports per-file success/failure statistics.

3. Generated Smoke Tests

Auto-generated tests that instantiate every proxy type with a mock binder and call every method with zero-value arguments:

go run ./tools/cmd/spec2go -specs specs/ -output . -smoke-tests
go test ./tests/e2e/...  # requires /dev/binder OR mock mode
4. End-to-End Tests on Android

Full integration tests that open /dev/binder and transact with real Android system services:

# Run on Android device or emulator
go test -tags e2e -v ./tests/e2e/...

These verify:

  • ServiceManager: ListServices, GetService, CheckService, service handle aliveness
  • Typed transactions: Call ActivityManager.GetProcessLimit(), SurfaceFlinger.GetPhysicalDisplayIds(), etc. and validate returned types
  • Exception handling: AIDL security exceptions, status codes
  • Parcelable round-trip: Real service data deserialized through generated UnmarshalParcel
  • Concurrency: Multiple goroutines with isolated binder drivers
  • Death notifications: Registration/unregistration lifecycle
  • Oneway transactions: Fire-and-forget calls
  • Error handling: Invalid handles, dead processes
CI

Unit tests run automatically on every push and pull request via GitHub Actions. E2E tests require an Android device and must be run manually.

A weekly workflow checks for new AOSP revision tags, regenerates version tables and proxy code, and opens a PR automatically if anything changed.

binder-mcp

AI agents can interact with Android devices through binder-mcp, a Model Context Protocol server that exposes binder services as tools.

Device mode
# Build and push
GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o build/binder-mcp ./cmd/binder-mcp/
adb push build/binder-mcp /data/local/tmp/

# Use with Claude Code (or any MCP client)
# In your MCP config, add:
# {
#   "mcpServers": {
#     "android": {
#       "command": "adb",
#       "args": ["shell", "/data/local/tmp/binder-mcp"]
#     }
#   }
# }
Remote mode (runs on host)
go run ./cmd/binder-mcp/ --mode remote
# Auto-discovers device via ADB, pushes daemon, serves MCP on stdio
Available tools
Tool Description
list_services Enumerate all binder services
get_service_info Descriptor, handle, liveness for a service
call_method Invoke raw binder transactions
get_device_info Power, display, thermal status
get_location GPS/fused location
check_permissions SELinux context and service accessibility

Using binder-mcp with AI Agents

Installation
# Via go install
go install github.com/AndroidGoLab/binder/cmd/binder-mcp@latest

# Via GitHub releases (pre-built binaries)
# Download from https://github.com/AndroidGoLab/binder/releases

# Via Docker (host mode)
docker run ghcr.io/androidgolab/binder-mcp
Claude Code
claude mcp add --transport stdio binder-mcp -- binder-mcp --mode remote
Cursor

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "binder-mcp": {
      "command": "binder-mcp",
      "args": ["--mode", "remote"]
    }
  }
}
Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "binder-mcp": {
      "command": "binder-mcp",
      "args": ["--mode", "remote"]
    }
  }
}
Cline

Add to Cline MCP settings:

{
  "mcpServers": {
    "binder-mcp": {
      "command": "binder-mcp",
      "args": ["--mode", "remote"],
      "alwaysAllow": ["list_services", "get_device_info", "take_screenshot"]
    }
  }
}
On-device mode (via adb)
# Build for Android
GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o binder-mcp ./cmd/binder-mcp/
adb push binder-mcp /data/local/tmp/

# Configure agent to use adb transport
claude mcp add --transport stdio binder-mcp -- adb shell /data/local/tmp/binder-mcp

Interoperability

gadb — Pure Go ADB for CI/CD

The interop/gadb/runner/ package provides pure-Go ADB device control without requiring the adb binary. Discover devices, push binaries, and run commands programmatically:

dr, _ := runner.NewDeviceRunner("SERIAL")
dr.PushBinary(ctx, "build/mybinary", "/data/local/tmp/mybinary")
result, _ := dr.Run(ctx, "/data/local/tmp/mybinary", 30*time.Second)
fmt.Println(result.Stdout)

For remote binder access from a host machine, interop/gadb/proxy/ sets up a forwarded session:

sess, _ := proxy.NewSession(ctx, "SERIAL")
defer sess.Close(ctx)
// Session manages the daemon lifecycle and port forwarding;
// binder calls are routed through the remote transport.
gomobile — Android AAR

interop/gomobile/client/ wraps binder calls in a Java-friendly API via gomobile. Build the AAR:

gomobile bind -target android -o binder.aar ./interop/gomobile/client/

Available methods: GetPowerStatus(), GetDisplayInfo(), GetLastLocation(), GetDeviceInfo().

See the example app at examples/gomobile/.

Project Layout

.
├── tools/
│   ├── cmd/
│   │   ├── aidl2spec/        AIDL-to-YAML spec compiler
│   │   ├── java2spec/        Java source info extractor (service maps, parcelables)
│   │   ├── spec2go/          Go proxy code generator from specs
│   │   ├── spec2cli/         bindercli command registry generator from specs
│   │   └── spec2readme/      README package table generator from specs
│   └── pkg/
│       ├── parser/           Lexer + recursive-descent AIDL parser
│       ├── resolver/         Import resolution and type registry
│       ├── codegen/          Go code generator
│       │   ├── codegen.go        GenerateAll orchestration, validation, import graph
│       │   ├── interface_gen.go  Interface → proxy struct + methods
│       │   ├── parcelable_gen.go Parcelable → struct + Marshal/Unmarshal
│       │   ├── enum_gen.go       Enum → typed constants
│       │   ├── marshal.go        AIDL type → parcel read/write expressions
│       │   └── import_graph.go   SCC-based import cycle detection
│       ├── spec/             YAML spec read/write
│       ├── javaparser/       Java source parser
│       ├── parcelspec/       Parcelable spec extraction
│       ├── servicemap/       Service name mapping
│       ├── validate/         Semantic validation (types, directions, oneway)
│       ├── testutil/         Mock binder, reflection-based smoke testing
│       └── 3rdparty/         AOSP submodules (frameworks-base, frameworks-native, ...)
├── binder/                   Binder IPC abstractions
│   ├── ibinder.go            IBinder interface
│   ├── proxy_binder.go       Client-side proxy: Transact, IsAlive, LinkToDeath
│   └── status.go             AIDL exception reading/writing
├── parcel/                   Wire format serialization
│   └── parcel.go             4-byte aligned little-endian buffer
├── kernelbinder/             /dev/binder kernel driver interface
│   └── driver.go             Open, mmap, ioctl BINDER_WRITE_READ
├── servicemanager/           ServiceManager client
├── errors/                   AIDL exception types (ExceptionCode, StatusError)
├── android/                  Pre-generated AOSP service proxies (5,174 files)
│   ├── app/                  ActivityManager, AlarmManager, ...
│   ├── os/                   ServiceManager, PowerManager, ...
│   ├── hardware/             HAL interfaces
│   └── ...                   407 packages total
├── com/                      AOSP com.android.* service proxies
├── interop/                  Interoperability helpers
│   ├── gadb/                 Pure-Go ADB integration
│   └── gomobile/             Android AAR via gomobile
├── examples/                 106 runnable examples
└── .github/workflows/        CI configuration

Directories ¶

Path Synopsis
aaudio
android
accessibilityservice
accessibilityservice/types
accounts
accounts/types
app
app/admin
app/ambientcontext
app/assist
app/backup
app/blob
app/contentsuggestions
app/job
app/ondeviceintelligence
app/people
app/pinner
app/prediction
app/search
app/servertransaction
app/slice
app/slice/types
app/smartspace
app/tare
app/time
app/timedetector
app/timezonedetector
app/trust
app/types
app/usage
app/wallpapereffectsgeneration
app/wearable
apphibernation
appwidget
binderdebug/test
bluetooth
bluetooth/le
bluetooth/types
companion
companion/datatransfer
companion/virtual
companion/virtual/audio
companion/virtual/camera
companion/virtual/sensor
companion/virtualcamera
companion/virtualnative
content
content/integrity
content/integrity/types
content/om
content/pm
content/pm/dex
content/pm/permission
content/pm/types
content/pm/verify/domain
content/res
content/res/types
content/rollback
content/types
credentials
credentials/types
database
database/types
debug
dvr
flags
frameworks/automotive/display
frameworks/automotive/powerpolicy
frameworks/automotive/powerpolicy/internal_
frameworks/automotive/telemetry
frameworks/cameraservice/common
frameworks/cameraservice/device
frameworks/cameraservice/service
frameworks/location/altitude
frameworks/sensorservice
frameworks/stats
frameworks/vibrator
graphics
graphics/bufferstreams
graphics/drawable
graphics/fonts
gui
hardware
hardware/audio/common
hardware/audio/core
hardware/audio/core/sounddose
hardware/audio/effect
hardware/audio/sounddose
hardware/authsecret
hardware/automotive/audiocontrol
hardware/automotive/can
hardware/automotive/evs
hardware/automotive/ivn
hardware/automotive/occupant_awareness
hardware/automotive/remoteaccess
hardware/automotive/vehicle
hardware/biometrics
hardware/biometrics/common
hardware/biometrics/face
hardware/biometrics/fingerprint
hardware/bluetooth
hardware/bluetooth/audio
hardware/bluetooth/finder
hardware/bluetooth/lmp_event
hardware/bluetooth/offload/leaudio
hardware/bluetooth/ranging
hardware/boot
hardware/broadcastradio
hardware/camera/common
hardware/camera/device
hardware/camera/metadata
hardware/camera/provider
hardware/camera2
hardware/camera2/extension
hardware/camera2/impl
hardware/camera2/params
hardware/camera2/utils
hardware/cas
hardware/common
hardware/common/fmq
hardware/confirmationui
hardware/contexthub
hardware/devicestate
hardware/display
hardware/drm
hardware/dumpstate
hardware/face
hardware/fastboot
hardware/fingerprint
hardware/gatekeeper
hardware/gnss
hardware/gnss/measurement_corrections
hardware/gnss/types
hardware/gnss/visibility_control
hardware/graphics/allocator
hardware/graphics/common
hardware/graphics/composer3
hardware/hdmi
hardware/health
hardware/health/storage
hardware/identity
hardware/input
hardware/input/common
hardware/input/processor
hardware/input/types
hardware/ir
hardware/iris
hardware/keymaster
hardware/light
hardware/lights
hardware/location
hardware/macsec
hardware/media/bufferpool2
hardware/media/c2
hardware/memtrack
hardware/net/nlinterceptor
hardware/neuralnetworks
hardware/nfc
hardware/oemlock
hardware/power
hardware/power/stats
hardware/radio
hardware/radio/config
hardware/radio/data
hardware/radio/ims
hardware/radio/ims/media
hardware/radio/messaging
hardware/radio/modem
hardware/radio/network
hardware/radio/sap
hardware/radio/sim
hardware/radio/voice
hardware/rebootescrow
hardware/secure_element
hardware/security/authgraph
hardware/security/keymint
hardware/security/secretkeeper
hardware/security/secureclock
hardware/security/see/storage
hardware/security/sharedsecret
hardware/sensors
hardware/soundtrigger
hardware/soundtrigger3
hardware/tests/extension/vibrator
hardware/tetheroffload
hardware/thermal
hardware/threadnetwork
hardware/tv/hdmi/cec
hardware/tv/hdmi/connection
hardware/tv/hdmi/earc
hardware/tv/input
hardware/tv/tuner
hardware/usb
hardware/usb/gadget
hardware/uwb
hardware/uwb/fira_android
hardware/vibrator
hardware/weaver
hardware/wifi
hardware/wifi/common
hardware/wifi/hostapd
hardware/wifi/supplicant
location
location/provider
location/types
media
media/audio
media/audio/common
media/audiopolicy
media/browse
media/metrics
media/midi
media/musicrecognition
media/permission
media/projection
media/session
media/soundtrigger
media/soundtrigger_middleware
media/tv
media/tv/ad
media/tv/interactive
media/tv/tuner
media/tv/tunerresourcemanager
media/types
net
net/types
net/vcn
net/wifi/nl80211
net/wifi/sharedconnectivity/app
net/wifi/sharedconnectivity/service
nfc
nfc/cardemulation
os
os/connectivity
os/health
os/image
os/incremental
os/logcat
os/storage
os/types
permission
print
print/types
printservice
printservice/recommendation
se/omapi
security
security/attestationverification
security/keymaster
security/keystore
security/keystore/recovery
security/rkp
service/ambientcontext
service/appprediction
service/assist/classification
service/attention
service/autofill
service/autofill/augmented
service/carrier
service/chooser
service/contentcapture
service/contentsuggestions
service/controls
service/controls/actions
service/controls/templates
service/credentials
service/displayhash
service/dreams
service/euicc
service/games
service/media
service/notification
service/notification/types
service/oemlock
service/ondeviceintelligence
service/persistentdata
service/quickaccesswallet
service/quicksettings
service/remotelockscreenvalidation
service/resolver
service/resumeonreboot
service/rotationresolver
service/search
service/settings/suggestions
service/smartspace
service/storage
service/textclassifier
service/timezone
service/translation
service/trust
service/voice
service/voice/types
service/vr
service/wallpaper
service/wallpapereffectsgeneration
service/watchdog
service/wearable
speech
speech/tts
system/keystore2
system/net/netd
system/suspend
system/suspend/internal_
telecom
telephony
telephony/cdma
telephony/data
telephony/data/types
telephony/emergency
telephony/euicc
telephony/gba
telephony/ims
telephony/ims/aidl
telephony/ims/aidl/types
telephony/ims/feature
telephony/ims/stub
telephony/mbms
telephony/mbms/vendor
telephony/satellite
telephony/satellite/stub
tests/binder
tests/enforcepermission
text
text/style
tracing
util
view
view/accessibility
view/autofill
view/autofill/types
view/contentcapture
view/displayhash
view/inputmethod
view/inputmethod/types
view/textclassifier
view/textservice
view/translation
view/translation/types
view/types
webkit
widget
widget/inline
widget/types
window
binder
versionaware
versionaware/dex
bluetooth
constants
constants/aics
camera
Package camera provides a high-level API for capturing frames from an Android camera via binder.
Package camera provides a high-level API for capturing frames from an Android camera via binder.
cmd
binder-mcp command
binder-mcp is an MCP server that exposes Android binder services as tools for AI agents.
binder-mcp is an MCP server that exposes Android binder services as tools for AI agents.
binder-proxyd command
Binder proxy daemon — runs on an Android device, listens on TCP, and forwards binder transactions from host-side clients.
Binder proxy daemon — runs on an Android device, listens on TCP, and forwards binder transactions from host-side clients.
bindercli command
bindercli/conn
bindercli/discovery
bindercli/gen/aaudio
bindercli/gen/android
bindercli/gen/android_accessibilityservice
bindercli/gen/android_accounts
bindercli/gen/android_app
bindercli/gen/android_app_admin
bindercli/gen/android_app_ambientcontext
bindercli/gen/android_app_backup
bindercli/gen/android_app_blob
bindercli/gen/android_app_contentsuggestions
bindercli/gen/android_app_job
bindercli/gen/android_app_ondeviceintelligence
bindercli/gen/android_app_people
bindercli/gen/android_app_pinner
bindercli/gen/android_app_prediction
bindercli/gen/android_app_search
bindercli/gen/android_app_slice
bindercli/gen/android_app_smartspace
bindercli/gen/android_app_tare
bindercli/gen/android_app_time
bindercli/gen/android_app_timedetector
bindercli/gen/android_app_timezonedetector
bindercli/gen/android_app_trust
bindercli/gen/android_app_usage
bindercli/gen/android_app_wallpapereffectsgeneration
bindercli/gen/android_app_wearable
bindercli/gen/android_apphibernation
bindercli/gen/android_binderdebug_test
bindercli/gen/android_bluetooth
bindercli/gen/android_bluetooth_le
bindercli/gen/android_companion
bindercli/gen/android_companion_virtual
bindercli/gen/android_companion_virtual_audio
bindercli/gen/android_companion_virtual_camera
bindercli/gen/android_companion_virtual_sensor
bindercli/gen/android_companion_virtualcamera
bindercli/gen/android_companion_virtualnative
bindercli/gen/android_content
bindercli/gen/android_content_integrity
bindercli/gen/android_content_om
bindercli/gen/android_content_pm
bindercli/gen/android_content_pm_dex
bindercli/gen/android_content_pm_permission
bindercli/gen/android_content_pm_verify_domain
bindercli/gen/android_content_rollback
bindercli/gen/android_credentials
bindercli/gen/android_database
bindercli/gen/android_debug
bindercli/gen/android_dvr
bindercli/gen/android_flags
bindercli/gen/android_frameworks_automotive_display
bindercli/gen/android_frameworks_automotive_powerpolicy
bindercli/gen/android_frameworks_automotive_powerpolicy_internal
bindercli/gen/android_frameworks_automotive_telemetry
bindercli/gen/android_frameworks_cameraservice_device
bindercli/gen/android_frameworks_cameraservice_service
bindercli/gen/android_frameworks_location_altitude
bindercli/gen/android_frameworks_sensorservice
bindercli/gen/android_frameworks_stats
bindercli/gen/android_frameworks_vibrator
bindercli/gen/android_graphics_bufferstreams
bindercli/gen/android_gui
bindercli/gen/android_hardware
bindercli/gen/android_hardware_audio_core
bindercli/gen/android_hardware_audio_core_sounddose
bindercli/gen/android_hardware_audio_core_sounddose_ISoundDose
bindercli/gen/android_hardware_audio_effect
bindercli/gen/android_hardware_audio_sounddose
bindercli/gen/android_hardware_authsecret
bindercli/gen/android_hardware_automotive_audiocontrol
bindercli/gen/android_hardware_automotive_can
bindercli/gen/android_hardware_automotive_evs
bindercli/gen/android_hardware_automotive_ivn
bindercli/gen/android_hardware_automotive_occupant_awareness
bindercli/gen/android_hardware_automotive_remoteaccess
bindercli/gen/android_hardware_automotive_vehicle
bindercli/gen/android_hardware_biometrics
bindercli/gen/android_hardware_biometrics_common
bindercli/gen/android_hardware_biometrics_face
bindercli/gen/android_hardware_biometrics_fingerprint
bindercli/gen/android_hardware_bluetooth
bindercli/gen/android_hardware_bluetooth_audio
bindercli/gen/android_hardware_bluetooth_finder
bindercli/gen/android_hardware_bluetooth_lmp_event
bindercli/gen/android_hardware_bluetooth_offload_leaudio
bindercli/gen/android_hardware_bluetooth_ranging
bindercli/gen/android_hardware_boot
bindercli/gen/android_hardware_broadcastradio
bindercli/gen/android_hardware_camera2
bindercli/gen/android_hardware_camera2_extension
bindercli/gen/android_hardware_camera_device
bindercli/gen/android_hardware_camera_provider
bindercli/gen/android_hardware_cas
bindercli/gen/android_hardware_confirmationui
bindercli/gen/android_hardware_contexthub
bindercli/gen/android_hardware_devicestate
bindercli/gen/android_hardware_display
bindercli/gen/android_hardware_drm
bindercli/gen/android_hardware_dumpstate
bindercli/gen/android_hardware_face
bindercli/gen/android_hardware_fastboot
bindercli/gen/android_hardware_fingerprint
bindercli/gen/android_hardware_gatekeeper
bindercli/gen/android_hardware_gnss
bindercli/gen/android_hardware_gnss_measurement_corrections
bindercli/gen/android_hardware_gnss_visibility_control
bindercli/gen/android_hardware_graphics_allocator
bindercli/gen/android_hardware_graphics_composer3
bindercli/gen/android_hardware_hdmi
bindercli/gen/android_hardware_health
bindercli/gen/android_hardware_health_storage
bindercli/gen/android_hardware_identity
bindercli/gen/android_hardware_input
bindercli/gen/android_hardware_input_processor
bindercli/gen/android_hardware_ir
bindercli/gen/android_hardware_iris
bindercli/gen/android_hardware_light
bindercli/gen/android_hardware_lights
bindercli/gen/android_hardware_location
bindercli/gen/android_hardware_macsec
bindercli/gen/android_hardware_media_bufferpool2
bindercli/gen/android_hardware_media_c2
bindercli/gen/android_hardware_memtrack
bindercli/gen/android_hardware_net_nlinterceptor
bindercli/gen/android_hardware_neuralnetworks
bindercli/gen/android_hardware_nfc
bindercli/gen/android_hardware_oemlock
bindercli/gen/android_hardware_power
bindercli/gen/android_hardware_power_stats
bindercli/gen/android_hardware_radio
bindercli/gen/android_hardware_radio_config
bindercli/gen/android_hardware_radio_data
bindercli/gen/android_hardware_radio_ims
bindercli/gen/android_hardware_radio_ims_media
bindercli/gen/android_hardware_radio_messaging
bindercli/gen/android_hardware_radio_modem
bindercli/gen/android_hardware_radio_network
bindercli/gen/android_hardware_radio_sap
bindercli/gen/android_hardware_radio_sim
bindercli/gen/android_hardware_radio_voice
bindercli/gen/android_hardware_rebootescrow
bindercli/gen/android_hardware_secure_element
bindercli/gen/android_hardware_security_authgraph
bindercli/gen/android_hardware_security_keymint
bindercli/gen/android_hardware_security_secretkeeper
bindercli/gen/android_hardware_security_secureclock
bindercli/gen/android_hardware_security_see_storage
bindercli/gen/android_hardware_security_sharedsecret
bindercli/gen/android_hardware_sensors
bindercli/gen/android_hardware_soundtrigger
bindercli/gen/android_hardware_soundtrigger3
bindercli/gen/android_hardware_tests_extension_vibrator
bindercli/gen/android_hardware_tetheroffload
bindercli/gen/android_hardware_thermal
bindercli/gen/android_hardware_threadnetwork
bindercli/gen/android_hardware_tv_hdmi_cec
bindercli/gen/android_hardware_tv_hdmi_connection
bindercli/gen/android_hardware_tv_hdmi_earc
bindercli/gen/android_hardware_tv_input
bindercli/gen/android_hardware_tv_tuner
bindercli/gen/android_hardware_usb
bindercli/gen/android_hardware_usb_gadget
bindercli/gen/android_hardware_uwb
bindercli/gen/android_hardware_vibrator
bindercli/gen/android_hardware_weaver
bindercli/gen/android_hardware_wifi
bindercli/gen/android_hardware_wifi_hostapd
bindercli/gen/android_hardware_wifi_supplicant
bindercli/gen/android_location
bindercli/gen/android_location_provider
bindercli/gen/android_media
bindercli/gen/android_media_audio
bindercli/gen/android_media_audiopolicy
bindercli/gen/android_media_metrics
bindercli/gen/android_media_midi
bindercli/gen/android_media_musicrecognition
bindercli/gen/android_media_projection
bindercli/gen/android_media_session
bindercli/gen/android_media_soundtrigger
bindercli/gen/android_media_soundtrigger_middleware
bindercli/gen/android_media_tv
bindercli/gen/android_media_tv_ad
bindercli/gen/android_media_tv_interactive
bindercli/gen/android_media_tv_tuner
bindercli/gen/android_media_tv_tunerresourcemanager
bindercli/gen/android_net
bindercli/gen/android_net_vcn
bindercli/gen/android_net_wifi_nl80211
bindercli/gen/android_net_wifi_sharedconnectivity_service
bindercli/gen/android_nfc
bindercli/gen/android_os
bindercli/gen/android_os_image
bindercli/gen/android_os_incremental
bindercli/gen/android_os_logcat
bindercli/gen/android_os_storage
bindercli/gen/android_permission
bindercli/gen/android_print
bindercli/gen/android_printservice
bindercli/gen/android_printservice_recommendation
bindercli/gen/android_se_omapi
bindercli/gen/android_security
bindercli/gen/android_security_attestationverification
bindercli/gen/android_security_keystore
bindercli/gen/android_security_rkp
bindercli/gen/android_service_ambientcontext
bindercli/gen/android_service_appprediction
bindercli/gen/android_service_assist_classification
bindercli/gen/android_service_attention
bindercli/gen/android_service_autofill
bindercli/gen/android_service_autofill_augmented
bindercli/gen/android_service_carrier
bindercli/gen/android_service_chooser
bindercli/gen/android_service_contentcapture
bindercli/gen/android_service_contentsuggestions
bindercli/gen/android_service_controls
bindercli/gen/android_service_credentials
bindercli/gen/android_service_displayhash
bindercli/gen/android_service_dreams
bindercli/gen/android_service_euicc
bindercli/gen/android_service_games
bindercli/gen/android_service_media
bindercli/gen/android_service_notification
bindercli/gen/android_service_oemlock
bindercli/gen/android_service_ondeviceintelligence
bindercli/gen/android_service_persistentdata
bindercli/gen/android_service_quickaccesswallet
bindercli/gen/android_service_quicksettings
bindercli/gen/android_service_remotelockscreenvalidation
bindercli/gen/android_service_resolver
bindercli/gen/android_service_resumeonreboot
bindercli/gen/android_service_rotationresolver
bindercli/gen/android_service_settings_suggestions
bindercli/gen/android_service_storage
bindercli/gen/android_service_textclassifier
bindercli/gen/android_service_timezone
bindercli/gen/android_service_translation
bindercli/gen/android_service_trust
bindercli/gen/android_service_voice
bindercli/gen/android_service_vr
bindercli/gen/android_service_wallpaper
bindercli/gen/android_service_watchdog
bindercli/gen/android_service_wearable
bindercli/gen/android_speech
bindercli/gen/android_speech_tts
bindercli/gen/android_system_keystore2
bindercli/gen/android_system_net_netd
bindercli/gen/android_system_suspend
bindercli/gen/android_system_suspend_internal
bindercli/gen/android_telephony
bindercli/gen/android_telephony_data
bindercli/gen/android_telephony_gba
bindercli/gen/android_telephony_ims_aidl
bindercli/gen/android_telephony_mbms
bindercli/gen/android_telephony_satellite
bindercli/gen/android_telephony_satellite_stub
bindercli/gen/android_tests_binder
bindercli/gen/android_tests_enforcepermission
bindercli/gen/android_tracing
bindercli/gen/android_util
bindercli/gen/android_view
bindercli/gen/android_view_accessibility
bindercli/gen/android_view_autofill
bindercli/gen/android_view_contentcapture
bindercli/gen/android_view_translation
bindercli/gen/android_webkit
bindercli/gen/android_window
bindercli/gen/com_android_frameworks_coretests_aidl
bindercli/gen/com_android_frameworks_perftests_am_util
bindercli/gen/com_android_ims_internal
bindercli/gen/com_android_ims_internal_uce_options
bindercli/gen/com_android_ims_internal_uce_presence
bindercli/gen/com_android_ims_internal_uce_uceservice
bindercli/gen/com_android_internal_app
bindercli/gen/com_android_internal_app_procstats
bindercli/gen/com_android_internal_appwidget
bindercli/gen/com_android_internal_backup
bindercli/gen/com_android_internal_compat
bindercli/gen/com_android_internal_graphics_fonts
bindercli/gen/com_android_internal_infra
bindercli/gen/com_android_internal_inputmethod
bindercli/gen/com_android_internal_net
bindercli/gen/com_android_internal_os
bindercli/gen/com_android_internal_policy
bindercli/gen/com_android_internal_statusbar
bindercli/gen/com_android_internal_telecom
bindercli/gen/com_android_internal_telephony
bindercli/gen/com_android_internal_telephony_euicc
bindercli/gen/com_android_internal_textservice
bindercli/gen/com_android_internal_view
bindercli/gen/com_android_internal_view_inline
bindercli/gen/com_android_internal_widget
bindercli/gen/com_android_net
bindercli/gen/com_android_onemedia
bindercli/gen/com_android_onemedia_playback
bindercli/gen/com_android_printspooler_renderer
bindercli/gen/com_android_server_inputflinger
bindercli/gen/com_android_server_inputflinger_IInputFilter
bindercli/gen/com_android_server_inputflinger_IInputFlingerRust
bindercli/gen/com_android_server_inputflinger_IInputThread
bindercli/gen/com_android_smspush_unitTests
bindercli/gen/com_android_systemui_assist
bindercli/gen/com_android_systemui_notetask
bindercli/gen/com_android_systemui_screenshot
bindercli/gen/com_android_systemui_screenshot_appclips
bindercli/gen/com_android_systemui_shared_recents
bindercli/gen/com_android_systemui_shared_system_smartspace
bindercli/gen/com_android_systemui_unfold_progress
bindercli/gen/com_android_systemui_wallet_controller [Page truncated to keep GeezerVison snappy.]

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.