Skip to content

CameraTools v1.3.1: Security Hardening, 15 Features & Modern Logo

Choose a tag to compare

@official-Arvind official-Arvind released this 21 Oct 11:48
· 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" and xposedsharedprefs="true" in AndroidManifest.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).
  • HookMain instantiates new 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() in MainActivity: dynamically discovers target camera package UID (stat -c %u), creates target directories, copies the XML config, sets chmod 666, applies chown, and runs restorecon -F to ensure full SELinux compliance.
  • Guarantees that /data/data/com.android.camera/shared_prefs/cameratools_prefs.xml exists, is readable, and has matching SELinux contexts.

3. Android 11+ Package Visibility Bypass

  • Added grantCameraUriPermissions() in MainActivity to explicitly grant FLAG_GRANT_READ_URI_PERMISSION across 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's loadAllBooleans() to traverse Device-Protected storage (DE), Credential-Protected storage (CE), and fallback XML directly, preventing default false returns.

5. Live Lifecycle Preference Reloading

  • Added hooks on Application.onCreate and Activity.onResume in HookMain to reload settings immediately when switching between CameraTools and the camera application without requiring a full zygote reboot.

📋 Instructions for Tester Jay & AOSP Users:

  1. Install Update: Install io.github.official_arvind.cameratools-v1.3.1.apk.
  2. Grant Superuser: Open CameraTools and tap Grant (Always Allow) when prompted by Magisk, KernelSU, or APatch.
  3. 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.
  4. Configure & Restart: Toggle your desired settings (e.g., 50MP RAW, 4K60, Bitrate) and tap Restart Camera inside the app.
  5. Verify Logs:
    adb logcat -s CameraTools VectorLegacyBridge
    You should now see:
    [CameraTools] Successfully loaded preferences via LSPosed API 93 XSharedPreferences: raw=true, 50MP=true, 4k60=true
    
    or
    [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