Android app compatible with 0 devices - android

My app https://play.google.com/store/apps/details?id=com.picturesexperience.camera is not visible on any mobile device. Installs with no problem from the APK file (that is actually how I distribute my app right now), works perfectly, but for some reason Google Play doesn't list it. Any suggestions.
The app uses QR code scanning library from Zxing, everything else is custom coded.
The app's manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.picturesexperience.camera"
android:versionCode="2"
android:versionName="1.4" >
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="10" />
<uses-feature android:name="android.hardware.CAMERA" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme" >
<activity
android:name="com.picturesexperience.camera.MainActivity"
android:label="#string/app_name"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".CameraActivity" android:label="#string/app_name" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden" />
<activity android:name=".UploadActivity" android:label="#string/app_name" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden" />
<activity android:name=".LoginActivity" android:label="#string/app_name" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden" />
<activity android:name=".PictureViewActivity" android:label="#string/app_name" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden" />
<activity android:name="com.google.zxing.client.android.CaptureActivity"
android:screenOrientation="landscape"
android:configChanges="orientation|keyboardHidden"
android:theme="#android:style/Theme.NoTitleBar.Fullscreen"
android:windowSoftInputMode="stateAlwaysHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter>
<action android:name="com.google.zxing.client.android.SCAN"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
</application>
</manifest>

<uses-feature android:name="android.hardware.CAMERA" />
...should be...
<uses-feature android:name="android.hardware.camera" />
The uses-feature is case sensitive and lower case, so in effect you're stating that you're using a feature that does not exist on any device.

Case sensitive
Permissions and features are case sensitive. Try with the following instead:
<uses-feature android:name="android.hardware.camera" />
Required=false
Also make sure to add android:required="false"for max device compatibility. Otherwise devices without back camera (like nexus 7 tablet) will still be ruled out.
<uses-feature android:name="android.hardware.camera" android:required="false" />
More information here: http://developer.android.com/guide/topics/manifest/uses-feature-element.html

I have face this problem, but after searing a few hours i got a solution in my app.
I am using
<uses-feature android:name="android.permission.READ_PHONE_STATE" />
while its should be
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
So that i want to say that please check carefully your permissions and feathers. Also remove those permission which is not required in your application this thing will increase support device.
I hope it will work for you.

I know it is late to answer, I face the same problem. With setting all users-features as false, play store still shows zero devices supported.
Here is solution, hope will help someone
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
Also
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:resizeable="true"
android:smallScreens="true"
android:xlargeScreens="true" />
Hope it help.

You can check why your app is incompatible by checking the device catalog:
Select device catalog from menu
Show all devices
Then select any device, click on the blue arrow to see details and check the entry 'track status'

Related

Why is my Android application crashing on Samsung Galaxy Note 9?

So , I was developing an Android application for Arduino and I was right about to post it on Google Play but first I though I should test it on different devices. So I sent my apk to a few of my friends.
Here are the devices i tested it :
One plus 6T : works perfectly
Asus zenfone 5z : again works perfectly
Samsung galaxy note 9 : when the app is opened it instantly crashes
Has anybody ever encountered such thing ?
My first guess was about the resolution of the device: the first two devices are running at a resolution of about 2280x1080 while the Note 9 runs at 2960x1440.
I added into the Android Manifest file the lines for supporting screens but seems that they don't help.
I also created "Landscape variations" and "tablet variation" for my first three activities but that also didn't helped.
Here is my Manifest code :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.edi.bluetoothgoogleplay">
<uses-feature android:name="android.hardware.bluetooth" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:xlargeScreens="true"
android:smallScreens="true">
</supports-screens>
<application
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="#drawable/newicon"
android:label="Arduino Controller"
android:largeHeap="true"
android:supportsRtl="true"
android:theme="#style/AppTheme">
<activity android:name=".FirstActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:screenOrientation="portrait">
</activity>
<activity
android:name=".ChooseActivity"
android:screenOrientation="portrait" />
<activity
android:name=".CarActivity"
android:label="#string/title_activity_car"
android:screenOrientation="landscape"
android:theme="#style/AppTheme.NoActionBar" />
<activity
android:name=".LedActivity"
android:screenOrientation="portrait" />
<activity
android:name=".TerminalBluetooth"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
</application>
</manifest>

My tablet is unsupported for a react-native android app

