Full but still broken rework of everything
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
#!/system/bin/sh
|
||||
# CamSwapper VDM Privilege Module - Installation customization
|
||||
# Sourced by KernelSU/Magisk installer after files are extracted.
|
||||
|
||||
SKIPUNZIP=0
|
||||
|
||||
# Set permissions
|
||||
set_perm_recursive "$MODPATH/system" 0 0 0755 0644
|
||||
set_perm "$MODPATH/system/priv-app/CamSwapper/CamSwapper.apk" 0 0 0644
|
||||
set_perm "$MODPATH/system/etc/permissions/privapp-permissions-camswapper.xml" 0 0 0644
|
||||
set_perm "$MODPATH/post-fs-data.sh" 0 0 0755
|
||||
set_perm "$MODPATH/service.sh" 0 0 0755
|
||||
set_perm "$MODPATH/uninstall.sh" 0 0 0755
|
||||
|
||||
# Remove user-installed version to avoid package conflict
|
||||
if command -v pm >/dev/null 2>&1; then
|
||||
pm uninstall com.nothing.camera2magic 2>/dev/null && \
|
||||
ui_print "- Removed user-installed CamSwapper"
|
||||
fi
|
||||
|
||||
ui_print ""
|
||||
ui_print " CamSwapper VDM Privilege Module"
|
||||
ui_print " ──────────────────────────────"
|
||||
ui_print " Installed CamSwapper as privileged system app"
|
||||
ui_print " Granted: REQUEST_COMPANION_PROFILE_APP_STREAMING"
|
||||
ui_print " Granted: REQUEST_COMPANION_SELF_MANAGED"
|
||||
ui_print " Granted: CREATE_VIRTUAL_DEVICE"
|
||||
ui_print ""
|
||||
ui_print " After reboot:"
|
||||
ui_print " 1. Open CamSwapper (it's now a system app)"
|
||||
ui_print " 2. Grant CAMERA + POST_NOTIFICATIONS permissions"
|
||||
ui_print " 3. Start virtual camera"
|
||||
ui_print ""
|
||||
@@ -0,0 +1,6 @@
|
||||
id=camswapper-vdm
|
||||
name=CamSwapper VDM Privilege Module
|
||||
version=3.2
|
||||
versionCode=8
|
||||
author=CamSwapper
|
||||
description=Grants CamSwapper privileged system permissions via priv-app overlay, enabling VirtualDeviceManager (VDM) API access for system-level virtual camera creation. Compatible with KernelSU.
|
||||
@@ -0,0 +1,28 @@
|
||||
#!/system/bin/sh
|
||||
# Set up overlay mount for CamSwapper priv-app
|
||||
|
||||
MODDIR=/data/adb/modules/camswapper-vdm
|
||||
|
||||
# Mount tmpfs for our overlay upperdir
|
||||
mount -t tmpfs tmpfs /mnt/camswapper_overlay
|
||||
|
||||
# Create directory structure
|
||||
mkdir -p /mnt/camswapper_overlay/upper/system/priv-app/CamSwapper
|
||||
mkdir -p /mnt/camswapper_overlay/work
|
||||
|
||||
# Copy APK from module (it's already there from module packaging)
|
||||
# No, we need to copy it - but the module file is readable by root
|
||||
cp "$MODDIR/system/priv-app/CamSwapper/CamSwapper.apk" /mnt/camswapper_overlay/upper/system/priv-app/CamSwapper/
|
||||
|
||||
# Set proper permissions and SELinux context
|
||||
chmod 755 /mnt/camswapper_overlay/upper/system/priv-app/CamSwapper
|
||||
chmod 644 /mnt/camswapper_overlay/upper/system/priv-app/CamSwapper/CamSwapper.apk
|
||||
chcon -R u:object_r:system_file:s0 /mnt/camswapper_overlay/upper/system/priv-app
|
||||
|
||||
# Mount overlay on /system/priv-app
|
||||
mount -t overlay overlay \
|
||||
-o lowerdir=/system/priv-app,upperdir=/mnt/camswapper_overlay/upper/system/priv-app,workdir=/mnt/camswapper_overlay/work \
|
||||
/system/priv-app
|
||||
|
||||
echo "Overlay mount result: $?"
|
||||
ls /system/priv-app/CamSwapper/ 2>&1
|
||||
@@ -0,0 +1,39 @@
|
||||
#!/system/bin/sh
|
||||
MODDIR="${0%/*}"
|
||||
|
||||
OVERLAY_UPPER=/mnt/.cswp_overlay
|
||||
OVERLAY_WORK=/mnt/.cswp_work
|
||||
OVERLAY_WORK_ETC=/mnt/.cswp_work_etc
|
||||
|
||||
# Clean any stale workdir state from previous mounts. OverlayFS workdirs MUST be
|
||||
# pristine — if left dirty after a lazy umount (umount -l), the kernel gets confused.
|
||||
rm -rf "$OVERLAY_WORK" "$OVERLAY_WORK_ETC"
|
||||
mkdir -p "$OVERLAY_WORK" "$OVERLAY_WORK_ETC"
|
||||
mkdir -p "$OVERLAY_UPPER/system/priv-app/CamSwapper"
|
||||
mkdir -p "$OVERLAY_UPPER/system/etc/permissions"
|
||||
|
||||
# Copy APK and privapp permissions XML to overlay upper dir.
|
||||
# Android 16 requires privileged permission allowlisting — without the privapp XML,
|
||||
# system_server FATAL EXCEPTION crashes on boot.
|
||||
cp "$MODDIR/system/priv-app/CamSwapper/CamSwapper.apk" \
|
||||
"$OVERLAY_UPPER/system/priv-app/CamSwapper/"
|
||||
cp "$MODDIR/system/etc/permissions/privapp-permissions-camswapper.xml" \
|
||||
"$OVERLAY_UPPER/system/etc/permissions/"
|
||||
|
||||
# Set permissions and SELinux context
|
||||
chmod 755 "$OVERLAY_UPPER/system/priv-app/CamSwapper"
|
||||
chmod 644 "$OVERLAY_UPPER/system/priv-app/CamSwapper/CamSwapper.apk"
|
||||
chmod 644 "$OVERLAY_UPPER/system/etc/permissions/privapp-permissions-camswapper.xml"
|
||||
chcon -R u:object_r:system_file:s0 "$OVERLAY_UPPER/system"
|
||||
|
||||
# Mount overlay on /system/priv-app so PackageManager sees CamSwapper as priv-app
|
||||
mount -t overlay overlay \
|
||||
-o lowerdir=/system/priv-app,upperdir="$OVERLAY_UPPER/system/priv-app",workdir="$OVERLAY_WORK" \
|
||||
/system/priv-app
|
||||
|
||||
# Mount overlay on /system/etc/permissions with its own workdir so SystemConfig
|
||||
# finds the privapp permissions XML during early boot.
|
||||
mkdir -p "$OVERLAY_WORK_ETC"
|
||||
mount -t overlay overlay \
|
||||
-o lowerdir=/system/etc/permissions,upperdir="$OVERLAY_UPPER/system/etc/permissions",workdir="$OVERLAY_WORK_ETC" \
|
||||
/system/etc/permissions
|
||||
@@ -0,0 +1,4 @@
|
||||
# Allow privileged app to use VirtualDeviceManager Binder service
|
||||
allow priv_app virtualdevice_service:service_manager find;
|
||||
allow priv_app virtualdevice_service:dir { search };
|
||||
allow priv_app virtualdevice_service:file { read open };
|
||||
@@ -0,0 +1,32 @@
|
||||
#!/system/bin/sh
|
||||
MODDIR="${0%/*}"
|
||||
|
||||
# Wait for boot to complete
|
||||
while [ "$(getprop sys.boot_completed)" != 1 ]; do
|
||||
/system/bin/sleep 1
|
||||
done
|
||||
|
||||
# Clean up user-installed version if it's still around
|
||||
INSTALL_PATH=$(pm path com.nothing.camera2magic 2>/dev/null | grep package: | head -1)
|
||||
if echo "$INSTALL_PATH" | grep -q "/data/app/"; then
|
||||
pm uninstall com.nothing.camera2magic 2>/dev/null
|
||||
fi
|
||||
|
||||
# --- Diagnostics ---
|
||||
LOG_TAG="CamSwapperModule"
|
||||
log -t "$LOG_TAG" "=== CamSwapper VDM module service.sh ==="
|
||||
|
||||
# Verify overlay visibility
|
||||
for f in \
|
||||
/system/priv-app/CamSwapper/CamSwapper.apk \
|
||||
/system/etc/permissions/privapp-permissions-camswapper.xml; do
|
||||
if [ -f "$f" ]; then
|
||||
log -t "$LOG_TAG" "OK: $f exists"
|
||||
ls -la "$f" 2>&1 | log -t "$LOG_TAG"
|
||||
else
|
||||
log -t "$LOG_TAG" "MISSING: $f NOT FOUND"
|
||||
fi
|
||||
done
|
||||
|
||||
# Show mounts under /system
|
||||
mount | grep " /system" | log -t "$LOG_TAG"
|
||||
@@ -0,0 +1,2 @@
|
||||
# CamSwapper VDM Module - system properties (optional)
|
||||
# VirtualDeviceManager is enabled by default on Android 14+
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<permissions>
|
||||
<!-- Grant privileged permissions to CamSwapper for VDM API access.
|
||||
These permissions are signature|privileged level, requiring the app
|
||||
to be installed as a privileged system app (in /system/priv-app/). -->
|
||||
<privapp-permissions package="com.nothing.camera2magic">
|
||||
<permission name="android.permission.REQUEST_COMPANION_PROFILE_APP_STREAMING"/>
|
||||
<permission name="android.permission.REQUEST_COMPANION_SELF_MANAGED"/>
|
||||
<permission name="android.permission.CREATE_VIRTUAL_DEVICE"/>
|
||||
</privapp-permissions>
|
||||
</permissions>
|
||||
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
#!/system/bin/sh
|
||||
# CamSwapper VDM Privilege Module - Uninstall script
|
||||
# Removes the privileged system app entry from package manager.
|
||||
|
||||
# Remove the system app entry from package manager
|
||||
if command -v pm >/dev/null 2>&1; then
|
||||
pm uninstall com.nothing.camera2magic 2>/dev/null
|
||||
fi
|
||||
Reference in New Issue
Block a user