Stages TWRP's GUI engine and standalone tooling as PawletOS-owned modules
instead of a bootable/recovery fork, per the plugin-architecture finding in
NOTES-ota-recovery-ab.md: stock recovery_main.cpp already dlopen()s
librecovery_ui_ext.so and dlsym()s make_device() from it at runtime, so the
UI layer doesn't require touching stock bootable/recovery at all. Confirmed
via source grep that recovery.cpp/install.cpp have zero references into the
partition manager/backup engine/GUI code and vice versa.
recovery_ui/: TWRP's gui/, minuitwrp/, libpixelflinger/ (copied verbatim,
GPL-3.0), plus a new device/ providing PawletTwrpUI (a ScreenRecoveryUI
subclass) and make_device() — written from scratch against stock's
RecoveryUI/ScreenRecoveryUI virtual-method contract, since TWRP's own fork
never ships a make_device() (every real TWRP device provides its own, and
no reference device tree was available to copy from). Top-level Android.bp
defines librecovery_ui_pawlet_twrp, the module TARGET_RECOVERY_UI_LIB should
point at. gui/Android.bp and minuitwrp/Android.bp had their include_dirs
rewritten for the new paths.
recovery_toolkit/: partition manager, backup engine (tar/digest/adbbu/apex),
filesystem/format support (exfat/dosfstools/gpt/fuse/mtp/crypto), scripting
(openrecoveryscript/orscmd/twrpinstall), shared helpers. Source only, no
Android.bp yet for any of it.
Known gap blocking recovery_ui from actually linking: gui/'s libguitwrp
depends on libaosprecovery, built from recovery_toolkit/helpers/twrp.cpp via
a Go Soong plugin (libaosprecovery_defaults.go) not yet ported. Neither repo
has been build-tested — no local AOSP build environment available in this
workspace. See each directory's README.md for a precise done/not-done
breakdown.
bg-upd's own sepolicy domain (packages/apps/BgUpd/sepolicy, in its own repo)
now gets pulled into BOARD_SEPOLICY_DIRS unconditionally alongside its
PRODUCT_PACKAGES entry, since it's a core PawletOS system app.
PAWLET_SECURITY_PATCH/PLATFORM_SECURITY_PATCH didn't exist anywhere before —
device previously just inherited whatever default date came from upstream.
Paired with PawletOS-Build/docs/security-patch-process.md and
scripts/check_security_patch.py.
- Add BgUpd + a day-one webview package to PRODUCT_PACKAGES so devices
boot with a working WebView before bg-upd's first check ever runs
- Add config_webview_packages.xml declaring the providers bg-upd can
switch between at runtime
- Add default_wallpaper.png to the framework RRO overlay (single image
for all devices/densities for now — see the new overlay README)
Patches are maintained in PawletOS/patches (synced to vendor/pawlet/patches
by the local manifest). The copies here were dead code — repo sync overlays
the patches repo on this directory, so these files were never applied.
The previous whitelist only granted FAKE_PACKAGE_SIGNATURE. With
ro.control_privapp_permissions=enforce, PKMS throws a fatal exception
for each missing privileged permission, killing system_server before
ActivityManagerService can register — causing the bootloop.
Added all android.permission.* entries with protectionLevel including
"privileged" that GmsCore and FakeStore declare in their manifests.
AOSP 16 now defines android_upgrading_title with explicit product="default",
product="tablet", and product="device" variants. Defining it without a
product attribute in the overlay creates a duplicate default-product entry
that aapt2 rejects. Match AOSP's product split and drop android_upgrading_starting
which was removed upstream.
pbuild — builds boot + system + system_ext + vendor images in one shot
pdist — builds the dist target to produce a signable target_files zip
psign — signs target_files with ~/pawlet-certs release keys; automatically
excludes presigned microG/FDroid APKs from re-signing
pota — wraps ota_from_target_files; supports full and incremental (-i) OTAs
Adds patches/frameworks/base/:
- android_frameworks_base-signature-spoofing.patch: microG signature
spoofing support (forward-port from Android 12)
- sysui-taskbar-navfix.patch: adds config_taskbarEnabled resource to
SystemUI and checks it in NavigationBarControllerImpl.supportsTaskbar(),
allowing per-device overlay opt-out of Taskbar in favour of traditional
3-button nav bar
Ships the common vendor.cfg to the vendor partition. Device trees
inherit this by default; they can switch to their own device-specific
vendor.cfg by commenting out the inherit-product call and uncommenting
their own PRODUCT_COPY_FILES entry.
Foundation of the vendor/pawlet tree for Android 16:
- Hardware feature declarations for RPi phone/tablet/TV variants
- BootControl HAL: fix VINTF manifest version, qualify android::base namespace
- microG: add microg.mk with FAKE_PACKAGE_SIGNATURE auto-grant and network
location feature XML; enable for all RPi variants
- PawletPlatform resource APK and ThemePickerPawletOverlay: fix XML comments
- Updater overlay: wire in tryboot A/B config for RPi firmware tryboot support
- PawletSettings added to PRODUCT_PACKAGES
- Separated RPi-specific configs from base vendor config