I am using a react-native android app. And my device is not supported because it does not have the required feature: android.hardware.telephony.
Yes, I do not have telephony in my tablet. But, I am not adding this required feature in my manifest. So, where exactly is react-native adding this required feature in the build? And how can I turn it off.
My manifest file is below.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.kalhatti.main"
android:versionCode="5"
android:versionName="1.5">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="22" />
<application
android:name=".MainApplication"
android:allowBackup="true"
android:label="#string/app_name"
android:icon="#mipmap/ic_launcher"
android:theme="#style/AppTheme">
<activity
android:name=".MainActivity"
android:label="#string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>
</manifest>
Thanks.
To allow the app to be installed in tablets, add the following to AndroidManifest:
<uses-feature android:name="android.hardware.telephony" android:required="false" />
Thanks to #GabeSechan for answering in comments.

Facebook SDK for Unity Android - Incorrect manifest file being generated, can't login

Ok, this has taken over a week, but I finally found the cause of why I can't seem to log in to facebook using the Facebook SDK (v4.3.4) with Unity3d (v4.3) on my android devices. Now to figure out how to fix it... ?
Symptom:
I run the application on the android device. When I press the login button, it opens the permissions prompt from facebook. Then... nothing. The login doesn't complete, and looking through the logs, its clear that the LoginCallback isn't being called. (Although Facebook appcenter does record that you've granted permission to the app). If I asked for multiple permissions, it only prompts for the first one. (normally it will prompt for the first one, appear to go back to the application for a split second, then prompt again for the second).
Cause:
The manifest file is being incorrectly generated.
Here's an example of the one manifest file for FriendSmash when its generated CORRECTLY:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:theme="#android:style/Theme.NoTitleBar" android:versionCode="1" android:versionName="1.0" package="com.mycompany.mygame" android:installLocation="preferExternal">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:xlargeScreens="true" />
<application android:icon="#drawable/app_icon" android:label="#string/app_name" android:debuggable="true">
<activity android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:label="#string/app_name" android:launchMode="singleTask" android:name="com.facebook.unity.FBUnityPlayerActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:label="#string/app_name" android:launchMode="singleTask" android:name="com.unity3d.player.UnityPlayerActivity">
</activity>
<activity android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:label="#string/app_name" android:launchMode="singleTask" android:screenOrientation="reverseLandscape" android:name="com.mycompany.mygame.UnityPlayerNativeActivity">
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
</activity>
<activity android:configChanges="keyboardHidden|orientation" android:name="com.facebook.LoginActivity" android:screenOrientation="portrait">
</activity>
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="\ 586438214724597" />
</application>
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="19" />
<uses-feature android:glEsVersion="0x00020000" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.touchscreen" />
<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen.multitouch.distinct" android:required="false" />
</manifest>
Here's an example of the manifest file for FriendSmash when its generated INCORRECTLY:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:theme="#android:style/Theme.NoTitleBar" android:versionCode="1" android:versionName="3.0" package="com.mycompany.mygame" android:installLocation="preferExternal">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:xlargeScreens="true" />
<application android:icon="#drawable/app_icon" android:label="#string/app_name" android:debuggable="true">
<activity android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:label="#string/app_name" android:launchMode="singleTask" android:screenOrientation="reverseLandscape" android:name="com.mycompany.mygame.UnityPlayerNativeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
</activity>
<activity android:configChanges="keyboardHidden|orientation" android:name="com.facebook.LoginActivity" android:screenOrientation="portrait">
</activity>
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="\ 586438214724597" />
</application>
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="19" />
<uses-feature android:glEsVersion="0x00020000" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.touchscreen" />
<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen.multitouch.distinct" android:required="false" />
</manifest>
Two main differences: (1) The main activity for the correct manifest file is named "com.facebook.unity.FBUnityPlayerActivity" and for the incorrect file its "com.mycompany.mygame.UnityPlayerNativeActivity", and (2) the correct file also has a "com.unity3d.player.UnityPlayerActivity" and the "com.mycompany.mygame.UnityPlayerNativeActivity" appears after it.
But unfortunately, most of the time, Unity is generating the incorrect version of the file. I've tested it with the FriendSmash game, tested a custom app that adds the facebook sdk, and tested another sample app that only contains the facebook SDK (all on both windows and mac). They all generated the wrong version, except by chance, the first time I downloaded the FriendSmash complete project. And when I downloaded FriendSmash fresh to test on mac, it started generating the file incorrectly as well.
Additionally, if you just try to build the apk file in unity without creating the Google Android Project, it uses the wrong manifest and builds a broken app.
Solution:
No Idea. Anyone have any thoughts on how to fix this?
Ok, so it seems the manifest file being provided in the new version of the sample project and in the new SDK unity package are used to build the custom manifest file that the Google Android Project uses. It must have been updated incorrectly and is what is causing the problems.
To fix, after you import the Facebook SDK, just replace the file at Assets/Plugins/Android/AndroidManifest.xml with the old version:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.unity3d.player" android:installLocation="preferExternal" android:theme="#android:style/Theme.NoTitleBar" android:versionCode="1" android:versionName="1.0">
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />
<application android:icon="#drawable/app_icon" android:label="#string/app_name" android:debuggable="true">
<activity android:name="com.facebook.unity.FBUnityPlayerActivity" android:launchMode="singleTask" android:label="#string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.unity3d.player.UnityPlayerActivity" android:launchMode="singleTask" android:label="#string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
</activity>
<activity android:name="com.unity3d.player.UnityPlayerNativeActivity" android:launchMode="singleTask" android:label="#string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
</activity>
<activity android:name="com.facebook.LoginActivity" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation">
</activity>
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="\ 586438214724597" />
</application>
</manifest>
I haven't yet tested this with building a new Google Android Project, but I was able to directly build the apk file and run it on the phone.

Are apps fully compartmentalized?

I am running into an issue that is confusing me. It seems as if android apps are NOT fully compartmentalized is this the case.
I have a Samsung SIII phone and I am building apps that are used as templates. Basically it is the same app but with different content the content is retrieved from our database at startup.
So my process is to create a single app get it working, then copy it to another package through refactoring and I change the data retrieval calls and I have two apps the internal functioning and coding is basically identical.
What I am seeing is this I start one app and it seems to be working just fine and I can open and close it several times with no issue, then out of the blue I get a pop up that says a certain app has stopped functioning. The issue is I never opened that app I could have opened one of the duplicates but I even forgot I had the app that crashed on the phone let alone starting it.
I routinely shut down all running apps just to make sure things run smoothly and I never see that this mystery app is running anywhere.
The shut down message just simply appears but it is always after running apps that ran the same code but not all the time.
This may be the reason I have seen some other issues but can't tell
the basics of the other issue is two sets of code that are pretty much identical per my process where one works and the other doesn't
I am very confused
Can anyone help clear the smoke?
this may help it is a list of my permissions
uses-permission android:name="com.android.vending.BILLING"
uses-permission android:name="android.permission.INTERNET"
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
uses-permission android:name="android.permission.READ_PHONE_STATE"
uses-permission android:name="android.permission.ACCESS_WIFI_STATE"
uses-permission android:name="android.permission.BLUETOOTH"
The content for all of my template apps will be VERY similar except for the package name versions etc.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.blah.blahblah"
android:versionCode="2"
android:versionName="0.75" >
<uses-sdk
android:minSdkVersion="5"
android:targetSdkVersion="7" />
<!-- VERY IMPORTANT! Don't forget this permission, or in-app billing won't work. -->
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<application
android:icon="#drawable/ic_launcher"
android:label="#string/app_name" >
<activity
android:name=".IntroActivity"
android:label="#string/title_activity_main"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".InfoActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".AudioActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".MovePlayActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".WebActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait" >
</activity>
</application>
Here is a second one
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.blah2.blah2blah2"
android:versionCode="4"
android:versionName="1.5" >
<uses-sdk
android:minSdkVersion="4"
android:targetSdkVersion="7" />
<!-- VERY IMPORTANT! Don't forget this permission, or in-app billing won't work. -->
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<application
android:icon="#drawable/ic_launcher"
android:label="#string/app_name" >
<activity
android:name=".IntroActivity"
android:label="#string/title_activity_main"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".AudioActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".MovePlayActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".WebActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait" >
</activity>
</application>
I do see the min SDK version has changed I don't remember doing this right off hand but I must have for some reason

What does Google Play Store developers console mean?

I want to publish my new app in Play Store but see this message in app panel:
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.location
android.hardware.location.gps
android.hardware.location.network
android.hardware.screen.portrait
android.hardware.sensor.accelerometer
android.hardware.touchscreen
This application is available to over 0 devices.
Why it said that my app available to over 0 devices? I have tested on my phone and it works. At least one device :)
My Manifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="..."
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-feature android:name="android.hardware.sensor.accelerometer" />
<application
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#android:style/Theme.Black.NoTitleBar" >
<activity
android:name="MainActivity"
android:configChanges="orientation"
android:label="#string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="ListActivity"
android:screenOrientation="portrait">
</activity>
<activity
android:name="SettingsActivity"
android:screenOrientation="portrait">
</activity>
<activity
android:name="HelpActivity"
android:screenOrientation="portrait">
</activity>
<activity
android:name="AboutActivity"
android:screenOrientation="portrait">
</activity>
</application>
</manifest>
This shows up using IE. Go and look in Firefox, and you will have a large # of devices.

Categories

Resources