Carmageddon on OUYA

[1-sentence summary]
Does Carmageddon apk need Google Play to start?

[What should be happening]
Game main screen should appear.

[What is happening]
On start black screen and apk closes to OUYA main menu.

[What I’ve tried already]

Carmageddon 1.8.507 Apk

Requirements
Android 2.3
did adb logcat, errors, warnings only:

PS C:\Users\Admin> adb logcat *:W
--------- beginning of /dev/log/system
--------- beginning of /dev/log/main
E/su      ( 4138): Unknown id: btc_params
E/su      ( 4138):
E/f       (  937): Got failure response with message: {
E/f       (  937):   "error": {
E/f       (  937):     "message": "Unknown application",
E/f       (  937):     "code": 2005
E/f       (  937):   }
E/f       (  937): }
E/su      ( 4149): Unknown id: btc_params
E/su      ( 4149):
W/dalvikvm( 4150): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/stainlessgames/carmageddon/ParsonsLoader;
W/dalvikvm( 4150): Class init failed in newInstance call (Lcom/stainlessgames/carmageddon/ParsonsLoader;)
W/dalvikvm( 4150): threadid=1: thread exiting with uncaught exception (group=0x4118e300)
E/AndroidRuntime( 4150): FATAL EXCEPTION: main
E/AndroidRuntime( 4150): java.lang.ExceptionInInitializerError
E/AndroidRuntime( 4150):        at java.lang.Class.newInstanceImpl(Native Method)
E/AndroidRuntime( 4150):        at java.lang.Class.newInstance(Class.java:1319)
E/AndroidRuntime( 4150):        at android.app.Instrumentation.newActivity(Instrumentation.java:1053)
E/AndroidRuntime( 4150):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1974)
E/AndroidRuntime( 4150):        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
E/AndroidRuntime( 4150):        at android.app.ActivityThread.access$600(ActivityThread.java:130)
E/AndroidRuntime( 4150):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
E/AndroidRuntime( 4150):        at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 4150):        at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 4150):        at android.app.ActivityThread.main(ActivityThread.java:4745)
E/AndroidRuntime( 4150):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 4150):        at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 4150):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
E/AndroidRuntime( 4150):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
E/AndroidRuntime( 4150):        at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
E/AndroidRuntime( 4150):        at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 4150): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1891]:   114 could not load needed library 'libfmodexL.so' for 'libParsons.so' (load_library[1093]: Library 'libfmodexL.so' not found)
E/AndroidRuntime( 4150):        at java.lang.Runtime.loadLibrary(Runtime.java:370)
E/AndroidRuntime( 4150):        at java.lang.System.loadLibrary(System.java:535)
E/AndroidRuntime( 4150):        at com.stainlessgames.carmageddon.ParsonsLoader.<clinit>(ParsonsLoader.java)
E/AndroidRuntime( 4150):        ... 16 more
W/ActivityManager(  445):   Force finishing activity com.stainlessgames.carmageddon/.ParsonsLoader
W/ActivityManager(  445):   Force finishing activity tv.ouya.console/.launcher.store.DetailsActivity
E/su      ( 4173): Unknown id: btc_params
E/su      ( 4173):
W/ThrottleService(  445): unable to find stats for iface wlan0
E/BandwidthController(  111): Updating quota globalAlert failed (No such file or directory)
W/NetworkStats(  445): problem registering for global alert: java.lang.IllegalStateException: command '36 bandwidth setglobalalert 2097152' failed with '400 36 Bandwidth command failed'
E/BandwidthController(  111): Updating quota globalAlert failed (No such file or directory)
W/NetworkStats(  445): problem registering for global alert: java.lang.IllegalStateException: command '37 bandwidth setglobalalert 2097152' failed with '400 37 Bandwidth command failed'

It seems native (non-java code) is missing. Most often this is a .so library file.

Maybe this needs to put into the game’s OBB directory.

1 Like

Thanks for answering. Good that you know programming and can understand error reasons. I sum up my findings, first I went line by line and searched answers from Google search for various error keywords.
In short Carmageddon apk wants to connect Google Play services to verify license.
At the end of August 2021, any phones running Android 4.1-4.3 Jelly Bean will no longer receive Play Services updates. After year 2021 Google Play Services stopped responding to Android 4.1-4.3 Jelly Bean.

