Google Play tablet optimization tips - how to resolve issues? - android

When listing an app in Google Play the optimization tips tells me 3 issues:
WHAT YOU SHOULD DO WHY WE ARE PROPOSING THIS
Design your app for tablets
Your APK needs to meet the following criteria:
1) Target and minimum Android versions support tablets (check targetSdkVersion and minSdkVersion). Learn more
2) Supports common tablet screen sizes (LARGE and XLARGE). Learn more
3) Includes custom drawables and assets for common tablet screen densities. Learn more
Here is my manifest concerning the first 2 issues:
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="17" />
<supports-screens android:smallScreens="false"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:requiresSmallestWidthDp="480" />
The "Learn more" link sends me off to the instructions. The app works on phones but I'm targeting tablets so I want Google play to know it is tablet compatible. What am I doing wrong here? I'm still in the "alpha/ready-to-publish" phase so I cant tell if it really will get listed in the tablet section yet...

I had this problem too - I think the Optimization Tips only refer to the "Production" APK, not an alpha/beta one, so if you don't have a production APK, it gives all these warnings. When I transferred the APK to production, the warnings went away. (Beware, you can't move an APK back from Production to Alpha/Beta, or otherwise remove it, so unfortunately this isn't useful as an easy way to check.)

Related

Android application is set to be deployed on tablets only, but why am I still able to install it on my phone?

My application is set to work on 7" and 10" android tablets only. Here's what my XML looks like:
<manifest>
<supports-screens android:anyDensity="false"
android:smallScreens="false"
android:normalScreens="false"
android:largeScreens="true"
android:xlargeScreens="true"/>
<application android:theme="#style/Theme.AppCompat.Light"/>
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19"/>
</manifest>
Now the app works just fine, I have no problems. I don't want the application to run on phones, but I am still able to install the app on to my phone(nexus 5) from the IDE (I am using Titanium), and it runs fine on my phone as well.
What can I do to make it impossible for the app to be installed on phones?
So I figured it out.
If you install/run the app on any physical device, it will install and run on that said device regardless of any conditions. However, after uploading it to the google play store, the device would have to meet the conditions if you wanted to install it via google play store.

Android App only for Tablets

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.

Disable specific version for example Honeycomb / 3.1

Is there a way to disable a specific version from Google Play.
For example hide/disable Honeycomb version 3.1 from Google Play?
Currently I have
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:anyDensity="true"/>
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="10"/>
But I don't want user with version 3.1 to see my app.
Thanks!
In google play you can upload multiple apk's, so that you can have different versions to target different platforms (perhaps you have a version with newer sdk features, but you keep another version built for older phones w/ different features)... you could have two, with the same code: one that targets below up to 3.x, and the other that targets above... you'll then have to maintain two apk's with the same code, of course. Also I don't think it prevents them from side-loading, it just filters it out of their results on the play store app.
Suppose you want to block only 3.1, and you support from 1.5+ up to 4.1
For one apk, you'll have:
<uses-sdk android:minSdkVersion="3"
android:targetSdkVersion="16"
android:maxSdkVersion="10" />
And for the other:
<uses-sdk android:minSdkVersion="12"
android:targetSdkVersion="16"
android:maxSdkVersion="16" />
Of course, adjust the targets and bounds as they make sense. It might be grumpy if max < target, I'm not sure. And keep in mind target sdk compatibilities..
AS a follow up, here's some insight from the documentation on multiple apk's:
API level
This is based on your manifest file's element. You can use both the android:minSdkVersion and android:maxSdkVersion attributes to specify support for different API levels.
For example, you can publish your application with one APK that supports API levels 4 - 7 (Android 1.6 - 2.1)—using only APIs available since API level 4 or lower—and another APK that supports API levels 8 and above (Android 2.2+)—using APIs available since API level 8 or lower.
Note:
If you use this characteristic as the factor to distinguish multiple APKs, then the APK with a higher android:minSdkVersion value must have a higher android:versionCode value. This is also true if two APKs overlap their device support based on a different supported filter. This ensures that when a device receives a system update, Google Play can offer the user an update for your application (because updates are based on an increase in the app version code). This requirement is described further in the section below about Rules for multiple APKs.
You should avoid using android:maxSdkVersion in general, because as long as you've properly developed your application with public APIs, it is always compatible with future versions of Android. If you want to publish a different APK for higher API levels, you still do not need to specify the maximum version, because if the android:minSdkVersion is "4" in one APK and "8" in another, devices that support API level 8 or higher will always receive the second APK (because it's version code is higher, as per the previous note).
http://developer.android.com/guide/google/play/publishing/multiple-apks.html
you could use maxSdkVersion="11" (but then you also exclude Android 3.2 and Android 4.x); I'm not sure this suits your needs.

Android App shows incompatible with ICS 4.0.4 device Google Play

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?

Application not showing up in Google Play searches for 3.x devices

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.

Categories

Resources