Select to view content in your preferred language

Is the SDK ready for 64 bit support?

6664
19
01-31-2019 12:46 PM
NathanMellor
Regular Contributor

I got this message from Google Play about this:

Android Developers Blog: Get your apps ready for the 64-bit requirement 

I was unable to tell if the ArcGIS Android Runtime 100.4 is ready for 64 bit.

If it's not, apps with the ArcGIS Android Runtime will be kicked out of Google Playstore on August 1, 2019.

Given the length of development cycles in the SDK, I hope I have mentioned this in time.

I'm guessing these apps will depend on it also.

Android Apps by Esri on Google Play 

19 Replies
SimranArora
New Contributor

Hi Mark,

We are running into similar issues when trying to publish our app on Play Store. It involves the x86_64 library. Can we discuss privately?

0 Kudos
MarkBaird
Esri Regular Contributor

At the moment, we only support the following ABIs:

 - x86

 - armeabi-v7a

 - arm64-v8a

What device are you using which needs x86-64?

0 Kudos
NathanMellor
Regular Contributor

Google Play won't let you support x86 if you don't support x86-64.

So the real question is, are there any real devices with either one of those processors?

0 Kudos
MarkBaird
Esri Regular Contributor

If you are developing using an emulator (not something I'd recommend), then to get decent performance on the x86 architecture of the emulator (running on your Mac or PC with an Intel or similar processor), you will be wanting to use the x86 ABI.  This is why we include this ABI.

For deployment to the play store you should be targeting ARM (armeabi-v7a and arm64-v8a).  I am aware that very small numbers of low volume production and prototype x86-64bit physical android devices exist, but they are not at all common.  However if I've missed something new on the market, please let me know.  For now, as far as I'm aware ARM is the main processor in Android devices.

This document introduces the subject Reducing your APK size—ArcGIS Runtime SDK for Android | ArcGIS for Developers 

It talks about emulators (x86) and the techniques for choosing a target release build architecture.  Using ABI filters or APK splits are commonly considered options.

Most new devices are ARM 64bit today although Google have allowed us to run 32bit binaries until very recently.

0 Kudos
mh10
by
Occasional Contributor

I think Google pixelbooks are x86_64, we have a user who could use our app until we enabled 64bit support but now is getting UnsatisfiedLinkError.

We had to enable 64 bit build of our native library to get into the store, so our apk now has:

lib/x86/ourlib.so
lib/x86/libruntimecore.so
lib/x86/libruntimecore_java.so

lib/x86_64/ourlib.so

I think android won't load a 32bit lib if its already loaded a 64bit so it doesn't work anymore on his device. If you could add a x86_64 .so it would be awesome or even better if you know a way to get the 32bit lib to load?

0 Kudos
MarkBaird
Esri Regular Contributor

The Pixelbooks run on the Chrome OS which do claim to be able to run Android apps, but you've stumbled across a big difference in the architecture.  Android is almost all ARM, where as the Pixelbook is x86 (intel).  You will find this with lots of Android apps which use native libraries.

We don't officially support Chrome OS and we don't currently test the product on this OS.  Android is our focus.

Support by Chrome OS for Android apps is something we've considered in the past but the demand has been virtually non-existent.  I will certainly reevaluate the position for future releases.

Another potential way forward for supporting Chrome OS is to use our Java SE API.  Again this isn't supported officially, but Chrome OS is Linux in the background.  We support other Linux OS like Ubuntu for example.  I might try this out as an exercise myself; it stands a better chance of success with that we have available now.

Can you PM me as I'd like to understand your market and how big the demand for Chrome OS support is.  

0 Kudos
mh10
by
Occasional Contributor

The user says that the app was working ok before we added 64bit support so at least some parts of the sdk work, he is first chrome OS user that I have seen in a while though.

0 Kudos
MattKallaoun
New Contributor

Hi all,

As most of you know as of February 2020, google play store won't allow you to push updates to apps that contains 32 bit libraries. 

With the esri runtime libraries 100.4 - 100.7 there seems to still be an issue. 

Google will reject:
ndk.abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86' ,'x86_64'

Googel Accepts:
ndk.abiFilters ' 'arm64-v8a', 'x86_64'

Google accepting the ndk.abifilters removes the app from ALL 32 bit devices. Meaning that the app will not be available to almost 90% of the devices out there are unavailable. 

We are putting in a support ticket, but wanted to get this online to see if anyone else is having these issues on trying to update their app after feb 1st 2020. 

Thanks,

Matt

0 Kudos
MarkBaird
Esri Regular Contributor

Matt,

The restriction you are experiencing is that Google no longer accept 32bit only applications.  If you deploy 32bit for a given architecture then you must also include the 64bit libraries too.

The most common architecture of processor in Android devices is ARM.  Intel based phones were around for a short time, but they dropped out of the market.

In your case you certainly need to include 'arm64-v8a' which is the library for ARM 64bit.  I'd also suggest you include 'armabi-v7a' which is for 32bit ARM if you are likely to target these older devices.

I'd recommend reading this Reducing your APK size—ArcGIS Runtime SDK for Android | ArcGIS for Developers 

Does that help?

MattKallaoun
New Contributor

Thanks Mark, yes, the following worked!

For anyone else out there, place the following in the project gradle under defaultConfig. Anything else for us was rejected by the google play store. 

ndk.abiFilters 'armeabi-v7a', 'arm64-v8a'

0 Kudos