CanInstallToExternalStorage and Google Play "not compatible"

canalrun

Well-Known Member
Licensed User
Longtime User
I noticed my latest app is listed as "not compatible" with the Google Nexus 7 on Google Play. This makes no sense since the Nexus 7 was the main device used during development.

I compared the manifest files between an earlier app and this latest app and found the difference:

android:installLocation="internalOnly" (earlier app) vs android:installLocation="preferExternal" (newest app).

This was the only significant difference between the two manifest files – the other difference being "android.permission.CAMERA". The Nexus 7 has a camera, although just a front camera. The Nexus 7 camera works in my app during testing.

On the new app I selected "#CanInstallToExternalStorage: True" in the project attributes. The earlier app is "False".

I am assuming that this is the reason Google Play says "not compatible" with the Nexus 7. The Nexus 7 does not have an SD card.

Looking at the Android Developer docs, in addition to "preferExternal" and "internalOnly", the install location can be specified as "auto".

I would have guessed that "auto" would be specified when I chose "#CanInstallToExternalStorage: True".

Might changing this parameter in the manifest file to "auto" solve my "not compatible" problem?
Is there a way to specify "auto" in the B4A "#CanInstallToExternalStorage: " ?

Thanks,
Barry.
 
Last edited:

canalrun

Well-Known Member
Licensed User
Longtime User
Add this line to the manifest attribute:
B4X:
SetManifestAttribute("android:installLocation", "auto")

True will be changed to "auto" instead of "preferExternal" in the future.

Thanks,
I made the change you suggested with the Manifest Editor. Unfortunately, this did not solve the compatibility problem with Google Play and the Nexus 7.

I wish Google would give some indication about why a device is "not compatible". I did some searching and found the following recommendation to add to the manifest:

<uses-feature android:name="android.hardware.camera" android:required="false"/>)

Once I added this with the Manifest Editor including the "required = false" my app became compatible with almost 500 additional devices.

My app takes advantage of the camera, but it is not required.

Barry.
 
Last edited:
Upvote 0

KMatle

Expert
Licensed User
Longtime User
"not compatible"

Hi guys,

I had an argument with some other guys on Google Groups about the "not compatible" message the other day.

Reason was my TAGI 950 Tablet (Dual Core, 16 GB). ALL App's can be installed (Maps, GMail, Drive, etc.)- except G+ - ("not compatible with your device").

I asked which parameters Google uses to detect a device as "not compatible" since even my son's the lousy phone (Android 2.3 runnig @500 Mhz with 100 KB memory) is recognized as "super cool - G+ will work perfectly on this device" :BangHead:

Guess what. I did not get an answer how Google decides about a device. Some say "it's the devices name".

I your case (Nexus 7) it can't be the name. Any other idea?
 
Upvote 0

canalrun

Well-Known Member
Licensed User
Longtime User
Hi guys,

I had an argument with some other guys on Google Groups about the "not compatible" message the other day.
.....
I your case (Nexus 7) it can't be the name. Any other idea?

My guess is that Google has a database with all devices and the capabilities and features required by the device. Google compares the features required list from the manifest of an APK against want a device claims to support. They don't tell developers what feature requirement is preventing a device from being compatible.

In my case it seems to be the requirement for a camera, but the Nexus 7 has a front camera (no rear camera) and my app does not "require" a camera – it uses one if available. Google's methodology clearly leaves a lot to be desired.

I spent quite a bit of time searching for this database. I could not find it and I could find no way to determine what missing feature was causing the device to be listed as "not compatible".

Does anyone know?

Thanks,
Barry.
 
Upvote 0

canalrun

Well-Known Member
Licensed User
Longtime User
Did you install a mod on your Nexus?

Nope. My Nexus is configured the same as if "out-of-the-box". Of course, I have installed software, but I have not removed anything that came pre-installed.

When Google Play says a device is "not compatible", it is talking about the device in general, not my specific device.

Something about the defined features and capabilities of the Nexus indicates that it would not work with my APK. My guess was that it had to do with the camera – in fact when I added the "required = false" to my manifest, Google Play listed the Nexus as now being compatible.

It was just a lucky guess on my part that the camera requirement was the culprit. I wish Google would show the reason why a device is not deemed compatible rather than just saying "not compatible".

Barry.
 
Upvote 0

KMatle

Expert
Licensed User
Longtime User
Hi Barry,

strange anyway because there is an external and internal "SD-Card".

APP's like WhatsApp or Facebook always install to the phone memory. This causes problems on phones with a small amount of free memory.

E.g. my girl's phone has only 150 MB phone memory and about 15 -15 MB free storage. Updates are almost impossible to get.

Then there is alwaysan internal SD-Card, so in your case it can't be the reason why your app is not compatible because not having an SD-Card.

An last but not least there is the "real external SD-Card" which you've put physically into your phone (Nexus 7 has none, but the internal one - but it IS one)

Am I wrong here?
 
Upvote 0

canalrun

Well-Known Member
Licensed User
Longtime User
Hi Barry,
strange anyway because there is an external and internal "SD-Card".....

Hello,
My first post mentioned not having an SD card. Through further experimentation I'm pretty confident that the problem was with the requirement for a camera rather than the availability of an external SD card.

What you say is true. The Nexus has no external SD card (that you plug in), but when I look at the directory structure with file managers such as ES File Manager or via FTP, I see a device directory "SDCard". My device has quite a bit of internal memory, I believe 16 GB.

It's also interesting: when I use the B4A directory locations such as "File.Dir DefaultExternal" on the Nexus and look at the string produced, I see strings starting with something like "emulated/0/" followed by the directory name I would expect. However if I look at the same directory in a file explorer, this "emulated/0" is not shown.

I haven't had time to investigate what is actually going on here, but as you say internal and external are available whether real or simulated.

Barry.
 
Upvote 0

KMatle

Expert
Licensed User
Longtime User
I want to get back to the main question: How does GPlay define a device as "not compatible"...

What I have discovered (so far):

GPlay checks the name of the device

Yes, but... Why are most of the APP's declared as compatible (Facebook, GMail, Temple Run2, Skype, etc.)? Only G+ is "not compatible". So the name can't be the key for GPlay. Seems to be that the APP developer defines it.

GPlay checks the hw-features of a device

No, because G+ is good for my son's crapy phone but not for my dual core tab.


Question to those who have a developer account for GPlay:

Which parameters can be set (compatibility) when you upload you apk to the store?
 
Upvote 0
Top