Here is the stuff that matters from my Android App Manifest file. I am looking at supporting Android API Level 4 and above with target = 14 supporting all screens.
Developer console shows
API level: 4-16+
Supported screens: small-xlarge
OpenGL textures: all
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" />
<uses-permission android:name="android.permission.WIFI_CHANGE_STATE"/>
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="14"/>
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true" />
Here is the Google Play App link
Here are the device details for the Device from which when I go to Google Play my App shows incompatible.
Motorola DROID Bionic
Android Vs 4.0.4
Verizon Wireless CDMA
System Version 6.7.230.XT875.Verizon.en.US (Leaked ICS Build for DROID Bionic)
Build Number 6.7.2-223
I have tried turning Copy Protection On/Off from Google Play but same result.
I am unable figure out what is causing this incompatibility with my app and device because Google Play Publishing shows this Device is supported by my release apk.
Is there any chance that me using a leaked ICS build for the Bionic has anything to do with it? It would be very helpful if anyone with 4.0.4 or (Android device running any version of ICS) can try to download the app from Google Play and see if the App is incompatible with their device too or its just me. Other than that suggestions on a way to fix this would be tremendously helpful.
Thanks so much.
Update: I am using two SDKs with my App - Flurry SDK and Skyhook Wireless SDK jar files both of which are compatible with Android 4.0. Also I have added Android Support Library and compiled the codebase against Android 4.0.3 and the App still is incompatible with the device and build mentioned above running Android v 4.0.4
Problem Solved!
First of all there is nothing wrong in the Manifest or the version of Android SDK I compiled the code base against which is Android 4.1.
I could search for and install the App when I turned Copy Protection OFF from Google Play developer console and waited 30 minutes to 1 hour for the new copy protection setting to take effect. The key here is that after changing the Copy Protection settings you have to wait. This does not take effect immediately.
Previously Copy Protection was ON for Tooyoou and after I wrote to Android developer support I got the clue in their reply email as below.
If your app no longer appears in Google Play after enabling Copy Protection, please note that our copy protection relies on being able to trust the build of Android that the app is installed on. Therefore, we only show copy-protected apps to known good builds of Android. If a specific port of Android is not a known good build (e.g. some “Custom ROMs”) or the device is rooted, Google Play will not display copy-protected apps to these devices. If the users switch to an official version of Android, they'll be able to see your application again.
Since I am running a custom unreleased ROM on my DROID BIONIC this is what caused the issue. Stock ASOP ICS and Jelly Bean devices were able to download and install the app even when Copy Protection was ON. Copy Protection is a bit tricky for Paid App but since Tooyoou is free there is not much to care about.
Also note Copy Protection is supposedly being deprecated soon and Licensing feature in the Android SDK is the way to go for Paid App copy protection.
have you tried adding android:xlargeScreens="true" to support-screens?
Related
When I head on Google Play from a virtualized device, several common apps are not available, since they are incompatible with the v-device.
I would like to understand which is the missing device feature. Therefore I downloaded the APK using the cloud service https://apps.evozi.com/ and a compatible device. Then I extracted and decrypted AndroidManifest.xml by means of the Apktool, using:
apktool d myapp.apk
Inside I looked for uses-feature:
grep '<uses-feature' AndroidManifest.xml
which gives:
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>
However, OpenGL ES seems supported since Genymotion v2.16.
Where else should I look?
There are several reasons why Apps are not available on Play Store from Genymotion:
Without ARM translation tools, only apps for x86/x86_64 will be available on the store, the others will be hidden
With ARM translation tools, only apps for armv7 will be available (arm64 is not supported by Genymotion)
Genymotion virtual devices are rooted, therefore apps which detect root will also be unavailable from the store
Genymotion uses a custom AOSP rom, apps which detect AOSP roms will be marked as not compatible with the device in the store
I've just published an update of my app on Play Store.
The news are essentially coming from Appcelerator that I update from SDK3.5.2 to SDK5.5.1.
My manifest.xml files contains this :
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23"/>
(3 sizes of screen : small, large, xlarge)
My previous version was compatible with every devices listed in the Developper Console (I had android:targetSdkVersion="16"), but now I missed quite half of the devices and I can't figure why.
It seems the Android 4.4 devices (and maybe previous versions) are no more compatible.
What should I look at to fix it ?
It's likely not the version but the features you are using. Easiest way to check is compile your app for either the android emulator or a device then check the build/android folder for the AndroidManifest.xml file. When you look inside you will see what android permissions and features are being asked for by your app.
For example, if you put code to 'place a phone call' in your app, appcelerator would require the android.hardware.telephony feature enabled. So, every tablet on the market would be excluded because they don't have telephony features. You can check out a list of features available in android here: https://developer.android.com/guide/topics/manifest/uses-feature-element.html
Compare the list in your manifest file and see what might be causing the elimination of devices. For example, I use a module for barcode reading that automatically enables autofocus and flash in my manifest. If I publish, again many tablets are excluded because they don't have flash, so I have to manually edit my AndroidManifest file and change the line from:
<uses-feature android:name="android.hardware.camera.autofocus"/>
<uses-feature android:name="android.hardware.camera.flash"/>
to
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<uses-feature android:name="android.hardware.camera.flash" android:required="false"/>
Once you have the fixed manifest file you can manually force Appcelerator to use your manifest by copying it into platform/android folder. Realize that you'll need to do this every time you compile for release to the play store.
Ray
i'm developing an android application using Xamarin.Android.
It's all fine when installing my signed apk on an Android Kitkat phone, but when I try to install it on older android versions, there come the problems...
If I try installing the application on Android 4.1.2, it says "Application not installed", but if I try to debug the app using that phone as target it works brilliantly, no problems at all, every feature is working as expected. I also tried on android 4.2.2 and got the same result, so I think it's not related to minumum API level too low (it's set to 14 right now).
Is there any way I can see why it won't install?
Can anyone help me understanding the problem?
Thanks!
Like Alex.F said, you may need to enable "allow unknown sources" in the settings menu. Other than that you may have added "uses-feature" attributes to your androidmanifest.xml that forbid the app to be installed on certain devices (in release mode).
For instance if you add
<uses-feature android:name="android.hardware.usb.host" />
You shouldn't be able to install/start the app on devices that do not support usb-host mode. To remedy this you can add a required="false" attribute like so:
<uses-feature android:name="android.hardware.usb.host" android:required="false" />
This will make the usb-host feature optional. Hope that helps, otherwise see if you can try to provide a bit more information!
Good luck!
I have designed my app for Android Tablet. But it should be installed only on Android Tablet. For this I have tried the following.
supports-screens
android.hardware.telephony
compatiblity-screens
android.permission.CALL_PHONE
But all the above scenarios are failed. The android app installed both Google Nexus S 4.1.0 mobile and Acer Iconia A500 tablet. Is there any other way to restrict the android app only for android tablet alone.?
According to documentation these lines would work for you!
<manifest ... >
<supports-screens android:smallScreens="false"
android:normalScreens="false"
android:largeScreens="true"
android:xlargeScreens="true"
android:requiresSmallestWidthDp="600" />
...
<application ... >
...
</application>
</manifest>
The filtering is applied on the market application! That means that you cannot really test it via installing the app from adb or just running it from the apk! APKs that may be filtered by Google Play still can be compatible and can installed on devices from "unknown sources".
You can see the how the filtering is applied when you upload your APK at Market see All Applications > select your application > APK > Supported devices | Excluded devices
Excluded devices: will let you manually exclude specific devises.
How do you install the APK? Via ADB/Sdcard or GooglePlayStore?
You should be noticed that all the filter is for the market. It cannot prevent user to install the APK manually.
Filtering is done by Google Play, not the device. If you want to restrict app usage just check parameters of the device your app is running on, like screen resolution or certain features you require and either proceed or show error message and just quit.
I realized that my application doesn't show up in searches on Google Play if I search for it using a Samsung 10" with Android 3.x.
If I install it (by using adb or maven android plugin) everything works as expected (core functionalities, compatibility mode, ...).
I studied all guides concerning targeting different devices, screens, tried different combinations in Manifest metadata and actually configuration looks like this:
<uses-sdk android:minSdkVersion="7"
android:maxSdkVersion="13"
android:targetSdkVersion="9" />
<supports-screens android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true" />
And in the maven android plugin configuration I specified:
<platform>10</platform>
In the Google Play developers console the apk is correctly reported for:
API Level: 7-13
Supported screens: small-xlarge
What's wrong with my metadata?
Thanks in advance!
Some other tags also affect the visibility of your app to the Android Market. I remember one time that an app I was working on is not showing up in the market as well. I realized that my application is using TELEPHONY services, however my device, a MOTOROLA Xoom doesn't have TELEPHONY services available which in turn filters the app in the Android Market. I set the an attribute in TELEPHONY services to not required (still in the AndroidManifest, I forgot the specific tag) and fixed the problem.