Repository navigation
CameraTools v1.3.1: Security Hardening, 15 Features & Modern Logo
·
40 commits
to main
since this release
CameraTools v1.3.1 — AOSP Preference Loading & LSPosed API 93 Fix (Pre-Release)
Important
Hotfix Pre-Release for AOSP ROMs & Vector / LSPosed Users:
In v1.3.0, users running AOSP ROMs (such as Evolution X, crDroid, and LineageOS) with Vector or modern LSPosed reported that preferences toggled in the UI were not applied to com.android.camera at runtime (exists=false canRead=false in diagnostic logs).
Version 1.3.1 completely resolves this with our new 4-Tier Bulletproof Preference Architecture.
🚀 What's Changed in v1.3.1:
1. LSPosed API 93 RemotePreferences (Non-Root & Root)
- Declared
xposedminversion="93"andxposedsharedprefs="true"inAndroidManifest.xml. - Module UI saves preferences via
Context.MODE_WORLD_READABLE, redirected automatically by LSPosed API 93 into a shared cross-process IPC directory (/data/misc/.../prefs/io.github.official_arvind.cameratools). HookMaininstantiatesnew XSharedPreferences("io.github.official_arvind.cameratools", PrefProvider.PREFS_NAME), bypassing Android 14 filesystem DAC/MAC sandbox restrictions entirely.
2. Automated SELinux Root Sync Bridge
- Added
syncPrefsWithRoot()inMainActivity: dynamically discovers target camera package UID (stat -c %u), creates target directories, copies the XML config, setschmod 666, applieschown, and runsrestorecon -Fto ensure full SELinux compliance. - Guarantees that
/data/data/com.android.camera/shared_prefs/cameratools_prefs.xmlexists, is readable, and has matching SELinux contexts.
3. Android 11+ Package Visibility Bypass
- Added
grantCameraUriPermissions()inMainActivityto explicitly grantFLAG_GRANT_READ_URI_PERMISSIONacross all 13 supported camera packages (com.android.camera,com.miui.camera, GCam packages, Aperture, GrapheneOS Camera, OpenCamera).
4. Multi-Tier Fallback Provider
- Completely revamped
PrefProvider'sloadAllBooleans()to traverse Device-Protected storage (DE), Credential-Protected storage (CE), and fallback XML directly, preventing defaultfalsereturns.
5. Live Lifecycle Preference Reloading
- Added hooks on
Application.onCreateandActivity.onResumeinHookMainto reload settings immediately when switching between CameraTools and the camera application without requiring a full zygote reboot.
📋 Instructions for Tester Jay & AOSP Users:
- Install Update: Install
io.github.official_arvind.cameratools-v1.3.1.apk. - Grant Superuser: Open CameraTools and tap Grant (Always Allow) when prompted by Magisk, KernelSU, or APatch.
- Verify LSPosed / Vector Scope: In LSPosed/Vector manager, ensure CameraTools is enabled and
com.android.camera(and your other camera apps) are checked in the scope. - Configure & Restart: Toggle your desired settings (e.g., 50MP RAW, 4K60, Bitrate) and tap Restart Camera inside the app.
- Verify Logs:
You should now see:
adb logcat -s CameraTools VectorLegacyBridge
or[CameraTools] Successfully loaded preferences via LSPosed API 93 XSharedPreferences: raw=true, 50MP=true, 4k60=true[CameraTools] Preferences updated via ContentProvider: raw=true, 50MP=true
📦 Checksums & Verification:
- APK Filename:
io.github.official_arvind.cameratools-v1.3.1.apk - Version Code:
131 - Version Name:
1.3.1 - Min Xposed API:
93 - Signature: Android APK Signature Scheme v2 & v3 verified