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 220.127.116.11, 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?)
... forwarding to the mobile team ...
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.
Perfect, this is exactly the information we need. And it's a very easy workaround that I've already confirmed will work (editing the AndroidManifest.template.xml).
When our app is 100% tablet-compatible I'll probably update this thread one last time.
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???