Enables Wi-Fi Display (Miracast) on Pixel phones where Google disabled it in software. Uses fabricated overlays, system properties, and sysconfig XML. Includes WebUI for KernelSU manager. Tested hardware: Pixel 10 Pro Fold (rango), Tensor G5, BCM4390.
119 lines
3.8 KiB
Bash
119 lines
3.8 KiB
Bash
#!/system/bin/sh
|
|
# Miracast Enabler - Installation Script
|
|
|
|
SKIPUNZIP=0
|
|
|
|
ui_print "================================================"
|
|
ui_print " Miracast Enabler v1.0.0"
|
|
ui_print "================================================"
|
|
ui_print ""
|
|
|
|
# Detect device
|
|
DEVICE=$(getprop ro.product.device)
|
|
MODEL=$(getprop ro.product.model)
|
|
SOC=$(getprop ro.soc.model)
|
|
ANDROID=$(getprop ro.build.version.release)
|
|
API=$(getprop ro.build.version.sdk)
|
|
|
|
ui_print "- Device: $MODEL ($DEVICE)"
|
|
ui_print "- SoC: $SOC"
|
|
ui_print "- Android: $ANDROID (API $API)"
|
|
ui_print ""
|
|
|
|
# Pixel detection
|
|
case "$DEVICE" in
|
|
rango|comet|cometl|caiman|komodo|tokay|blazer|husky|shiba|felix|tangorpro|lynx|panther|cheetah|oriole|raven|bluejay)
|
|
ui_print "- Pixel device detected"
|
|
;;
|
|
*)
|
|
ui_print "! Non-Pixel device — module may still work"
|
|
;;
|
|
esac
|
|
|
|
# Foldable messaging
|
|
case "$DEVICE" in
|
|
rango|comet|cometl|felix)
|
|
ui_print "- Foldable detected: inner display is default Miracast source"
|
|
ui_print "- Change display source via WebUI in KernelSU manager"
|
|
;;
|
|
esac
|
|
ui_print ""
|
|
|
|
# --- Build RRO APK on-device as fallback for pre-Android 12 ---
|
|
# Android 12+ uses fabricated overlays (no APK needed)
|
|
# Pre-Android 12 needs a real RRO APK, built right here on the phone
|
|
if [ "$API" -lt 31 ]; then
|
|
ui_print "- Android < 12: building RRO overlay APK on-device..."
|
|
|
|
AAPT2=$(which aapt2 2>/dev/null)
|
|
if [ -z "$AAPT2" ]; then
|
|
# aapt2 is typically in the build-tools or framework
|
|
for candidate in \
|
|
/system/bin/aapt2 \
|
|
/system/xbin/aapt2 \
|
|
/data/adb/aapt2; do
|
|
if [ -x "$candidate" ]; then
|
|
AAPT2="$candidate"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
if [ -n "$AAPT2" ] && [ -x "$AAPT2" ]; then
|
|
ui_print "- Found aapt2: $AAPT2"
|
|
OVERLAY_BUILD="$MODPATH/overlay_build"
|
|
mkdir -p "$OVERLAY_BUILD"
|
|
|
|
# Compile resources
|
|
"$AAPT2" compile \
|
|
--dir "$MODPATH/overlay/res" \
|
|
-o "$OVERLAY_BUILD/compiled.zip" 2>/dev/null
|
|
|
|
if [ $? -eq 0 ]; then
|
|
# Link into APK
|
|
"$AAPT2" link \
|
|
--manifest "$MODPATH/overlay/AndroidManifest.xml" \
|
|
-I /system/framework/framework-res.apk \
|
|
-o "$OVERLAY_BUILD/overlay.apk" \
|
|
"$OVERLAY_BUILD/compiled.zip" 2>/dev/null
|
|
|
|
if [ $? -eq 0 ]; then
|
|
mkdir -p "$MODPATH/system/vendor/overlay"
|
|
cp "$OVERLAY_BUILD/overlay.apk" "$MODPATH/system/vendor/overlay/MiracastEnablerOverlay.apk"
|
|
chmod 644 "$MODPATH/system/vendor/overlay/MiracastEnablerOverlay.apk"
|
|
ui_print "- RRO overlay APK built and installed"
|
|
else
|
|
ui_print "! aapt2 link failed — overlay APK not built"
|
|
fi
|
|
else
|
|
ui_print "! aapt2 compile failed — overlay APK not built"
|
|
fi
|
|
rm -rf "$OVERLAY_BUILD"
|
|
else
|
|
ui_print "! aapt2 not found on device"
|
|
ui_print "! Pre-Android 12 will rely on system properties only"
|
|
fi
|
|
else
|
|
ui_print "- Android 12+: will use fabricated overlays (no APK needed)"
|
|
fi
|
|
|
|
ui_print ""
|
|
ui_print "- Setting permissions..."
|
|
|
|
set_perm_recursive $MODPATH 0 0 0755 0644
|
|
set_perm $MODPATH/post-fs-data.sh 0 0 0755
|
|
set_perm $MODPATH/service.sh 0 0 0755
|
|
set_perm_recursive $MODPATH/system/etc 0 0 0755 0644
|
|
|
|
if [ -f "$MODPATH/system/vendor/overlay/MiracastEnablerOverlay.apk" ]; then
|
|
set_perm "$MODPATH/system/vendor/overlay/MiracastEnablerOverlay.apk" 0 0 0644
|
|
fi
|
|
|
|
ui_print ""
|
|
ui_print "- Installation complete!"
|
|
ui_print "- Reboot to activate Miracast"
|
|
ui_print "- After reboot: Settings > Connected devices >"
|
|
ui_print " Connection preferences > Cast"
|
|
ui_print "- WebUI available in KernelSU manager"
|
|
ui_print ""
|