A production-grade Android development setup optimised for testing apps on your Fedora workstation before deploying to your Samsung S24.
โ Two Emulators:
- Samsung S24 - Android 14, matches your actual phone
- Android Latest - Android 15, for testing cutting-edge features
- Samsung S24 (Android 16) - for matching your phone when itโs on Android 16
โ Full Development Toolchain:
- Android SDK with platform tools
- Build tools for multiple Android versions
- ADB (Android Debug Bridge)
- KVM hardware acceleration for fast emulation
โ Easy Maintenance:
- Simple update commands
- Version-controlled SDK packages
- Automated emulator creation
cd AndroidDevEnvironment
chmod +x setup.sh
./setup.shWhat it does:
- Installs Java JDK 17
- Installs KVM/QEMU for hardware acceleration
- Downloads Android SDK (~3GB)
- Creates two emulators
- Adds convenience commands
Time: 15-20 minutes
After setup: Log out and back in (for KVM permissions)
Option A: App Menu (Easiest)
- Press the Super/Windows key to open your app launcher.
- Type "Samsung" or "Android".
- Click Samsung S24 Emulator.
Option B: Terminal
android-s24The emulator window will open. Wait 2-3 minutes for first boot.
Open a terminal (or your IDE) to your app folder:
cd /path/to/your/app
npm run androidThe app installs and launches automatically on the running emulator.
After setup, these commands are available system-wide:
Start Samsung S24 emulator (Android 14)
Start Samsung S24 emulator (Android 16 / API 36)
Start Android 15 emulator with latest features
List all available Android Virtual Devices
Update Android SDK and all installed packages
Show current environment status, installed packages, running emulators
Start the Android Test Console (local SPA) with:
- Emulator/device screen rendered in the centre
- Click-to-tap and drag-to-swipe input
- Emulator controls and app install/launch actions
- Live logcat panel
- Saved app profiles (APK path, package name, deep link)
- Conditions panel (WiโFi/Data toggles, emulator network shaping, geo, battery, theme/locale/font)
- Click = Touch/Tap
- Click and Drag = Swipe
- Scroll Wheel = Scroll content
- Right Click = Context menu (on some apps)
- Works normally for text input
- Esc = Back button
- Home = Home button (if enabled)
- ๐ Rotate - Switch portrait/landscape
- ๐ Volume - Volume up/down
- โก Power - Power button/lock screen
- ๐ Home - Return to home screen
โ๏ธ Back - Navigate back- ๐ท Camera - Take screenshot
- โฎ More - Additional controls (location, battery, etc.)
Configured to match your actual Samsung S24:
- Android Version: 14 (API 34)
- Screen: 1080x2340, 425 DPI (6.2")
- RAM: 8GB
- Storage: 8GB
- Features: Camera, GPS, Sensors, Audio
For testing newest Android features:
- Android Version: 15 (API 35)
- Device Profile: Pixel 8 Pro
- Features: All latest Android 15 APIs
android-updateThis updates:
- Platform tools (adb, fastboot)
- Build tools
- System images
- Emulator itself
When Android 16 is released:
sdkmanager --install "platforms;android-36"
sdkmanager --install "system-images;android-36;google_apis_playstore;x86_64"
# Recreate latest emulator
avdmanager delete avd -n Android_Latest
echo "no" | avdmanager create avd \
-n Android_Latest \
-k "system-images;android-36;google_apis_playstore;x86_64" \
-d "pixel_9_pro"Or just re-run ./setup.sh (it updates automatically).
-
Start emulator:
android-s24 # Use S24 to match your phone -
Wait for boot (2-3 minutes first time)
-
Deploy app:
cd ~/Documents/BreathingApp npm run android
-
Test thoroughly:
- All UI interactions
- Audio playback
- Data persistence
- Performance
- Crashes/errors
-
Check logs:
adb logcat | grep -i "error\|crash"
-
Verify on real device only after emulator testing passes
The UI is a focused testing cockpit: the emulator canvas sits in the centre, with controls around it so you donโt bounce between windows.
android-uiIt will open a browser at http://127.0.0.1:4242.
- The canvas uses
adb exec-out screencap -p, so itโs not a perfect real-time stream, but itโs responsive enough for functional testing. - For lower latency, set Interval to ~150โ250ms (CPU permitting).
- App profiles are stored locally in your browser (localStorage). Use Export/Import to move them between machines.
Use the App project + Build & install panels (left column) to manage your React Native project without leaving the browser:
-
Configure once
- Project root: e.g.
/home/squigz/Documents/BreathingApp - Build command: something that produces an APK (recommended:
./gradlew assembleDebug) - APK directory: path to the generated APKs relative to the project (default:
android/app/build/outputs/apk/debug) - Package name: whichever app id you want auto-launched (e.g.
com.innerfire) - Toggle Auto launch if you want the console to start the app after every install.
- Project root: e.g.
-
Build
- Click Build only for a compile, or Build & install to compile and automatically push the freshest APK onto the selected emulator.
- The Build log panel (right column) streams Gradle/React Native output live, with a follow toggle and a clear button.
-
Install / re-install
- The console lists every APK in your output folder. Hit Install next to any entry or use Install latest APK for the newest build.
- After install, the console can auto-launch the configured package so youโre immediately back on the emulator canvas.
This flow turns the Android Test Console into a single โinteractive test benchโ: start/kill emulators, build BreathingApp, install it on Android 16, and drive it via the canvas, quick controls, logcat, and condition togglesโall without reaching for the CLI.
-
Install APK on emulator:
adb install path/to/app.apk
-
Launch manually from app drawer
-
Test all features
Already configured! KVM makes the emulator 10x faster.
Verify KVM is working:
kvm-ok # Should show "KVM acceleration can be used"Edit ~/.android/avd/Samsung_S24.avd/config.ini:
hw.ramSize=12288 # 12GB instead of 8GBAlready enabled with -gpu host flag in launch scripts.
Check KVM permissions:
groups | grep libvirt # Should show libvirtIf not, log out and back in.
Verify hardware acceleration:
emulator -accel-checkShould show "KVM is installed and usable".
Check if emulator is ready:
adb devices
# Should show: emulator-5554 deviceIf shows "offline" or "unauthorized", wait longer.
Try software rendering:
emulator -avd Samsung_S24 -gpu swiftshader_indirectCreate local.properties in your app:
echo "sdk.dir=$HOME/Android/Sdk" > android/local.properties- Android SDK: ~5GB
- Each emulator: ~8GB
- Total: ~20GB
# List all installed packages
sdkmanager --list_installed
# Uninstall old build tools
sdkmanager --uninstall "build-tools;33.0.0"
# Delete unused system images
sdkmanager --uninstall "system-images;android-33;google_apis;x86_64"avdmanager delete avd -n Android_LatestAndroidDevEnvironment/
โโโ setup.sh # Main setup script
โโโ uninstall.sh # Cleanup script
โโโ config/ # Configuration files
โ โโโ avd/
โ โโโ s24.ini # Hardware config for S24
โโโ ui/ # Android Test Console (local SPA + server)
โโโ scripts/ # Helper scripts
โโโ install-deps.sh # System dependencies
โโโ install-sdk.sh # SDK download and install
โโโ create-avds.sh # Emulator creation
โโโ setup-env.sh # Environment variables and aliases
โโโ create-desktop-entries.sh # GNOME/Linux desktop shortcuts
Point to existing SDK at ~/Android/Sdk
Install "React Native Tools" extension, it will detect SDK automatically.
File โ Project Structure โ SDK Location โ ~/Android/Sdk
If you want to remove everything:
./uninstall.sh