commit 82e0e246539c99dff2c7eb1becff390cdc64b1d5 Author: root Date: Wed Nov 11 18:03:44 2026 -0800 Initial RP3+ Android setup Co-Authored-By: Claude Sonnet 5.5 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..deaa11a --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.venv/ +*.apk diff --git a/README.md b/README.md new file mode 100644 index 0000000..25c4e3d --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ +### ⚠️ THIS PROJECT WAS ENTIRELY VIBECODED AND IS SLOP. DO NOT PROCEED IF YOU DO NOT ALIGN WITH THESE VALUES. DO NOT COMPLAIN ABOUT IT IN PULL RELEASES, ISSUES, ETC. UNLESS THERE ARE SEVERE SECURITY RISKS. THEY WILL BE REMOVED. PROCEED AT YOUR OWN RISK! ⚠️ + +# dotfiles-android + +Setup for a Retroid Pocket 3+ (Android 11) used for emulation. + +## Files + +- `obtainium-rp3.json`: Obtainium import list (Obtainium > Import/Export > Obtainium Import). +- `rp3-restore.sh`: reinstalls the 32 stock packages that were removed. Run with `adb` connected. + +## Obtainium apps + +| App | Source | +|---|---| +| Cocoon | github.com/KansoMirai/CocoonFE | +| Keyguard | github.com/AChep/keyguard-app | +| PKForge | github.com/sofianeelhor/PKForge | +| PokeDaisy | github.com/lidor30/pokedaisy | +| Pokémon Fulldex | github.com/mamesj/pokemon-fulldex | +| Material Files | github.com/zhanghai/MaterialFiles | +| PokeMMO | dl.pokemmo.com/PokeMMO-Client.apk | + +PokeMMO is not on GitHub, so it uses a direct APK link. The file is about 180 MB. + +## ADB notes + +Wireless debugging reboots this device. Run `adb tcpip 5555` once over USB, then `adb connect :5555`. It resets on reboot. + +Debloat is `pm uninstall --user 0 `. Undo with `cmd package install-existing `. + +The shell user cannot write to shared storage on this firmware, so `adb push` to `/sdcard` fails. diff --git a/obtainium-rp3.json b/obtainium-rp3.json new file mode 100644 index 0000000..f0cbe78 --- /dev/null +++ b/obtainium-rp3.json @@ -0,0 +1,151 @@ +{ + "apps": [ + { + "id": "rip.moth.cocoonshell", + "url": "https://github.com/KansoMirai/CocoonFE", + "author": "KansoMirai", + "name": "Cocoon", + "installedVersion": null, + "latestVersion": "", + "apkUrls": "[]", + "otherAssetUrls": "[]", + "preferredApkIndex": 0, + "additionalSettings": "{\"includePrereleases\": false, \"fallbackToOlderReleases\": true, \"apkFilterRegEx\": \"\", \"invertAPKFilter\": false, \"autoApkFilterByArch\": true, \"versionDetection\": true, \"appName\": \"Cocoon\"}", + "lastUpdateCheck": null, + "pinned": false, + "categories": [ + "RP3+" + ], + "releaseDate": null, + "changeLog": null, + "overrideSource": "GitHub", + "allowIdChange": false + }, + { + "id": "com.artemchep.keyguard", + "url": "https://github.com/AChep/keyguard-app", + "author": "AChep", + "name": "Keyguard", + "installedVersion": null, + "latestVersion": "", + "apkUrls": "[]", + "otherAssetUrls": "[]", + "preferredApkIndex": 0, + "additionalSettings": "{\"includePrereleases\": false, \"fallbackToOlderReleases\": true, \"apkFilterRegEx\": \"Keyguard-Mobile-.*\\\\.apk$\", \"invertAPKFilter\": false, \"autoApkFilterByArch\": true, \"versionDetection\": true, \"appName\": \"Keyguard\"}", + "lastUpdateCheck": null, + "pinned": false, + "categories": [ + "RP3+" + ], + "releaseDate": null, + "changeLog": null, + "overrideSource": "GitHub", + "allowIdChange": false + }, + { + "id": "org.pkforge.app", + "url": "https://github.com/sofianeelhor/PKForge", + "author": "sofianeelhor", + "name": "PKForge", + "installedVersion": null, + "latestVersion": "", + "apkUrls": "[]", + "otherAssetUrls": "[]", + "preferredApkIndex": 0, + "additionalSettings": "{\"includePrereleases\": false, \"fallbackToOlderReleases\": true, \"apkFilterRegEx\": \"\", \"invertAPKFilter\": false, \"autoApkFilterByArch\": true, \"versionDetection\": true, \"appName\": \"PKForge\"}", + "lastUpdateCheck": null, + "pinned": false, + "categories": [ + "RP3+" + ], + "releaseDate": null, + "changeLog": null, + "overrideSource": "GitHub", + "allowIdChange": false + }, + { + "id": "com.pokedaisy.app", + "url": "https://github.com/lidor30/pokedaisy", + "author": "lidor30", + "name": "PokeDaisy", + "installedVersion": null, + "latestVersion": "", + "apkUrls": "[]", + "otherAssetUrls": "[]", + "preferredApkIndex": 0, + "additionalSettings": "{\"includePrereleases\": false, \"fallbackToOlderReleases\": true, \"apkFilterRegEx\": \"\", \"invertAPKFilter\": false, \"autoApkFilterByArch\": true, \"versionDetection\": true, \"appName\": \"PokeDaisy\"}", + "lastUpdateCheck": null, + "pinned": false, + "categories": [ + "RP3+" + ], + "releaseDate": null, + "changeLog": null, + "overrideSource": "GitHub", + "allowIdChange": false + }, + { + "id": "io.github.mamesj.pokemonds", + "url": "https://github.com/mamesj/pokemon-fulldex", + "author": "mamesj", + "name": "Pokémon Fulldex", + "installedVersion": null, + "latestVersion": "", + "apkUrls": "[]", + "otherAssetUrls": "[]", + "preferredApkIndex": 0, + "additionalSettings": "{\"includePrereleases\": false, \"fallbackToOlderReleases\": true, \"apkFilterRegEx\": \"android\\\\.apk$\", \"invertAPKFilter\": false, \"autoApkFilterByArch\": true, \"versionDetection\": true, \"appName\": \"Pok\\u00e9mon Fulldex\"}", + "lastUpdateCheck": null, + "pinned": false, + "categories": [ + "RP3+" + ], + "releaseDate": null, + "changeLog": null, + "overrideSource": "GitHub", + "allowIdChange": false + }, + { + "id": "me.zhanghai.android.files", + "url": "https://github.com/zhanghai/MaterialFiles", + "author": "zhanghai", + "name": "Material Files", + "installedVersion": null, + "latestVersion": "", + "apkUrls": "[]", + "otherAssetUrls": "[]", + "preferredApkIndex": 0, + "additionalSettings": "{\"includePrereleases\": false, \"fallbackToOlderReleases\": true, \"invertAPKFilter\": false, \"autoApkFilterByArch\": true, \"versionDetection\": true, \"appName\": \"Material Files\", \"apkFilterRegEx\": \"app-release-universal\\\\.apk$\"}", + "lastUpdateCheck": null, + "pinned": false, + "categories": [ + "RP3+" + ], + "releaseDate": null, + "changeLog": null, + "overrideSource": "GitHub", + "allowIdChange": false + }, + { + "id": "eu.pokemmo.client", + "url": "https://dl.pokemmo.com/PokeMMO-Client.apk", + "author": "PokeMMO", + "name": "PokeMMO", + "installedVersion": null, + "latestVersion": "", + "apkUrls": "[]", + "otherAssetUrls": "[]", + "preferredApkIndex": 0, + "additionalSettings": "{\"includePrereleases\": false, \"fallbackToOlderReleases\": true, \"invertAPKFilter\": false, \"autoApkFilterByArch\": true, \"versionDetection\": true, \"appName\": \"PokeMMO\"}", + "lastUpdateCheck": null, + "pinned": false, + "categories": [ + "RP3+" + ], + "releaseDate": null, + "changeLog": null, + "overrideSource": "DirectAPKLink", + "allowIdChange": false + } + ] +} \ No newline at end of file diff --git a/rp3-restore.sh b/rp3-restore.sh new file mode 100755 index 0000000..d8ed3e1 --- /dev/null +++ b/rp3-restore.sh @@ -0,0 +1,4 @@ +#!/bin/sh +# Restore apps removed from the RP3+ (run with the device connected) +D=${1:-192.168.0.110:5555} +for p in com.android.chrome com.android.calendar com.android.overlay.calendar com.android.exchange com.android.fmradio com.android.overlay.fmradio com.android.music com.android.overlay.music com.android.soundrecorder com.android.overlay.soundrecorder com.android.gallery3d com.android.overlay.gallery3d com.android.bips com.android.printservice.recommendation com.android.bookmarkprovider com.android.providers.partnerbookmarks com.android.dreams.basic com.android.dreams.phototable com.android.dreams.overlay.basic com.android.smspush com.google.android.cellbroadcastreceiver com.google.android.projection.gearhead com.google.android.apps.restore com.google.android.partnersetup com.google.android.onetimeinitializer com.retroidpocket.factorytest com.spreadtrum.vowifi com.spreadtrum.vowifi.conf com.spreadtrum.proxy.nfwlocation com.android.wallpaper.livepicker com.android.overlay.livepicker com.android.dynsystem; do adb -s $D shell cmd package install-existing $p; done