← All guides AI Release
RU Subscribe to @ai_release1

How to Run Metal Gear Solid 2 HD and Other NVIDIA SHIELD Ports on Android

Updated: 20.10.2026 · AI Release · @ai_release1
How to Run Metal Gear Solid 2 HD and Other NVIDIA SHIELD Ports on Android

TL;DR

Requirements and setup

Illustration: Requirements and setup
Illustration: Requirements and setup

Pre-flight checklist:

Step 1. Connect the device and confirm free space

What to do: enable Developer options, switch on USB debugging, authorise the PC, and check the free space on the internal storage.

On the device: Settings → Device Preferences → About → Build (tap it seven times to unlock Developer options), then Settings → Device Preferences → Developer options → USB debugging → On. Connect the cable and accept the "Allow USB debugging?" prompt on screen.

adb devices

Expected output — the device must be listed with the state device:

List of devices attached
192.168.1.50:5555	device

If you have no cable, connect over the network instead (the IP is shown under Settings → Device Preferences → About → Status):

adb connect 192.168.1.50:5555
adb devices

Now measure storage:

adb shell df -h /sdcard

Why: adb (Android Debug Bridge) is the standard command-line channel to the device. It installs packages and copies files with the same permissions the system uses, which is exactly what a manual file copy from a file manager often gets wrong. No root is needed — this is the supported path. If you have no PC at all, an on-device shell via Termux works as a fallback; see How to Run Linux on Android Without Root: Termux, PRoot, and AI Tools.

How to check: adb devices shows device and df -h /sdcard shows an Avail column larger than your .obb file size. Example: if Avail reads 12G, a 2 GB data file fits with room to spare.

Step 2. Install the APK and place the OBB data

Illustration: Step 2. Install the APK and place the OBB data
Illustration: Step 2. Install the APK and place the OBB data

What to do: install the package, then push the data file into the exact folder Android expects.

adb install -r -g game.apk

-r reinstalls over an existing copy, -g grants all runtime permissions at install time. Expected output:

Performing Streamed Install
Success

Then create the data folder and push the file:

adb shell mkdir -p /sdcard/Android/obb/<package-name>
adb push main.<version>.<package-name>.obb /sdcard/Android/obb/<package-name>/

Expected output ends with a transfer line such as 1 file pushed ... bytes in <N>s.

Where each file goes:

File typeDestinationCommand example
`.apk`Installed by `adb`, not copied manually`adb install -r -g game.apk`
Main data`/sdcard/Android/obb/<package-name>/main.<version>.<package-name>.obb``adb push main.obb /sdcard/Android/obb/<package-name>/`
Patch dataSame folder, `patch.<version>.<package-name>.obb``adb push patch.obb /sdcard/Android/obb/<package-name>/`

Why: large Android games ship as a thin APK plus an OBB — an "Opaque Binary Blob", i.e. a compressed asset archive the engine reads at runtime. The engine looks it up by package name and version code, so a file in the wrong folder or with a mismatched version name is simply invisible to the game, and it either re-downloads or crashes. Confirm the exact expected file name in the documentation for your port.

How to check: list the folder and confirm the size matches the source file:

adb shell ls -l /sdcard/Android/obb/<package-name>/

Expected output — a line with -rw-rw---- permissions and a byte count close to your local file:

-rw-rw---- 1 u0_a123 sdcard_rw 2147483648 2024-01-01 12:00 main.<version>.<package-name>.obb

Step 3. Launch the game and verify it starts cleanly

Illustration: Step 3. Launch the game and verify it starts cleanly
Illustration: Step 3. Launch the game and verify it starts cleanly

What to do: start the app by package name and watch the log for crashes.

adb logcat -c
adb shell monkey -p <package-name> -c android.intent.category.LAUNCHER 1

Expected output:

Events injected: 1

Then stream the log:

adb logcat | grep -iE "AndroidRuntime|<package-name>"

Why: monkey with the LAUNCHER category sends the same intent the home screen does, so it proves the package is registered and its main activity is resolvable. Logcat then tells you whether the process died on startup or is running — a black screen with a clean log usually means the data file is missing, not that the install failed.

How to check: the game reaches its title screen, and the log contains no FATAL EXCEPTION. Success looks like this: Events injected: 1, the splash screen appears within a few seconds, and adb shell pidof <package-name> returns a process ID.

adb shell pidof <package-name>

Example output: 12345 — a number means the process is live.

Troubleshooting

Problem. The install aborts immediately with an ABI error

adb shell getprop ro.product.cpu.abi
adb shell getprop ro.product.model

If the output does not match the build you downloaded, you have the wrong package for that device.

Problem. The push fails with a permission error

adb shell mkdir -p /sdcard/Android/obb/<package-name>
adb shell ls -ld /sdcard/Android/obb/<package-name>
adb push main.obb /sdcard/Android/obb/<package-name>/

Problem. Game launches but shows a black screen or asks to download data again

adb shell dumpsys package <package-name> | grep versionCode

Use that number as <version> in main.<version>.<package-name>.obb, re-push the file, and clear the app's stale state with adb shell pm clear <package-name>.

Summary and next steps

Installing a SHIELD port is three commands — adb install, adb push into /sdcard/Android/obb/<package-name>/, and a launch verified through adb logcat. Once the pattern works for one title, repeat it for the rest of the ports in the collection and keep a note of each package name and version code.

FAQ

Do I need root to install these ports?

No. Enabling USB debugging is enough; adb install and adb push run with normal shell permissions. Root is only relevant for modifying system partitions, which this procedure never touches.

Will the APK run on a regular Android phone instead of a SHIELD device?

Usually not without issues. The ports ship native libraries compiled for SHIELD hardware, so a different chipset typically fails at install with INSTALL_FAILED_NO_MATCHING_ABIS. Check the documentation for the list of supported devices.

Where exactly does the OBB file go?

Into /sdcard/Android/obb/<package-name>/, not into /sdcard/Android/data/. The file name must follow main.<version>.<package-name>.obb, where <version> is the installed version code reported by adb shell dumpsys package <package-name> | grep versionCode.

The game downloaded its data again on first launch — did I do something wrong?

Yes, most likely the OBB name or location was wrong, so the engine ignored your copy and fetched its own. Re-check the folder listing with adb shell ls -l /sdcard/Android/obb/<package-name>/ and compare the version code before relaunching.

🤖 AI summary