Solution would be to make offline apk which does not require Google Play Services or forward Carmageddon apk Google Play Service calls to new Google Play.
I am looking into microG project microG Project

I used Android Studio emulator with armv7, no Google services to install Carmageddon.apk and ran game. First it wanted to download OBB file, failed because no Google Services and I manually added OBB file to correct location, made sure data was unpacked to correct dafa path in emulator Android and then ran again. Carmageddon stayed at black screen and did not want to download OBB file, just was on black screen. Next request would be lisence verification but because no connection to Google Play Services Carmageddon app does not continue, on OUYA console at this point Carmageddon app exits out to OUYA main screen.

I made sure by using adb and ls commands Carmageddon unpacks data into:

shell@android:/data/data # cd com.stainlessgames.carmageddon
shell@android:/data/data/com.stainlessgames.carmageddon # ls
cache
lib
shell@android:/data/data/com.stainlessgames.carmageddon # cd lib
shell@android:/data/data/com.stainlessgames.carmageddon/lib # ls
libParsons.so
libfmodevent.so
libfmodeventL.so
libfmodex.so
libfmodexL.so
shell@android:/data/data/com.stainlessgames.carmageddon/lib # cd ..
shell@android:/data/data/com.stainlessgames.carmageddon # cd cache
shell@android:/data/data/com.stainlessgames.carmageddon/cache # ls
com.android.renderscript.cache
shell@android:/data/data/com.stainlessgames.carmageddon/cache #

Emulator OBB file path:
/sdcard/Android/obb/com.stainlessgames.carmageddon
adb push main.507.com.stainlessgames.carmageddon.obb /sdcard/Android/obb/com.stainlessgames.carmageddon/

So the UnsatisfiedLinkError is gone now?
What’s the new exception/error where startup fails?

Hello, did not wanted to post without progress.
Everything took time to setup. Difficult is to get running arm binaries on Windows 11 64bit pro.
Android Studio 2024 has updated Virtual Devices. Out of box you get ARM support with Google APIs and Play Store or nothing at all.

Actually on my old laptop I did not get any errors at all. It just sits on license verification on black screen, logcat does not produce error messages. It just waits on Google Play license verification response, because no Google is installed on Ouya that talks to Google servers Carmageddon sends license verification request and waits on black screen.
I found this Google article which sums up behaviour:

Article start:

Find and troubleshoot your license key

Google Play offers a licensing service that lets you enforce licensing policies for the apps that you publish on Google Play. With the licensing service, your apps can query Google Play at runtime to obtain their licensing status for the current user, then allow or disallow further use as appropriate.

Go to the App Licensing section of our Android Developers site to learn more about the licensing service and how to add it to your app.
Article end
Link:

I used for testing Android 11 API 35 x86 Google APIs and Google Play with ARM Ltd arm binaries builtin support.

Installed Carnageddon arm binaries apk and updated with google play. It downloaded OBB and did license check. After that ran game as expected. I even drove in 3D world in Android Studio Virtual Device software emulator.
I have 2.5GHz Quad-Core x86 64bit pc.

After that I disabled Google APIs and Google Play and turned off Wifi, mobile data, turned on Airplane mode. Game worked every time.

It really seems it needs once license check from google servers and after that it is offline playable.

Because arm binaries emulation in Android Studio 2024 with QEMU2 is troublesome (no walk in the park).
I have idea to use actual Android 7 phone. Sideload APK and OBB turn off Google APIs and Google Play and see how Carmageddon app starts.
Edit:
Did test, real Android phone, airplane mode, wifi off, Google Play forcestop. Sideload Carnageddon apk, deleted OBB. Fresh install.
First error was can not download OBB. Means Play Store was disabled for Carmageddon apk. Then I manually added OBB and started again. Carmageddon worked fine in airplane mode means no Internet.

On this Android phone MIUI I can not disable Google Services, but airplane mode should block access to Internet for Google Services too.

Maybe I should log out of Google Play so it would not know user and then try airplane mode install again.
EDIT:
Success, logout Google account before installing apk and Carmageddon apk crashes every time. To fix crash login to Google Account. You can install and play offline, airplane mode just requires your Google Account login on Android device :slight_smile:

