My ADF Mobile app is published to Google Play, but it says the app is not compatible with tablets, for the following reasons:
I fixed this by going to Application Properties > Deployment > Android profile > Edit > Android Options > change Target SDK API Level from 9 to 14.
Note to ADF Mobile team: I recommend that you change the default Target SDK API Level from 9 to a higher level (Google recommends 14 today).
I understand the problem, but I need some help finding a good solution.
The problem is, when ADF Mobile deploys to package, it creates an AndroidManifest.xml file, and since my app uses SMS, it necessarily adds a <permission> element for telephony. In general, that permission will "imply" that telephony is a "hardware feature requirement" unless we also add a corresponding <uses-feature> element with android:required="false". However, ADF Mobile is not putting the <uses-feature> in the AndroidManifest.xml.
Does anyone know a good solution for this? (I looked for a way to configure this in ADF Mobile and in the docs, but didn't find anything. And I can't edit the AndroidManifest.xml manually because ADF Mobile creates it during the middle of the deployment process.)
I haven't started troubleshooting this in detail yet, but I'm curious how the Google Play Store determines this, exactly?
Anyway, if anyone can help me with #2, I'd be grateful. Thanks!
Edit: Changed title of this message, because I believe there is a more serious issue going on. Will reply with more info soon.
I created a brand new app, and when I try to upload to Google Play Store, issue #2 above still occurs, which prevents tablets from installing the app!
(I used JDeveloper 22.214.171.124, created a simple ADF Mobile app, with just 1 feature and 1 AMX page with just a header and an outputText, created a valid Release-mode deployment and uploaded to Google Play Store. I didn't explicitly add anything that uses telephony/SMS.)
Again, according to Google's documentation, the solution is to add the following to the AndroidManifest.xml:
<uses-feature android:name="android.hardware.telephony" android:required="false" />
However, ADF Mobile controls the creation of this file, and doesn't add that element, and doesn't seem to provide developers any (easy) options to do so. (Seems like the only solution now is to somehow take control over the details of the deployment process? Does the "ojdeploy" tool provide that kind of control?)
Hi, Patrick, recently Google Play made a number of changes, so that it is much more strict in terms of Android support. We have successfully applied some workarounds and figured out the combination that appears to work for Google Play. Here are the details based on your questions:
(1) The API level should not matter as long as it is 9 or above - 9 is the current default. There is nothing specific in ADF Mobile framework that requires higher level APIs. However, if you are interested to restrict your app to 4.x devices, then you can set the minimum and target API levels accordingly to enforce that.
(2) By default, ADF Mobile declares all the device permissions that may potentially be required by the framework. Therefore, for example, even if the app does not access camera, the AndroidManifest.xml file will still contain references to camera permissions. Ability to selectively choose the correct hardware permissions is planned for the next release of ADF Mobile. In the meantime, you can modify the AndroidManifest.xml file template in the ADF Mobile extension as the workaround.
(3) Google Play uses the "Supports Screen" element in the AndroidManifest.xml file to determine what devices/form factors are supported. Summary of the supported form factors and densities are described here: Supporting Multiple Screens | Android Developers. ADF Mobile supports different density display already. As for screen size, you would need to add the "Supports Screen" element in the manifest xml file template for the screen size you want to support. For example, if you want to add to support all devices:
The Android site would give you definitions of what these different sizes mean.
Lastly here are the instructions on modifying the AndroidManifest.xml template:
- Navigate to file <JDev Install>/JDeveloper/JDev/Extensions/oracle.adf.mobile/Android/Oracle_ADFmf_Framework.zip
- Make a backup copy of the zip file
- Unzip the file, which would extract all files into a "framework" directory
- Navigate to framework/template/AndroidManifest.template.xml file
- Use a text editor to modify the device permissions, as well as adding the supports screen element as referenced above.
- Zip up the framework directory and name zip file as Oracle_ADFmf_Framework.zip, replacing the old one. Please make sure the zip file has the exact same directory structure as before.
- In JDeveloper, before deploying the application again, please do a "Clean All" to clean out all old deployment artifacts.
- Deploy the app - the app should now be visible for tablets, as well as has the appropriate permissions.
- Upload the app to Google Play - no additional actions are needed in Google Play around supported form factors and device permissions.
Now Android deployment process does not do any extra validation for what device permissions are actually needed, so it's up to you to ensure these are set correctly.
I will also cross post this to the ADF Mobile team blog.
I have an issue in my application. Its not opening in Samsung Galaxy Tab3. Its crashing after the splash screen. and generated one text file in the root folder,
in the text file the content is,
"No properties file. Taking properties from ClassLoader resources
Opening "logging.properties" also failed
java.io.IOException: BufferedInputStream is closed"
I have tried to create one simple amx blank page as a test application, its also crashing in Samsung Galaxy Tab3.
Can you please guid me???