Search code examples
flutterapkplaynamazon-marketplace

Why is my Flutter application apk not compatible with anything thus preventing Amazon Mobile Marketplace submission?


I have a little game application Deal-O-Round in the Google Play Store and I submitted the same APK about 7 years ago (July 6, 2014 https://smile.amazon.com/Csaba-Toth-Deal-O-Round/dp/B00LK8VBLS/) to the Amazon Mobile Marketplace as well. The 2014 version was based on Google PlayN framework which allowed a web-based demo as well besides Android and iOS platforms. A lot of time passed and last year I re-implemented the whole game in Flutter, which also allows the build of a web-based demo besides Android and iOS.

Even more recently I got an email from Amazon with the title "[ACTION REQUIRED] App update required for target API Level compliance" which nudged me to try to refresh the APK in their store again. According to the email the Fire OS 6 releases require minimum API level 25 and Fire OS 7 will require minimum API level 28. That's great news, I refreshed my Flutter project and the Gradle upgrade bumped the min SDK API level to 23. And my current target API level is 29 as seen in my build.gradle. Everything is open source BTW.

android {
    compileSdkVersion 29

...

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.dealoround.android"
        minSdkVersion 23
        targetSdkVersion 29
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }
...

I'm not sure if it matters but I have a "Test Item" (SKU12345) In-App item in an Incomplete state under my application developer console, it must have been some fooling around from 2013, but my app doesn't have any in app payment. The Flutter version also doesn't have any advertisement either, the old version had (and I hated some advertisement items).

Here comes the catch: console showing two APKs new apk compatibility matrix new apk manifest view

I understand that with min SDK 23 I'd drop Fire OS 5 support because that would require min SDK 22 (BTW I could revert back to min SDK 16 if needed). But something else is wrong. I suspect that this might not have to do anything with Flutter. I'm signing the APK with V1 and V2 methods. Maybe it's the extra permissions of GET_ACCOUNTS, USE_CREDENTIALS, or WAKE_LOCK? For reference here is the old APK:

old apk manifest view old apk compatibility matrix

Everything is fine in the Google Play store. I'm looking at https://developer.amazon.com/docs/app-submission/supported-filters-on-the-amazon-appstore.html and I don't see indication that I couldn't use GET_ACCOUNTS, USE_CREDENTIALS, or WAKE_LOCK.


Solution

  • I went back to the page I took the screenshot from. On the first ("Amazon Fire Tablets and Phones") and the last ("Non-Amazon Devices") tab all the little question marks show a "Targeted by another APK in the current version." hint. I'll need to research that more because it sounds nonsensical. The "Amazon Fire TV" tab's hints show some minSdkVersion (for very old devices) and also "android.hardware.touchscreen" capability hint. My game needs touch screen, so that's not surprising and the old APK wasn't supporting those either.

    Reading more about the Targeted by another APK in the current version. hint I came across https://developer.amazon.com/docs/app-submission/publish-app-upload-apk-files.html#add_multiple_apks "With the second APK, you can select support for devices not already selected by the first APK.". I'm not sure why the store is not able to serve automatically the more recent APK and why I have to manually toggle things, but well, that's what I'll do.

    1. Starting edit: enter image description here
    2. Turning off devices for the old APK enter image description here
    3. Turing off on the other tab for the old APK: enter image description here
    4. Editing and turning on devices for the newer APK. Maybe this is why there's this weird thing going on, I have to decrease minSdk back from 23 to 22 to have a better coverage: enter image description here

    So the GET_ACCOUTNS or USE_CREDENTIALS is not a problem supposedly (so far). If the above doesn't help to you then also check out https://developer.amazon.com/docs/app-submission/troubleshooting-android-manifest-and-device-targeting.html