Error reproduction, log out Google Account, install sideloaded apk, airplane mode on, offline no wifi, start game and it crashes apk before starting to download OBB file.


Carmageddon Google account signout
java.lang.NullPointerException: Attempt to invoke virtual method 'byte[] java.lang.String.getBytes()' on a null object 
reference at com.google.android.vending.licensing.LicenseValidator.verify(LicenseValidator.java:99) at 
com.google.android.vending.licensing.LicenseChecker$ResultListener$2.run(LicenseChecker.java:228) at 
android.os.Handler.handleCallback(Handler.java:794) at android.os.Handler.dispatchMessage(Handler.java:99) at 
android.os.Looper.loop(Looper.java:176) at 
android.os.HandlerThread.run(HandlerThread.java:65)

EDIT2 17.02.2025
I used LuckyPatcher to remove Google Account check and ran game fine in logged out Google Account and airplane mode on Android 8 phone. I transfered modified Carmageddon apk to Ouya (uninstalled old apk first) and made sure OBB file is in correct folderpath and data/data is in correct folderpath. Only left ‘can’t find *.lib file error’ why there is xposed traces in error log?
I copied data/data to internal memory Android/data and Android/data/data
Carmageddon can not find still *.lib files. Is it file permissions issue? If I connect Ouya via USB mini-usb cable then some files on internal memory of Ouya are hidden from Windows 11 Pro 64bit but I can use adb command LS to see them. I post logcat with modified Carmageddon apk (LuckyPatcher)

PS H:\downloads> adb logcat -c
PS H:\downloads> adb logcat *:W
--------- beginning of /dev/log/main
--------- beginning of /dev/log/system
E/su      ( 1325): Unknown id: btc_params
E/su      ( 1325):
E/su      ( 1346): Unknown id: btc_params
E/su      ( 1346):
E/f       (  578): Got failure response with message: {
E/f       (  578):   "error": {
E/f       (  578):     "message": "Unknown application",
E/f       (  578):     "code": 2005
E/f       (  578):   }
E/f       (  578): }
E/su      ( 1357): Unknown id: btc_params
E/su      ( 1357):
W/dalvikvm( 1358): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/stainlessgames/carmageddon/ParsonsLoader;
W/dalvikvm( 1358): Class init failed in newInstance call (Lcom/stainlessgames/carmageddon/ParsonsLoader;)
W/dalvikvm( 1358): threadid=1: thread exiting with uncaught exception (group=0x40fc4300)
E/AndroidRuntime( 1358): FATAL EXCEPTION: main
E/AndroidRuntime( 1358): java.lang.ExceptionInInitializerError
E/AndroidRuntime( 1358):        at java.lang.Class.newInstanceImpl(Native Method)
E/AndroidRuntime( 1358):        at java.lang.Class.newInstance(Class.java:1319)
E/AndroidRuntime( 1358):        at android.app.Instrumentation.newActivity(Instrumentation.java:1053)
E/AndroidRuntime( 1358):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1974)
E/AndroidRuntime( 1358):        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
E/AndroidRuntime( 1358):        at android.app.ActivityThread.access$600(ActivityThread.java:130)
E/AndroidRuntime( 1358):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
E/AndroidRuntime( 1358):        at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 1358):        at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 1358):        at android.app.ActivityThread.main(ActivityThread.java:4745)
E/AndroidRuntime( 1358):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1358):        at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 1358):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
E/AndroidRuntime( 1358):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
E/AndroidRuntime( 1358):        at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
E/AndroidRuntime( 1358):        at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 1358): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1891]:   113 could not load needed library 'libfmodexL.so' for 'libParsons.so' (load_library[1093]: Library 'libfmodexL.so' not found)
E/AndroidRuntime( 1358):        at java.lang.Runtime.loadLibrary(Runtime.java:370)
E/AndroidRuntime( 1358):        at java.lang.System.loadLibrary(System.java:535)
E/AndroidRuntime( 1358):        at com.stainlessgames.carmageddon.ParsonsLoader.<clinit>(ParsonsLoader.java)
E/AndroidRuntime( 1358):        ... 16 more
W/ActivityManager(  350):   Force finishing activity com.stainlessgames.carmageddon/.ParsonsLoader
W/ActivityManager(  350):   Force finishing activity tv.ouya.console/.launcher.store.DetailsActivity
E/su      ( 1379): Unknown id: btc_params
E/su      ( 1379):
W/ThrottleService(  350): unable to find stats for iface wlan0
E/BandwidthController(  110): Updating quota globalAlert failed (No such file or directory)
W/NetworkStats(  350): problem registering for global alert: java.lang.IllegalStateException: command '19 bandwidth setglobalalert 2097152' failed with '400 19 Bandwidth command failed'

