Car+ Unlocker

简体中文

Car+ Unlocker is a modern Xposed module (libxposed API 102, with an API 101 variant) for OPPO / OnePlus devices that lets any installed third‑party app appear in the ColorOS Car+ (com.oplus.ocar) app list and be launched from the car UI.

  • Package: io.github.hao1196561270.CarPlusUnlocker
  • API: libxposed API 102 (main) / API 101 variant in api101/CarPlusUnlocker-v1.1-api101-release.apk
  • Target: Car+ (com.oplus.ocar) on OPPO / OnePlus ColorOS
  • Size: ≈ 64 KB release APK (R8 + shrinkResources)

Features

  • Dense list of third‑party (non‑system) apps (icon / name / version) with per‑app enable switches
  • Search: tap the magnifier icon — the top bar expands into a full‑width input with live filtering (magnifier at the far left, the whole bar is tappable)
  • Pull‑to‑refresh to reload the list
  • “停止Car+” button: force‑stops Car+ (root required) so configuration changes take effect immediately; shows a short one‑time help dialog
  • Hide launcher icon: hides the desktop entry via a launcher alias — the app itself stays reachable through the LSPosed manager "Settings" entry, the in‑app switch, or adb shell pm enable io.github.hao1196561270.CarPlusUnlocker/.DeskIcon
  • Custom icon (via pinned shortcut): Settings → Custom Icon → pick any gallery image, drag / pinch / SeekBar to adjust, crop to a square and add to the home screen as a pinned shortcut (original launcher icon remains)
  • Unified look: fixed brand‑color top bar (identical in light and dark mode with the status bar), pure white / pure black page backgrounds, adaptive text colors
  • Minimal footprint: framework widgets only (ListView / SearchView / native pull‑to‑refresh), no androidx runtime dependency; the signed release APK is about 64 KB thanks to R8 + resource shrinking

How it works

Car+ Unlocker UI (module app)
        │  writes via libxposed service
        ▼
LSPosed database (Remote Preferences, group "carplus_unlocker")
        ▲
        │  read‑only via getRemotePreferences (hooked process)
        │
com.oplus.ocar process
   Hook 1  android.app.Application.onCreate   → kill Car+ background processes + lazy scan of enabled apps
   Hook 2  com.oplus.ocar.carcontrol.response.CertifiedApps.getList
            → unmark "experimental" apps, inject the enabled apps as media apps (fields like
              appType="media", launch/display params, Car Fusion / CarPlus / double‑open support)

Enabled‑app switches are stored in Remote Preferences (LSPosed database) through the libxposed service; the hook reads the same group read‑only, so UI state and hook behaviour stay in sync without file sharing.

Requirements

  • Android 15+ (minSdk 35)
  • Root (KernelSU or Magisk) with LSPosed (or a compatible framework) that supports libxposed API 102 (LSPosed 1.9.x with API 102 support or newer) — API 101 variant available for older LSPosed (api101/CarPlusUnlocker-v1.1-api101-release.apk, minApiVersion 101)
  • Car+ (com.oplus.ocar) installed
  • The “停止Car+” / refresh‑style actions need root (su)

Build from source

./gradlew assembleDebug        # debug APK
./gradlew assembleRelease      # signed release APK (signing config in `keystore/`, local only)

Release builds are signed; keep keystore/ (git‑ignored) backed up so future releases can be installed over previous versions.

Install & Usage

  1. Install the APK (release builds are signed; installing over previous versions preserves state).
  2. Open LSPosed → Modules → enable Car+ Unlocker (scope com.oplus.ocar is declared statically by the module).
  3. Open Car+ Unlocker, enable the apps you want in Car+ (search / pull‑to‑refresh supported).
  4. Tap “停止Car+” (root) or stop/restart Car+ manually; then check the Car+ app list in the car UI.

Hide launcher icon: toggle “隐藏桌面图标” in the app. To show it again: open the app via LSPosed manager → module → Settings and toggle the switch back, or run adb shell pm enable io.github.hao1196561270.CarPlusUnlocker/.DeskIcon.

Compatibility notes

The hooks target Car+ internals (CertifiedApps.getList, CertifiedAppInfo). Car+ updates may rename or restructure these classes; if the module stops working after an update, check the relevant signatures against your Car+ build. See HOOKS.md for the full hook list and maintenance notes.

License

Apache License 2.0

Built on libxposed (Apache‑2.0) and androidx.swiperefreshlayout.

Releases

v1.1

Stable

9/2/2026, 12:59:43 PM

Car+ Unlocker v1.1 (slim)

What's New

  • Slim build: removed custom icon (pinned shortcut) feature to reduce size, deleted dead resources (dialog_crop, crop_overlay, ic_refresh, ic_stop), enabled R8 + shrinkResources
  • Size: 53.7 KB Release (down from 64.2 KB, ~16% smaller), all core functions retained (search, hide launcher icon, stop Car+)
  • New launcher icon from v1.1 retained: white background with dark car and blue wrench, centered in adaptive safe zone
  • API 101 variant slimmed: CarPlusUnlocker-v1.1-api101-release.apk (53.5 KB) for older LSPosed

更新内容

  • 精简体积:移除自定义更换模块图标功能(快捷方式实现),删除无用资源(dialog_crop / crop_overlay / ic_refresh / ic_stop),启用 R8 + 资源压缩
  • 体积:53.7 KB Release(原 64.2 KB,缩减约 16%),全部核心功能保留(搜索 / 隐藏桌面图标 / 停止Car+)
  • 已包含 v1.1 全新图标:白底黑车蓝扳手,居中适配
  • API 101 变体同步精简:CarPlusUnlocker-v1.1-api101-release.apk(53.5 KB)适配旧版 LSPosed

Assets

2

1.0

Stable

9/1/2026, 2:03:44 PM

Car+ Unlocker v1.0.0

在 ColorOS Car+ 应用列表中添加任意第三方应用 / Add any third-party app to the ColorOS Car+ app list.

  • 首个版本 / Initial release v1.0
  • 正式签名 / Officially signed

Assets

1