Is it possible in Google Play why an App is not compatible with a device? - unity3d

Within the AndroidManifest.xml I can see the following lines:
<uses-sdk android:minSdkVersion="16" />
<uses-feature android:glEsVersion="0x00020000" />
<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true"/>
<uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true"/>
<uses-permission android:name="android.permission.NFC"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
So I guess the compatibility issue is due to some of the followings:
minSdkVersion
accelerometer
gyroscope
Is it possible to know which one/s is the compatibility issue within Google Play. Should we check one by one "manually"?

According with the answer of Google, it seems that nowadays we have to check it manually as I have stated in the question.
The answer of Google was: "If you'd like to know why specific device is not compatible with the app, you'll need to check if all the features you requested in the APK are supported by the device. Also you'll need to check the Android version"

Related

I am having issues uploading my app to Google playstore

I have been trying to upload my flutter app to playstore, but it got rejected, I got an email like this below
This is how my pubspec.yaml file look like
my Androidmanifest file
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test" xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" tools:node="remove"/>
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
I was thinking maybe the permission_handler is the cause of the rejection,
but based on my research online, I believe it suppose to go through since I added this
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" tools:node="remove"/>
I think you misunderstood the Google Playstore message.
They are telling you that your app shouldn't use this permission:
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" tools:node="remove"/>
So you have two options:
Either Remove this permission request from your app or
argue with the Google Playstore support about why your app really needs this permission. They list a few allowed cases (web browsing as a core functionality for example)

Why with wifi I can connect but not with my mobile data

Hello I have a problem this morning that I did not meet. with wifi I can connect with the application but not with my mobile data. Can anyone help me? Here is the content of
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
android:label="FACTURA"
android:name="${applicationName}"
android:icon="#mipmap/ic_launcher">
<activity
Starting with Android API 28 and iOS 9, these platforms disable insecure HTTP connections by default.
You can use this code:
Add network-policy at your meta-data in AndroidManifest.xml file:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
....
<meta-data android:name="io.flutter.network-policy"
android:resource="#xml/network_security_config"/>
Allowing cleartext connection for debug builds:
Look at: $project_path\android\app\src\debug\AndroidManifest.xml:
<application android:usesCleartextTraffic="true"/>
You can see this documentation:
https://docs.flutter.dev/release/breaking-changes/network-policy-ios-android

java.lang.SecurityException: Need android.permission.BLUETOOTH_CONNECT permission

After asking for runtime permission for BLUETOOTH_CONNECT, android 12 crashes , I faced this problem in Samsung Android 12 Device. In other device less then Android 12 is working fine.
I handled bluetooth permission but still my app going to crash
manifest
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
sdk -> 31
Showing this type of error after build the app.
I got the solution.
As you can see the BLUETOOTH permission is disabled in Android 12. This issue resolved if I add the maxSdkVersion for the BLUETOOTH permission.
So I update permissions in manifest file :
Old This:
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
to
new this:
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" android:required="false" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" android:maxSdkVersion="30" android:required="false" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" android:required="false" />

I am in Unity and I imported a new appodeal sdk and I get this error: Manifest merger failed with errors

1.Before I added the appodeal plug in everything was fine, but I also have unity ads and google services installed, so maybe that's part of the problem. I also removed the target sdk version from the manifest because I thought it will help but it didn't. This is the appodeal manifest :
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="27"/>
<application android:allowBackup="true" android:networkSecurityConfig="#xml/network_security_config"
android:name="androidx.multidex.MultiDexApplication">
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--optional-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!--optional-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!--optional-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--optional-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!--optional-->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
<!--optional-->
<uses-permission android:name="android.permission.VIBRATE"/>
<!--optional-->
[![enter image description here][1]][1]
I had the same error: Missing 'package' key attribute on element package at [:com.my.target.mytarget-sdk-5.11.7:] AndroidManifest.xml:15:9-54. But you posted the wrong manifest. The error is in a generated one, inside the cache folder of grandle.
But here is the fix:
Preparing your Gradle build for Android 11
You need to change classpath 'com.android.tools.build:gradle:3.4.0' to 'com.android.tools.build:gradle:3.4.3' in gradle file. (Unity 2017.4 - Unity 2019.4)
You need to change classpath 'com.android.tools.build:gradle:3.6.0' to 'com.android.tools.build:gradle:3.6.4' in gradle file. (Unity 2020.1)
For versions (Unity 2017.4 - Unity 2019.2) you can change gradle version in /Unity/Hub/Editor/UNITY_VERSION/PlaybackEngines/AndroidPlayer/Tools/GradleTemplates/mainTemplate.gradle or directly in mainTemplate.gradle in the project.
For versions (Unity 2019.3 - Unity 2020.1) you can change gradle version in /Unity/Hub/Editor/UNITY_VERSION/PlaybackEngines/AndroidPlayer/Tools/GradleTemplates/baseProjectTemplate.gradle or directly in baseProjectTemplate.gradle in the project.
This is from the Appodeal Documentation Docs

how to generate keystore for android with google maps in titanium?

I'm trying to generate a valid keystore for my application with the signature algorithm: SH1withRSA.
I have generated an API key with SHA1 from the keystore that was generated previously and set tiapp.xml to use Google maps v2:
<manifest android:versionCode="10" android:versionName="1.0">
<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.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="com.vivelabbogota.idutest.permission.MAPS_RECEIVE"/>
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>
<permission
android:name="com.vivelabbogota.idutest.permission.MAPS_RECEIVE" android:protectionLevel="signature"/>
<application android:debuggable="false">
<meta-data
android:name="com.google.android.geo.API_KEY" android:value="AIzaSyBtJKvPPfpbioLqKVz213JOYDxOpoHCriE"/>
<uses-library android:required="true" android:name="com.google.android.maps"/>
</application>
<application android:theme="#style/Theme.NoActionBar"/>
<!-- Need to specify at least API level 11 for Titanium SDK 3.2.x and prior -->
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="16"/>
</manifest>
Later, I built a signed apk with the keystore, but when I install this apk the map does't load (only shows a grid). In the other hand if I sign the apk with default Titanium keystore, which is signed with MD5withRSA, the map loads.
Can you help me with this?
Your problem i think is that you use the same api key for two different type of service , your map loads on debug but not on release ! you have to know that you have to generate another SHA1 with your keystore not debug.keystore , and then generate a new api key in google console with your keystore SHA1 .
hope it can help
In Google Developers you added SHA1 for developer key only. That's why it stopped working when you signed it with distribution key. Just add SHA1 for distribution key for API key you generated (yes, you can add multiple SHA1 for same API key). This way you won't have to change anything in app and it will allow you to switch between developer/distribution version with maps working any time you want.