EDIT3
I am looking into permissions with LS -L adb command, this is working, see different permissions:

root@android:/data/data/com.rockstar.gta3 # ls
ls
cache
lib
shared_prefs
root@android:/data/data/com.rockstar.gta3 # ls -l
ls -l
drwxrwx--x u0_a33   u0_a33            2025-02-06 20:22 cache
drwxr-xr-x system   system            2025-02-06 20:22 lib
drwxrwx--x u0_a33   u0_a33            2025-02-06 20:22 shared_prefs
root@android:/data/data/com.rockstar.gta3 #

I moved Carmageddon to external USB that is what means arrow ->:

root@android:/data/data/com.stainlessgames.carmageddon # ls
ls
cache
lib
root@android:/data/data/com.stainlessgames.carmageddon # ls -l
ls -l
drwxrwx--x u0_a42   u0_a42            2025-02-16 20:46 cache
lrwxrwxrwx system   system            2025-02-16 21:53 lib -> /mnt/asec/com.stainlessgames.carmageddon-1/lib
root@android:/data/data/com.stainlessgames.carmageddon #

I looked lib files from GTA3:

root@android:/data/data/com.rockstar.gta3/lib # ls -l
ls -l
-rwxr-xr-x system   system    1307640 1969-12-31 23:59 libImmEmulatorJ.so
-rwxr-xr-x system   system    3090847 1969-12-31 23:59 libR1.so
root@android:/data/data/com.rockstar.gta3/lib #

and files from Carmageddon:

root@android:/data/data/com.stainlessgames.carmageddon/lib # ls -l
ls -l
-rwxr-xr-x system   system    6803688 1969-12-31 23:59 libParsons.so
-rwxr-xr-x system   system     382104 1969-12-31 23:59 libfmodevent.so
-rwxr-xr-x system   system     406688 1969-12-31 23:59 libfmodeventL.so
-rwxr-xr-x system   system    1029648 1969-12-31 23:59 libfmodex.so
-rwxr-xr-x system   system    1079320 1969-12-31 23:59 libfmodexL.so

I think Carmageddon APK itself needs permission to read from data/data folder. That is why Carmageddon apk can not “see” *.lib files.
EDIT4 17.02.2025
I post apk permissions to compare real Android 8 device, Ouya Carmageddon, GTA3, Raiden Legacy:

===== Ouya real arm device ========
PS C:\Users\Admin> adb shell dumpsys package com.stainlessgames.carmageddon
Activity Resolver Table:
  Non-Data Actions:
      android.intent.action.MAIN:
        42d6f498 com.stainlessgames.carmageddon/.ParsonsLoader filter 42d6f7b8

Receiver Resolver Table:
  Non-Data Actions:
      com.android.vending.billing.RESPONSE_CODE:
        42d70398 com.stainlessgames.carmageddon/.inappbilling.googleplay.BillingReceiver filter 42d70500
      com.amazon.inapp.purchasing.NOTIFY:
        42d70798 com.stainlessgames.carmageddon/com.amazon.inapp.purchasing.ResponseReceiver filter 42d708d0
      com.android.vending.billing.PURCHASE_STATE_CHANGED:
        42d70398 com.stainlessgames.carmageddon/.inappbilling.googleplay.BillingReceiver filter 42d70500
      com.android.vending.billing.IN_APP_NOTIFY:
        42d70398 com.stainlessgames.carmageddon/.inappbilling.googleplay.BillingReceiver filter 42d70500

