I have two apps listed on the marketplace. One of them is a free demo application, and the second is a second key application that unlocks the full version of the first application. I received a report from a user that the demo installs on their Huawei, but the market lists they application as "incompatible". I haven't received any other reports of this, and can't find anything useful on Google. The two manifest xmls are below, the demo app first and the key app second. Could this be caused by the check license permission? In android market developer console, the "supported devices" section is the exact same for both apps:
Supported Devices [Learn More] 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.touchscreen
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="..."
android:versionCode="3"
android:versionName="1.1">
<application ...>
</application>
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package=...
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="7"/>
<uses-permission android:name="com.android.vending.CHECK_LICENSE" />
<application ...
</application>
</manifest>
One thing to do is download both apps from Market, pull them off the device (with "adb pull"), and then use "aapt dump badging " on each of them. This prints out the "badging" information for the app; it is the same thing that Market uses to determine filtering and other things about the app. If there is nothing different between these, then the problem is not in how you have built your apps.
Related
The google pre-launch report has this message for 7 of 10 devices for the most recent apk of my app (version 0.0.6) - "This device could not be tested at this time. Please upload a new APK."
I've looked around but haven't found anything that gives me a clue as to what this message means. Could some of the test devices be down? Could it be an issue with my app - maybe something in the 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"
package="com.truthbetolddesigns.herotracker"
android:installLocation="auto">
<!-- Permissions -->
<uses-permission android:name="android.permission.INTERNET" /> <!-- Spell Links, Survey -->
<uses-permission android:name="com.android.vending.BILLING" /> <!-- Google Play In-App Billing -->
<!-- SDK -->
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="26"
tools:overrideLibrary="com.travijuu.numberpicker.library" />
<!-- Screens -->
<supports-screens
android:resizeable="true"
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:anyDensity="true"/>
<application
android:allowBackup="true"
android:icon="#mipmap/ic_launcher"
android:label="#string/app_name"
android:roundIcon="#mipmap/ic_launcher_round"
android:supportsRtl="true">
...
</application>
</manifest>
The previous .apk (version 0.0.5) had the issue with 1/10 devices, and that was when I added In-App Billing and made it available to all countries outside the US, so could that be an issue? I didn't have this issue before (versions 0.0.4 and before).
Any thoughts on what's causing this error message?
Here's a link about the pre-launch reports:
It states that in "Test your APK":
You'll usually receive test results shortly after uploading your APK.
In some cases, you'll receive results several hours after upload.
So I guess you'll just have to wait for it to update after a while. If not then probably contacting Support would be a good choice.
I had the same issue. I solved the issue buy changing "default install location" setting to "prefer external". It was set to "force internal" when it was giving this error. If you are using Unity game engine it is in the "Build Settings" -> "player settings". If you are working with Android Studio refer this link
I was playing lately with my Samsung Gear 2 (not S2) smartwatch and I have created a new watch-face for it. I would like to show a weather information on it and I have found that for that task I need to use Samsung Accessory Protocol (SAP).
I followed the Samsung tutorial to create a demo app to learn how to use SAP.
I had a problem with deploying Tizen app to my watch but I found out that the lowest currently (2017) available API is 2.3.1 where Gear 2 Smartwatch has 2.2.
After changing in the config.xml the
<tizen:application id="XQKp7NYwyM.SimpleSAPConsumer" package="XQKp7NYwyM" required_version="2.3.1"/>
to
<tizen:application id="XQKp7NYwyM.SimpleSAPConsumer" package="XQKp7NYwyM" required_version="2.2"/>
my application was deployed.
I created a certificate to build a signed wgt package.
I also created an android provider application according to the tutorial.
Added new certificate and created a signed apk.
I copied the apk to the Samsung Galaxy S3 phone and tried to install it.
Installation ended without any problem.
However, after some seconds or when I try to initialize the communication from the watch I get the "Unknown sources" information from Gear Manager and my app is being deleted.
I already checked "Allow unknown sources" in the android, Gear Manager and allowed USB debugging on the smartwatch (because this is my first question here I am not allowed to post more than 2 links, so I had to give one link with all screenshots there, sorry).
Why my application is being deleted and what should I do to have it working correctly.
Tizen App - Consumer
Build using Tizen Studio 1.1.0.
config.xml
<?xml version="1.0" encoding="UTF-8"?>
<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/SimpleSAPConsumer" version="1.0.0" viewmodes="maximized">
<tizen:application id="XQKp7NYwyM.SimpleSAPConsumer" package="XQKp7NYwyM" required_version="2.2"/>
<content src="index.html"/>
<feature name="http://tizen.org/feature/screen.size.all"/>
<icon src="icon.png"/>
<tizen:metadata key="AccessoryServiceLocation" value="res/xml/accessoryservices.xml"/>
<name>SimpleSAPConsumer</name>
<tizen:privilege name="http://developer.samsung.com/privilege/accessoryprotocol"/>
<tizen:profile name="wearable"/>
</widget>
accessoryservices.xml
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<application name="HelloAccessoryConsumers">
<serviceProfile role="consumer" name="sapsample" version="1.0" id="/sample/hello">
<supportedTransports>
<transport type="TRANSPORT_BT"/>
<transport type="TRANSPORT_WIFI"/>
</supportedTransports>
<serviceChannel id="123" reliability="enable" priority="low" dataRate="low"> </serviceChannel>
</serviceProfile>
</application>
</resources>
I can provide rest of the Tizen code (main.js, index.html) if it is needed. Right now I do not think that this has any value to the problem I am facing.
Android App - Provider
Build using Android Studio 2.2.3
Structure:
app
->assets
-->SimpleSapConsumer.wgt
->libs
-->accessory-v2.5.0.jar
-->sdk-1.0.0.jar
->src
-->main
--->java
---->com.sap.baks.sapapp.service
----->SapServiceProvider.java
--->res
---->xml
----->sapservice.xml
---->AndroidManifest.xml
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sap.baks.sapapp">
<uses-sdk
android:minSdkVersion="18"
android:targetSdkVersion="25" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="com.samsung.accessory.permission.ACCESSORY_FRAMEWORK"/>
<uses-permission android:name="com.samsung.wmanager.APP"/>
<uses-permission android:name="com.samsung.wmanager.ENABLE_NOTIFICATION"/>
<application
android:allowBackup="true"
android:icon="#mipmap/ic_launcher"
android:label="#string/app_name"
android:supportsRtl="true"
android:theme="#style/AppTheme">
<service android:name=".service.SAPServiceProvider">
</service>
<receiver android:name="com.samsung.android.sdk.accessory.RegisterUponInstallReceiver" >
<intent-filter>
<action android:name="com.samsung.accessory.action.REGISTER_AGENT" />
</intent-filter>
</receiver>
<receiver android:name="com.samsung.android.sdk.accessory.ServiceConnectionIndicationBroadcastReceiver" >
<intent-filter>
<action android:name="com.samsung.accessory.action.SERVICE_CONNECTION_REQUESTED" />
</intent-filter>
</receiver>
<meta-data
android:name="AccessoryServicesLocation"
android:value="/res/xml/sapservices.xml" />
<meta-data
android:name="GearAppType"
android:value="wgt" />
</application>
</manifest>
sapservice.xml
<resources>
<application name="SAPapp">
<serviceProfile
id="/system/sapsample"
name="sapsample"
role="provider"
serviceImpl="com.sap.baks.sapapp.service.SAPServiceProvider"
version="1.0"
serviceLimit="ANY"
serviceTimeout="10">
<supportedTransports>
<transport type="TRANSPORT_BT"/>
<transport type="TRANSPORT_WIFI" />
</supportedTransports>
<serviceChannel
id="123"
dataRate="low"
priority="low"
reliability="enable"/>
</serviceProfile>
</application>
</resources>
sapserviceprovider.java
I put it together with screenshots because it is quite long.
******** EDIT **********
After trying to install sample applications as #Iqbal advised I had the following results:
Tizen
I was not able to install application on my watch until I changed the API to 2.2. If the API was greater I have seen the following error:
[Initializing the launch environment...]
RDS: On
Target information: SM-R380
Application information: Id(VbsgE6bms2.HelloAccessoryConsumer), Package Name(VbsgE6bms2), Project Name(HelloAccessoryConsumer)
[Transferring the package...]
Transferred the package: wgt stream -> /opt/usr/apps/tmp/HelloAccessoryConsumer.wgt
[Installing the package...]
path is /opt/usr/apps/tmp/HelloAccessoryConsumer.wgt
start process (install)
....
error : 61
end process (fail)
processing result : FATAL_ERROR [61] failed
spend time for pkgcmd is [1537]ms
cmd_ret:61
An exception occurred
(Installing the package... > Fail)
An exception occurred
Unexpected stop progress...
(8.239 sec)
Summary: I have installed the application with API 2.2 and no other changes done.
Android
Using the sample application without changing anything I was able to run it and connect with the smartwatch! Yupi :) !
But I needed to know why the code I used for the first time was wrong, even if I've got it from Samsung tutorial and website.
I have found that the application is being uninstalled only if I have these lines in AndroidManifest.xml
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="com.samsung.accessory.permission.ACCESSORY_FRAMEWORK"/>
<uses-permission android:name="com.samsung.wmanager.APP"/>
<uses-permission android:name="com.samsung.wmanager.ENABLE_NOTIFICATION"/>
If I replaced the lines above with the lines below
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="com.samsung.accessory.permission.ACCESSORY_FRAMEWORK" />
<uses-permission android:name="com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY" />
<uses-permission android:name="com.samsung.WATCH_APP_TYPE.Companion" />
<uses-permission android:name="com.samsung.wmanager.ENABLE_NOTIFICATION" />
everything was OK.
Can someone explain me why it is so?
******** EDIT 2 **********
For those who will search for the answer to the question from previous edit.
I have found it here
Long story short:
<uses-permission android:name="com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY" />
is the line that has to present - otherwise the app will be deleted from an android device. I have not found this in any documentation to be honest.
Moreover,
<uses-permission android:name="com.samsung.WATCH_APP_TYPE.Companion" />
defines that the smartwatch application will be installed separetly from an android application.
After changing Companion to Integrated one tells that a smartwatch application is intergrated and will be installed with an android provider app.
Follow
Programming guide .
API Reference.
Download the sample app from SAMPLE section and make sure that this sample app is running on your Gear 2 and Android.
i have written an android app with xamarin.android in visual studio and compiled a release build for android 4.1 and higher. testing directly with my devices works without problems.
after building an apk and uploading it in the play store for a beta test, it says: "app not compatible with your devices". i am pretty sure, that my test devices are not the problem. what could it be??
here is my manifest file:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="xxx" android:versionCode="1" android:versionName="1.1" android:installLocation="auto">
<uses-sdk android:minSdkVersion="14" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application android:label="alone" android:icon="#drawable/Icon"></application>
</manifest>
on developer interface it says 10106 supported devices:
any ideas? thanks for your help...
best regards from germany,
steven
I dont use xamarin , but using studio if your gradle hava a different min sdk it will overwrite whatever os on you manifest , check your gradle file .
Let's say I have a server app that declares a custom permission called com.testpackage.mypermission, which is needed to start ServerActivity
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.testpackage.myserver"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<permission android:name="com.testpackage.mypermission" android:label="my_permission" android:protectionLevel="signature"></permission>
<application
android:icon="#drawable/ic_launcher"
android:label="#string/app_name" >
<activity
android:permission="com.testpackage.mypermission"
android:name=".ServerActivity"
android:label="#string/app_name" >
</activity>
</application>
</manifest>
Then I have a client app that request com.testpackage.mypermission in its Manifest:
<uses-permission android:name="com.testpackage.mypermission" />
I know that if the 2 apps are signed with different certificates, client app won't be able to start com.testpackage.myserver.ServerActivity because of protectionLevel=signature.
My question is:
If server app is already installed, and then I want to install
client app, are their signatures checked at that moment? Or is it only checked at run time when you do startActivity(ServerActivity) in client app?
From my experience the answer to Q.1 seems to be runtime only. This confuses me, because standard system permissions (eg. android.permission.CAMERA) are checked at install time. So are custom permission and standard permission treated differently?
Thanks
I have an app on Google Play. Users with an Asus Transformer can't find the app for some reason. My manifest is really simple:
<manifest
package="com.me.test"
android:versionCode="1"
android:versionName="1" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.INTERNET" />
<application
... >
<activity>
...
</activity>
</application>
</manifest>
Do I need to explicitly declare for it to consider the app "compatible"? The Play store lists over 4k devices as compatible with my app, and all the asus tablet models appear on my end as "compatible".
Thanks
In one of my apps I have no screenshots for 7" or 10" tablets in Google Developer Console. I also have not declared <supports-screens> for any size, in my manifest. I have "Supported devices 6250" and "Excluded devices 0". I have a fairly standard app with a manifest similar to yours:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="my.app"
android:installLocation="auto"
android:versionCode="1234"
android:versionName="1234" >
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:icon="#drawable/ic_launcher"
android:label="#string/app_name" >
<activity
... >
</activity>
...
</application>
</manifest>
In optimization tips for the app under Google Developer Console I have the following points under "Design your app for tablets":
Your Production APK needs to meet the following criteria:
The minimum Android version and target Android version need to support tablets (check targetSdkVersion and minSdkVersion). Learn more
Your APK should support common tablet screen sizes (LARGE and XLARGE). Learn more
Upload tablet screenshots: Upload at least one screenshot for 7-inch and 10-inch tablets to the Store Listing. Learn more
I can however confirm that my app DOES appear in Google Play for a 10" tablet running 4.2 and another 10" tablet running 4.4, without the <supports-screens> tag. The difference I see in our manifests is the minSdkVersion and targetSdkVersion. It may be that higher values of this does in fact require those options to be set as initial support for tablet was added in API level 11. If not, I would suspect there to be some other aspect of your app that makes it ineligable for Asus Transformer.