Deployment to Google Play x64 Requirement

Hey,

I’m using MonoGame v3.7.1 with an android project. I have built my project targeting x64 architectures. I’m trying to upload my game to google play for testing, but google play says my .apk does not meet the x64 requirements.

Following the guide on google play for android developers https://android-developers.googleblog.com/2019/01/get-your-apps-ready-for-64-bit.html I was able to find that there are 4 32-bit libraries in the .apk: libmonosgen-2.0.so, libmono-btls-shared.so, libopenal32.so, libmonodroid.so.

Is there an easy way to get the x64 version of these into the build process instead of the 32-bit version? Has anyone else run into this issue and resolved it?

Thanks for looking into this. The 64x requirement only applies if you are targetting Android 9.0 or later. The Xamarin developers make it sound like it is as simple as checking a few boxes:

I’ve updated a few of my MonoGame apps for 64x, and they seem to be working correctly. I haven’t updated anything on the Google Play Store yet, but I’ll keep updated on what I find.

The link you provided fixed it. Thanks!

I’ve tried the following.

In the project Properties/Android Options/Advanced/Supported Architectures/
I checked the Arm64-v8a and x86_64.

In the project Properties/Android Options/
I checked the 'Generate one package (.apk) per selected ABI.

Then I tried to sideload the generate apk that was specific to arm64 (com.mycompany.myapp-arm64-v8a-Aligned.apk), on a phone that is supposed to have an arm-v8a proccessor (a Samsung Galaxy A5(2016)).

I got an error that the apk is not supported by the phone.
The apk for arm-v7a worked fine.

Can someone tell me what am I doing wrong and/or replicate the test with
ABI specific .apks? (because it’s very possible that with a mixed .APK the arm-v8a is ignored and just fall back to arm-v7a on all phones)

I would also like to hear when any of you guys upload arm64 on the store and if it works.

I was bashing my face against this the other night but checking the boxes allowed me to get it up on the store and remove the warning regarding 64-bit support. I checked:

  • armeabi
  • armeabi-v7a
  • arm64-v8a

Additionally, all of my libraries build using Any CPU in Visual Studio. It does give me a bunch of other warnings on the play store (around optimization and something else I can’t remember), but I was able to publish anyway and my test devices were still able to run my game.

I don’t think the old ‘armeabi’ is supported by monogame and or xamarin.

Can you elaborqate a bit on that? Mnore specifically…

  • Did you test with a arm64 phone?
  • Did you upload a single mixed-apk or seperate apk per abi? Have you tried to side load the arm-v8a apk on a 64bit phone?

I’m not 100% sure here, but I think checking this resolved a warning prior to publishing that I was going to lose support for some devices. I will freely admit that it was a flurry of activity trying to figure this out because it was unclear what I had to do at the start. Haha when I first got the notice from Google, I was like, “But everything is already being built as Any CPU!?”. I didn’t realize there was other options.

My test phone is 64-bit. I think more phones than we realize are… it’s not straightforward to find out, apparently. I did some googling around and the first place I suggested said to look at the Kernel version, which I did, and it didn’t say 64-bit. However, other articles said to use an app called Antutu, which did confirm that my phone is 64-bit. Here’s a link to it.

https://play.google.com/store/apps/details?id=com.antutu.ABenchMark

That app says my phone is 64-bit, and my app ran fine on it. Additionally, I had some other friends test it with their 64-bit phones and everything worked. I’m not sure if there’s anything else at play here.

I uploaded the single apk file that contained each abi. I don’t know what side loading them means though. Can you elaborate? I’m happy to try a test if it will help you.

I did not run a test on my device afterwards. I had assumed that my phone (like most devices) was 64-bit. I just now ran a test and it does not work on my phone. I did a google search to find out how to determine if my phone was 64-bit. According to the search results, it is not. The app starts up for a second and then crashes. Perhaps you are having the same issue.

Yes, this is the same thing I tried at first as well, and I didn’t have x64 in my string. However, another google hit suggested downloading the Antutu app (linked above), which did say it was 64-bit.

If you look at https://github.com/MonoGame/MonoGame.Dependencies/tree/bf99ec34cc1f83787d19806df186fd331e55310d/openal-soft/libs
or inside the .apk /libs/ folder (apk is a zip file), you will see that it doesn’t contain native binaries for ‘armabi’. I don’t think that the game will work on those devices anyway. I am not really sure if that is correct 100%, we would need an official confirmation from MG maintainers on this one.
The reason I removed it in the first place was that I had reports that my game was failing on some devices when I had ‘armabi’ but worked ok without it, I dinno what that is.

I think it’s anything that doesn’t involve install via Play store.
In my case I copy the file in the SD card and then browse via a file manager app and then Tap on the .apk to install it.
In other cases I copy the .apk from my phone’s SD to the test phone via bluetooth.
You might need to enable something in settings and /or enable developer/debug mode on the phone.

So it’s possible that the phone I was testing it on had a 64bit arm but a 32bit OS? I’ll check the Kernel version next time I get this phone on my hands.

Ah ok. I used to test that way via Google Drive and copying the APK file over before I put things up on the Play store. I do this for various tests as well, but for actual products I find I prefer the Play store early on since it lets you manage versions really well and deploy to your testers easily (ie, helpful friends :P).

I find this very misleading. I had that same thought as well the other night after I wrote that. Perhaps I had a 32-bit OS installed on a 64-bit processor and that’s why my kernel version didn’t contain x64? I poked around Antutu again and found another info page that also stated that my OS was 64-bit.

I’m not gonna lie to you… I find this very confusing. I do know that my simulator devices are currently all 64-bit. I just poked around Android Studio’s AVD Manager again and found I can now download an x86_64 image that’s the current version, but I haven’t tried it.

Ok I have some results…

Been testing my MonoGame apps on Pixel3, which is a SnapDragon 845 (64x architecture). My apps all run fine.

I checked the 64x boxes and deployed an app to Google Play Store… and it worked, the warnings all went away. Way too easy.

Here’s the app if you want to test it out:

1 Like

I just tested the 64bit version on a Galaxy A8 (2018) and it’s working allright. Just note that I didn’t see the x64 string in the kernel version.