I have published apk to the Android Market, activated and setup for free for all countries.
Android Market says, my application is not compatible with any of the devices. I can see an application when I access Android Market from the PC browser but I can not download it from any of the Android phone (the same device used to test application before release).
How is that possible if I have just few requirements? I have tested the application on a few quite old devices before upload and it worked.
Information from the Publishing options:
This application is only available to devices with these features, as defined in your application manifest.
Screen layouts: SMALL NORMAL LARGE XLARGE
Required device features
android.hardware.screen.portrait
android.hardware.touchscreen
*This application is available to over 0 devices.*
Information fron the APK tab:
VersionCode: 2
VersionName: 1.0.1
Size: 4.3M
Localized to: default
Permissions: android.permission.READ_PHONE_STATE, android.permission.INTERNET, android.permission.WRITE_EXTERNAL_STORAGE, android.permission.ACCESS_NETWORK_STATE
Features: android.hardware.screen.portrait, android.hardware.touchscreen
API level: 7-15+
Supported screens: small-xlarge
OpenGL textures: all
If it is not strange enough, I have another application at the same account with very similar requirements and it gives me: This application is available to over 746 devices.
What is going on?
UPDATE:
Because many answers suggests something like: "Just activate your APK..." I emphasize it again:
APK is ACTIVATED (as stated at the beginning of the question and presented on the screenshot above).
Probably your uploaded APK file is not active. You can check this in the APK tab and switch to "Advanced mode". Here you should have 2 categories, "Active" and "Inactive".
Your file is probably in the Inactive category and you can change it by clicking the Activate link that should be behind it.
Hope my translations are correct as my Market account is in Dutch :)
I had a similar problem, I explained before but a moderator deleted it.
My app after an update had was available for 0 devices.
Anyway I found the solution for my case, so you can check if it works for you as well.
my mistake was that I included .jar files in order to add some external libraries and not the respective external class folders. When I removed the .jar files and I just added the class folder then devices became over 700 again.
for example I had the facebook API (an old one, not the current) and I had created a jar file out of it in order to include it like this in my app.
So when I removed the jar files and added the Facebook API projecy (Project Properties -> Java Build Path -> Projects -> Add..., the app was OK for the android market.
Hope I helped you!
For the records, I've found that one significant change that solved my case. Full explanation is at this post on Android Market Product Group.
Quick answer is remove the following uses-feature nodes from your manifest if present:
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<uses-feature
android:name="android.hardware.faketouch" />
Just activate the app on the APK files tab and you'll be ok.
i had similar issue, and resolved it just following the advice from http://androidforums.com/threads/0-devices-support-my-app-no-compatible-devices-on-play-store.947943/ , which was to change in build.gradle line compile 'org.apache.directory.studio:org.apache.commons.codec:1.8' to compile 'commons-codec:commons-codec:1.8' (so more or less general rule can be drawn, that you need to delete org.apache.(...) up to the package name and then just double it before semicolon).
I would be glad though, if someone would point me out why it was like that. Looking for the second term in Maven Central through Android Studio returned no results actually, so I doubted at first if it is going to work at all.
Related
I've looked through my whole project directory, and for the life of me, I cannot find where it would think it is an Android Auto. Going through this page:
https://developer.android.com/training/auto/start/index.html#auto-metadata
Nowhere in my Android manifest, do I set an automotive.
Could a library add to the manifest to make it an Automotive app?
Are there other things in the manifest I can check?
Please cross check in your res/xml file and see if you have any media or notification
under - uses element.
You can also check in your manifest file if you have added Car GMS package in the meta-data element.
<meta-data
android:name="com.google.android.gms.car.application"
android:resource="#xml/your_auto_xml_file"
/>
If the library you are importing in happens to be from the merchant who builds up the customized DHU, then these lib can infuse those properties in your project. One easy way would be to remove the library and see if it resolves the issue.
Hello i have a rather small issue but in a small way its a massive issue as googleplay keep rejecting my app because of it.
Here is my issue:
Screenshot the my apk contents
So all the files in my apk after compiling with a newly created keystore (or without and unsigned) are date at 1980 as in the picture above. my androidmanifest.xml is also the same?
This is really annoying i have tried timestamping methods here on stackoverflow without any success.
I have been throught the whole project in android studio for any related configuration in settings and code. i have re-installed android studio jkd,ndk,sdk and still its the same.
Anit help on solving this issue would be greatly appreciated.
Thank You
This is intentional, it reduces changes between apks.
If you want to avoid this you can add the following setting to your gradle.properties file:
android.keepTimestampsInApk = true
According to my tests it will change only some of the timestamps (e.g. classes.dex) in the apk and keep some of the timestamps (e.g. AndroidManifest.xml).
source: https://issuetracker.google.com/issues/37116029
I just imported a project from Eclipse to AS. In the project I'm using Google Maps, and in Eclipse I had these lines in the manifest:
<meta-data
android:name="com.google.android.gms.version"
android:value="#integer/google_play_services_version" />
<meta-data
android:name="com.google.android.maps.v2.API_KEY">
Importing the project left these lines. Do I still need them in the manifest now when using Gradle or can I just add this line to gradle.build and thats it?
compile 'com.google.android.gms:play-services:9.4.0'
Short answer- you need both!
Explanation (if you require it)
The Gradle lines basically tell Gradle to pull in the library called 'com.google.android.gms:play-services' and the version '9.4.0'. This is just a bunch of code you'll want to include in your project. (It's a lot of code, when your project looks bigger you'll want to split that out into just the components you use)
Meta data is used for different things than Gradle dependencies are- specifically in your case, you are using it here to:
supply your google api key, and,
supply your google play services version number
NOTE: hide your API key!!!! (just google "why should I hide my api key")
The version number is the version that your app expects to use, which you might specify if you are working on an older version, or for a workaround. Typically, these fields are just used to show maps.
The API key is used to access your Web Console app client for your app- i.e., the app on Google API Console that you linked to your Android Studio app. This is not something you want publically exposed on Stack Overflow.
Hope that helps :)
My firebase application is running perfectly on my android device without having added the permission.INTERNET flag. I installed Firebase directly from gradle. I am aware that adding Firebase through the project structure window in android studio will add the permissions.INTERNET for you. But this is not the case, my Android manifest has nothing in regards to permission.INTERNET yet is still fully functional...
I havent been able to find any info on this... Is this because its now run by Google?
The documentation for manifest merging states:
During the build process, the manifest merge process stores a record
of each merge transaction in the
manifest-merger-{productFlavor}-report.txt file in the module
build/outputs/logs folder. A different log file is generated for each
of the module's build variants.
You can look there for a detailed explanation of which library is providing the permission.
Or since you are using Android Studio, you can use Ctrl-Shift-N and type "AndroidManifest.xml" to see a dropdown menu of all the manifests in your build and open them to see what they contain.
A feature was added to Android Studio 2.2 to show the results of manifest merging. When viewing the manifest in an Editor window, select the Merged Manifest tab at the bottom of the window to see the contributors to the manifest.
In my build, which includes a number of Firebase libraries, the manifest that adds the INTERNET permission appears to be:
com.google.firebase\firebase-analytics\9.4.0\AndroidManifest.xml
I was manually managing my Mobile Data's permissions and I discover that, if I block mobile data on "Google Backup Transport", I cannot connect to Firebase.
I really think this is the reason You can use Your app even without INTERNET permissions.
I can create an app with Delphi XE5 (update 2, hotfix 1 -- but same was true in Update 1) that runs when it is created as a DEBUG version. But when I create it as a RELEASE-APPLICATION STORE version Internet stops working.
It seems to overwrite the android.manifest.xml file and take the INTERNET setting out of it. I have tried various ways of manually updating the file and deploying. But you have to run BUILD again to get the change to get incorporated -- and that overwrites the file again.
The app is simple app using REST. Also has a browser, with URL set in another part. Works fine in DEBUG version. In RELEASE-APPLICATION STORE version on REST call it says SOCKET #13 error, also web page does not work. So definitely no INTERNET.
Any thoughts, order for doing the manual change, or ideas would be greatly appreciated.
FOLLOW-UP --- FOUND THE SOLUTION
Unfortunately user permission settings are not not working completely in my environment. I change the INTERNET setting to TRUE in PROJECT | OPTIONS | USER PERMISSIONS and compile/build and the INTERNET setting gets eliminated (overwritten) from the AndroidManifest.xml file created in the project \release folder. In \debug version it is there (INTERNET setting) and is fine.
Solution for me, at least, is to update the AndroidManifest.template.xml file and add the INTERNET setting there -- so it is copied to both \release and \debug versions of the AndroidManifest.xml files.
So my AndroidManifest.Template.xml file .. in the project root looks like this:
... header and other info
<uses-permission android:name="android.permission.INTERNET" />
... other stuff and footer for file
The template files is used to create the \release and \debug versions of the AndroidManifest.xml files so it forces that setting to be put in that file.
This worked and cleared up the socket 13 error I was getting, and no INTERNET access on the release Android versions. YAY!!!
You have to go into the Project Options and enable the INTERNET permission. It is enabled by default for Debug builds, and disabled by default for Release builds.
I had the same problem. And setting project settings have no effect on release version. I think it is some kind of bug, because that effect appears only with INTERNET option. My solution is to set this option manually in androidManifest.template. In that case, it is working fine.
I put mine in after ..uses-permission... and it worked fine.