Packages:
  Package [com.stainlessgames.carmageddon] (42d0fe38):
    userId=10042 gids=[3003, 1015, 1023, 1028]
    sharedUser=null
    pkg=Package{42db8a20 com.stainlessgames.carmageddon}
    codePath=/data/app/com.stainlessgames.carmageddon-1.apk
    resourcePath=/data/app/com.stainlessgames.carmageddon-1.apk
    nativeLibraryPath=/data/data/com.stainlessgames.carmageddon/lib
    versionCode=507
    applicationInfo=ApplicationInfo{42db8ab8 com.stainlessgames.carmageddon}
    flags=[ HAS_CODE ALLOW_CLEAR_USER_DATA ALLOW_BACKUP ]
    versionName=1.8.507
    dataDir=/data/data/com.stainlessgames.carmageddon
    targetSdk=22
    supportsScreens=[medium, large, xlarge, resizeable, anyDensity]
    timeStamp=2025-02-16 23:03:54
    firstInstallTime=2025-02-16 20:44:52
    lastUpdateTime=2025-02-16 20:44:52
    signatures=PackageSignatures{42cf99c8 [42d2e900]}
    permissionsFixed=true haveGids=true
    pkgFlags=0x0 installStatus=1 User 0:  stopped=false enabled=0
    grantedPermissions:
      android.permission.READ_EXTERNAL_STORAGE
      android.permission.ACCESS_WIFI_STATE
      android.permission.INTERNET
      android.permission.WRITE_EXTERNAL_STORAGE
      android.permission.WAKE_LOCK
      android.permission.ACCESS_NETWORK_STATE
PS C:\Users\Admin>
===== Ouya real arm device ========
===== Ouya real arm device GTA3 and Raiden Legacy permissions ========
PS C:\Users\Admin> adb shell dumpsys package com.rockstar.gta3
Activity Resolver Table:
  Non-Data Actions:
      android.intent.action.MAIN:
        42d67c68 com.rockstar.gta3/.GTA3 filter 42d67e58
        42d67c68 com.rockstar.gta3/.GTA3 filter 42d68110

Receiver Resolver Table:
  Non-Data Actions:
      com.rockstargames.gta3.ServiceReceiver:
        42d68d40 com.rockstar.gta3/.service.ServiceReceiver filter 42d68f70
      com.android.vending.INSTALL_REFERRER:
        42d68ab0 com.rockstar.gta3/.MdotmReceiver filter 42d68bd0
        42d690e0 com.rockstar.gta3/com.AdX.tag.AdXAppTracker filter 42d691f0

Packages:
  Package [com.rockstar.gta3] (42d29a58):
    userId=10033 gids=[1015, 1023, 3003, 3002, 1028]
    sharedUser=null
    pkg=Package{42da1850 com.rockstar.gta3}
    codePath=/data/app/com.rockstar.gta3-1.apk
    resourcePath=/data/app/com.rockstar.gta3-1.apk
    nativeLibraryPath=/data/data/com.rockstar.gta3/lib
    versionCode=8
    applicationInfo=ApplicationInfo{42da18e8 com.rockstar.gta3}
    flags=[ HAS_CODE ALLOW_CLEAR_USER_DATA ALLOW_BACKUP ]
    versionName=1.6
    dataDir=/data/data/com.rockstar.gta3
    targetSdk=21
    supportsScreens=[small, medium, large, xlarge, resizeable, anyDensity]
    timeStamp=2025-02-06 20:22:19
    firstInstallTime=2025-02-06 20:22:20
    lastUpdateTime=2025-02-06 20:22:20
    signatures=PackageSignatures{42d1bcd8 [42d2e900]}
    permissionsFixed=true haveGids=true
    pkgFlags=0x0 installStatus=1 User 0:  stopped=false enabled=0
    grantedPermissions:
      android.permission.READ_EXTERNAL_STORAGE
      android.permission.BLUETOOTH
      android.permission.INTERNET
      android.permission.WRITE_EXTERNAL_STORAGE
      android.permission.VIBRATE
      android.permission.ACCESS_WIFI_STATE
      android.permission.ACCESS_NETWORK_STATE
      android.permission.WAKE_LOCK
PS C:\Users\Admin> adb shell dumpsys package com.dotemu.raidenlegacy
Activity Resolver Table:
  Non-Data Actions:
      android.intent.action.MAIN:
        430b18f0 com.dotemu.raidenlegacy/.RaidenLegacyLaunchActivity filter 430207a0

Receiver Resolver Table:
  Non-Data Actions:
      com.android.vending.INSTALL_REFERRER:
        430b20e8 com.dotemu.raidenlegacy/com.mobileapptracker.Tracker filter 4301f3f0

