My users complain that my android application is not available in Google Play for particular device - Samsung Galaxy Tab Pro.
What should I check (and where) to make it available?
AndroidManifest.xml part related to permissions and features:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.rosspam"
android:versionCode="19"
android:versionName="1.6.0.0" >
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="22" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application ...>
...
<receiver android:name="org.myapp.SMSReceiver" >
<intent-filter android:priority="999" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
...
<meta-data android:name="com.google.android.gms.version"
android:value="#integer/google_play_services_version" />
<meta-data android:name="com.google.android.gms.games.APP_ID"
android:value="#string/app_id" />
</application>
</manifest>
First, check in android developer console whether you disclosed/removed some devices there - check under APK. You also should check in your Manifest.xml for the right values of android:minSdkVersion and android:targetSdkVersion.
Try following:
Sign into your Google Play Developer Console.
Click on All Applications and click on the application whose device availability you'd like to view.
After that, click on APK.
After that, under Current APK, click on the link labeled See Supported Devices
Source: support.google.com
Also, some devices aren't able to download because you specified (for example) a minSdkVersion of 16 and the device which wants to access is only on Gingerbread 2.3.3 API 10.
Or if you wrote in the manifest, your app urgently needs a big screen, some device won't be able to see it in the store, because the device is against the requirements of your app.
Nono no, it's not only the SDK. Check if the Device allows ALL your permissions. If you want to have some permissions which are optional you can use use-features like
<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="false" />
Means. SDK AND Permissions must match.
Related
A large number of users are complaining that they receive the following error when trying to install the latest update of my application (see image below). I have been unable to replicate this issue myself. Have logged issue with Google, but they don't seem to know what is causing this either (asking for developer bug reports, but I feel uncomfortable walking users through how to do this). I've seen a few other posts about this topic, but no solutions. Any ideas on what could be the cause?
Things I have considered:
uses-permission - I haven't added any this release
uses-feature - I haven't added any this release
Package name has not been modified in this release
Min/target/compile sdk version - no changes made this release (min 24/target 30/compil 30)
Two changes I did make, but I don't suspect being an issue are:
I did change the android:label field in the application's manifest for <application>
I have added an exception to cleartextpermitted
Example error below:
And manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:sharedUserId="XXX..shared"
package="XXX">
<uses-feature
android:name="android.hardware.camera"
android:required="true" />
<uses-feature
android:name="android.hardware.sensor.compass"
android:required="true" />
<!--<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />-->
<uses-feature
android:glEsVersion="0x00030002"
android:required="true" />
<queries>
<!-- Explicit apps you know in advance about: -->
<package android:name="XXX"/>
<package android:name="XXX2"/>
<package android:name="XXX3"/>
</queries>
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="28"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="28" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:name="XXX"
android:allowBackup="true"
android:fullBackupContent="true"
android:icon="#mipmap/ic_launcher"
android:label="XXX"
android:usesCleartextTraffic="false"
android:theme="#style/AppTheme"
android:networkSecurityConfig="#xml/network_security_config">
<provider
android:authorities="XXX"
android:name="XXX.SharedPreferencesContentProvider"
android:exported="true"
android:protectionLevel="signature">
</provider>
<activity
android:name=".MainActivity"
android:label="XXX"
android:screenOrientation="fullSensor"
android:theme="#style/SplashTheme"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
...
</application>
</manifest>
EDIT:
Suspect that the following line in my manifest may be the culprit:
android:sharedUserId="XXX..shared"
Releasing new version, will keep you updated.
Issue was with the following line in the manifest:
android:sharedUserId="XXX..shared"
I added this since the previous release to experiment with my suite of apps communicating with one another, but had forgotten to remove this before my release. This sharedUserId is typically used to group apps that are signed with the same cert/developer so that they can share info with one another. However, the flag has now been deprecated, and if you need your apps to communicate with one another, there are far better ways to do this without breaking your app. Read more about sharedUserID here (but DON'T implement it, whatever you do!):
https://developer.android.com/guide/topics/manifest/manifest-element
App updates will fail for users if the sharedUserId is added or doesn't match the current installed version. Google play will just hang or show a generic error that isn't useful to your users, ending up with confusion and a bunch of 1 star reviews.
Warning: removing the sharedUserId can be just as problematic as adding it. Any users that downloaded the app after you added it (or reinstalled your app during this time) will now get the same error when trying to update to a version where you removed it. The only way for them to fix is to uninstall/reinstall the app again. Lucky for me, I worked out this root cause within a few days, so I only have to manage a few days worth of new users who will experience this issue now, but if this had gone on any longer, you could be looking at a large number of users with the update issue.
I know it may be silly question and I have referred all the similar question before but unfortunately I could resolve this issue. Most probably it is problem in my Manifest.xml file.
When I am trying to access location, app is crashing
here is my manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.tt.test" >
<application
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme" >
<activity
android:name=".sTest"
android:label="#string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name="com.test.tt.test.sService">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </service>
<service android:name="com.test.tt.test.sServiceRequest" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
</application>
when I run it throw this error
java.lang.SecurityException: Neither user 11029 nor current process has android.permission.ACCESS_COARSE_LOCATION.
Similar with other permissions. I can not see any mistake in my manifest file. Help appreciated
If you are running on a device on Android Marshmallow and above:
If the device is running Android 6.0 or higher and if the app's target SDK is 23 or higher, the app not just have to list the permissions in the manifest but also must request each dangerous permission it needs while the app is running.
More info:
http://developer.android.com/training/permissions/requesting.html
and
http://developer.android.com/guide/topics/security/permissions.html#normal-dangerous
This means you have some wrong information or malformed info in your menifest file and that is the reason none of your Permission is not identified by your app. Just make sure you have cleaned ANDROIDMANIFEST file with any malformed data.
It will work and all permission should be outside Application tag
move the uses-permission outside application just below the manifest tag
Moving permission section solved my problem with "Neither user or current process has android.permission.READ_PHONE_STATE". Thank you so much to everyone in this forum.
In reference to others, my changes are bellow:
Original:
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-feature
android:name="android.hardware.nfc"
android:required="true" />
<activity android:name=".NfcRead"></activity>
</application>
Change:
<uses-permission android:name="android.permission.NFC" />
<uses-feature
android:name="android.hardware.nfc"
android:required="true" />
<activity android:name=".NfcRead"></activity>
</application>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
This exception is related to the runtime permission system in Android 6 and above. The Location permission comes under dangerous permission [check here], so you must have to fulfill below 2 minimum requirements to handle these permissions:
Declared below 2 permission in manifest (These permissions must be outside application tag)
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION " />
Check for the granted permission at runtime using checkSelfPermission() and request permissions using requestPermissions() if not already granted.
If you have already done both of the above then and still getting error then check below:
You App's targetSdkVersion (should be >=23) [If the application's targetSdkVersion is set to less than 23. It will be assumed that application is not tested with new permission system yet and will switch to the same old behavior: user has to accept every single permission at install time and they will be all granted once installed].
Check if you have any thing wrong with you manifest file. You might have malformed manifest file.
Check if you are calling any function, that works on location data, before the user Accept/revoked runtime location permission dialog?
Clean you app (Clean build) and re-run.
Hope this may help :-)
I had my existing android project going unmanageable due to unnecessary research codes, so I decided to create a new project with only necessary code that's required for the app. I uploaded the same on play store's beta environment. As the app got updated on my phone, the already existing app icon on home screen got removed. Did I make any mistake in the code development?
Please help
EDIT: Added Manifest File
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.abc"
android:installLocation="preferExternal"
android:versionCode="52"
android:versionName="5.0.004" >
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:name="com.example.abc.Appname"
android:allowBackup="true"
android:icon="#drawable/launcher"
android:label="#string/app_name"
android:theme="#style/Theme.CustomTheme" >
<activity
android:name="com.example.abc.SplashScreen"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="#string/title_activity_app_name"
android:theme="#android:style/Theme.Black.NoTitleBar"
android:windowSoftInputMode="stateHidden" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
...
</manifest>
Reverted back the application name to old file name (java class) and the same in manifest file. The launcher icon was created while installing via Google play store's beta environment.
Still unsure why the application name and java class names had an impact on the launcher icons. Any idea?
While I am trying to run Google Maps type apps I try to run using my android device. But device is not showing in my eclipse browser. What should I do ?
Is there any alternate way to run these type of applications ?
my menifest file as below
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.googlemaps"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- Required to show current location -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- Required OpenGL ES 2.0. for Maps V2 -->
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<!-- Requires OpenGL ES version 2 -->
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<application
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme" >
<activity
android:name="com.example.googlemaps.MainActivity"
android:label="#string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="my key" />
</application>
</manifest>
Please Share what you have tried?
where you have to run this Application?
Please check Right click on the project->Run As->Run Configuration Now one window will show..That contains three tabs like Android,Target,Common.
1.You should select Launch default Activity in android tab
2.You should Select Automatically pick compatible Device
Ple try it
<uses-sdk
android:minSdkVersion="12"
android:targetSdkVersion="16" />
Ple Check this lines from Your manifest flie.. android:minSdkVersion="12" know..For Your Mobile Should not Greater than from 12.Please Check
This worked for me:
Create an apk file with same keystore key you have stored into Google Maps Console and install into your device. Installing into Android device using eclipse will not take your correct SHA1 key to view the Google Maps. As incorrect SHA1 key will lead to authentication failure.
vKj
we already searched a lot of similar topics on StackOverflow and in other forums but haven't managed to solve this issue so far.
We developed an Android application that is missing from the market for some devices. It uses geo-data and the camera extensively. The "Copy Protection" is already off, and we can't figure why it isn't showing on some devices that appear to be completely compatible.
The manifesto is as follows:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.syncmobile.riogastronomia"
android:versionCode="5"
android:versionName="1.2.1" >
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.SET_ORIENTATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-feature android:name="android.hardware.camera" android:required="true"/>
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
<supports-screens
android:xlargeScreens="false"
/>
<application
android:icon="#drawable/icon"
android:label="#string/app_name" >
<activity
android:name=".Splash" android:label="#string/app_name"
android:theme="#android:style/Theme.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</manifest>
Devices that we're having problem with so far:
Model: Xperia x10 | Model Number: X10i | Android Version: 2.3.3
If you would like to see if it shows up in your device the app name is: "Rio Gastronomia"
Thank you all beforehand for your precious time. =D
Update:
I opened the app direct URL in the browser and I got this message from the market:
Your content filtering level doesn't allow you to download this item.
The app maturity level is set to low.
So... after getting this error from the market I tried switching my filtering configuration. It was set to "Everyone", when I set it to "All Apps" I could finally see the app in the market. But I can't change the settings in my users devices, so what should I do to get people that have "Everyone" set to see our app?
(The app is set to "Low Maturity" cause the option "Everyone" was disabled by Google Play)