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/
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
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:
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:
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