Packages:
  Package [com.dotemu.raidenlegacy] (42d17ed8):
    userId=10045 gids=[1015, 1023, 3001, 3002, 3003, 1028]
    sharedUser=null
    pkg=Package{430b0a28 com.dotemu.raidenlegacy}
    codePath=/data/app/com.dotemu.raidenlegacy-1.apk
    resourcePath=/data/app/com.dotemu.raidenlegacy-1.apk
    nativeLibraryPath=/data/data/com.dotemu.raidenlegacy/lib
    versionCode=50
    applicationInfo=ApplicationInfo{430b0ac0 com.dotemu.raidenlegacy}
    flags=[ HAS_CODE ALLOW_CLEAR_USER_DATA ALLOW_BACKUP ]
    versionName=1.9
    dataDir=/data/data/com.dotemu.raidenlegacy
    targetSdk=14
    supportsScreens=[small, medium, large, xlarge, resizeable, anyDensity]
    timeStamp=2023-11-18 04:26:55
    firstInstallTime=2023-11-18 04:26:57
    lastUpdateTime=2023-11-18 04:26:57
    installerPackageName=tv.ouya.packagemanager
    signatures=PackageSignatures{42d21f10 [42d187e8]}
    permissionsFixed=true haveGids=true
    pkgFlags=0x0 installStatus=1 User 0:  stopped=false enabled=0
    grantedPermissions:
      android.permission.READ_EXTERNAL_STORAGE
      android.permission.WRITE_EXTERNAL_STORAGE
      android.permission.BLUETOOTH
      android.permission.INTERNET
      android.permission.ACCESS_WIFI_STATE
      android.permission.GET_ACCOUNTS
      android.permission.BLUETOOTH_ADMIN
      android.permission.ACCESS_NETWORK_STATE
PS C:\Users\Admin>
===== Ouya real arm device GTA3 and Raiden Legacy permissions ========

EDIT5
Interesting reading:
How Android’s permissions mapping with UIDs/GIDs works? - Android Enthusiasts Stack Exchange

GIDS (group identifications) explanation:
newandroidbook.com/Book/Security.html

About linking .lib files, correct lib.so
Fixing the Error “java lang UnsatisfiedLinkError” Custom DLL Load in Java - Java Code Geeks
EDIT6
Seems solution is that Android 4.1 can not load multiple lib*.so files:
Allow loading multiple shared libraries through meta-data when using Native Activity (NDK) [36944038] - Issue Tracker
EDIT7:
Android Carmageddon apk first release:

Carmageddon will be popping up on Google Play, Friday 10th May 2013!

Ouya Release date June 25, 2013
Operating system Android (4.1 Jelly Bean) with custom Ouya launcher
My Ouya Android version on 2024 year is 4.1.2
adb shell getprop ro.build.version.release
EDIT8:
This seems like correct answer:

je...@gmail.comje...@gmail.com #6Sep 22, 2017 02:10PM

I had the same issue and managed to load all shared library via ‘System.load()’.
You should be careful to respect dependencies while loading.
If lib2.so has a dependence on lib1.so, you have to load lib1.so at first.
EDIT9:
and fix:
Load a different version of system shared library on Android by NDK? - Stack Overflow
EDIT10 18.02.2025
Doing editing record here, found out Android library loading from library is in error until Android 6.0 API 23 released officially September 29, 2015 there is made github project relinker to fix issue:

Can we now somehow fix Carmageddon apk or should I contact HandyGames who made apk for Google Play?

Explanation what are lib*.so files in Android

EDIT11 21.02.2025
Solved, working version on Ouya is:
Carma.Free.LuckyPatcher.ver.1.1.486.build.486.apk 27MB
OBB file:
main.486.com.stainlessgames.carmageddonfree.obb 62.2MB
OBB file needs to be Android/obb/com.stainlessgames.carmageddonfree
Used Lucky Patcher apk for Android 8 for offline mode, because Ouya does not have Google Play.
I think if vers 486 lib files to add to Ouya 586 version it works too, issue was offline Google Play mode license check and Android 4.1 can not load lib.so files inside lib.so files.
Full mouse support and somewhat controller support, detects controller presses.
Video works two days from 21.02.2025