Play 商店无法检测设备兼容性

use*_*558 3 android google-play

我想通过 Google Play 商店将我的应用程序分发给尽可能多的用户,但我在更新的应用程序的兼容设备上遇到了奇怪的行为(我正在更新应用程序,保持相同的应用程序 ID;旧版本 -当前的在线生产版本 - 最后更新于 2021 年)。

我已经阅读了 Stack Overflow 上的所有相关问题以及官方 Android 文档。我正在使用最新版本的 Android Studio,构建 App Bundle 格式。

Play 控制台声明两个版本的兼容设备数量相同(大约 19k+)。

在某些设备上,新设备不兼容,但旧设备兼容并且可以安装。

以下是一些被 Play 商店检测为不兼容的设备(均未 root):

  • OnePlus Nord 采用 Qualcomm SDM765G,型号 AC2003,5G 八核,Android 12,OxygenOS Contributor,内核 4.19.157-perf+
  • EMUI HUAWEI Mate 20 Pro,型号 LYA-L09,GPU Turbo,EMUI 版本 12.0.0,处理器华为 Kirin 980,分辨率 3120x1440,“Mainline”软件更新 01-02-2023,Android 12
  • 红米Note 10 Pro、MIUI Global 14.0.2.0、Android 13 TKQ1
  • Galaxy A50,型号 SM-A505FN/DS,OneUI 3.1,Android 11,Google Play 商店于 2023 年 1 月 3 日更新,内核 4.14.113,Knox 3.7

我已经尝试过这些,但没有成功:

  • 要求用户清除Play Store应用程序和Play Services应用程序的缓存和数据
  • 要求用户更新其设备上的所有可能内容
  • 要求用户在 Play 商店中按名称搜索应用程序
  • 要求用户按照Play Console提供的“内部测试网址”作为测试人员参与内部测试->此时网页提示设备不兼容;对于其他用户,它表示他们已经加入了测试计划,但“从 Google Play 商店下载”网址会导致显示设备不兼容的应用程序页面
  • 重建并重新上传应用程序的新内部版本添加<supports-screens android:xlargeScreens="true" android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:anyDensity="true" android:resizeable="true" />

以下是 Play 商店中的消息:

在此输入图像描述

此应用程序与您的设备不兼容,因为它是为旧版本的 Android 创建的。

我的应用程序的目标是 Api 33 (Android 13),最低目标是 19 (Android 4.4)。所以,Android版本兼容就很明显了!

.apk(应用程序版本)中生成的清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    platformBuildVersionCode="29"
    platformBuildVersionName="10"
    package="com.app.my"
    android:compileSdkVersion="29"
    android:compileSdkVersionCodename="10"
    android:versionCode="24"
    android:versionName="2.1">

    <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="29" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE" />

    <application
        android:theme="@ref/0xtheme"
        android:label="@ref/0xlabel"
        android:icon="@ref/0xicon"
        android:roundIcon="@ref/0xroundIcon"
        android:supportsRtl="true"
        android:appComponentFactory="androidx.core.app.CoreComponentFactory">

        <activity
            android:name="com.app.my.MainActivity"
            android:theme="@ref/0xtheme"
            android:label="@ref/0xlabel"
            android:screenOrientation="1">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name="com.app.my.NotificationReceiver" />
        <receiver
            android:name="com.app.my.BootReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-12345" />

        <provider
            android:name="com.google.firebase.provider.FirebaseInitProvider"
            android:authorities="com.app.my.firebaseinitprovider"
            android:directBootAware="true"
            android:exported="false"
            android:initOrder="100" />
            
        <service
            android:name="com.google.firebase.components.ComponentDiscoveryService"
            android:directBootAware="true"
            android:exported="false">
            <meta-data
                android:name="com.google.firebase.components:com.google.firebase.crashlytics.CrashlyticsRegistrar"
                android:value="com.google.firebase.components.ComponentRegistrar" />
            <meta-data
                android:name="com.google.firebase.components:com.google.firebase.analytics.connector.internal.AnalyticsConnectorRegistrar"
                android:value="com.google.firebase.components.ComponentRegistrar" />
            <meta-data
                android:name="com.google.firebase.components:com.google.firebase.installations.FirebaseInstallationsRegistrar"
                android:value="com.google.firebase.components.ComponentRegistrar" />
            <meta-data
                android:name="com.google.firebase.components:com.google.firebase.dynamicloading.DynamicLoadingRegistrar"
                android:value="com.google.firebase.components.ComponentRegistrar" />
        </service>

        <service
            android:name="com.google.android.datatransport.runtime.backends.TransportBackendDiscovery"
            android:exported="false">
            <meta-data
                android:name="backend:com.google.android.datatransport.cct.CctBackendFactory"
                android:value="cct" />
        </service>

        <receiver
            android:name="com.google.android.gms.measurement.AppMeasurementReceiver"
            android:enabled="true"
            android:exported="false"/>

        <service
            android:name="com.google.android.gms.measurement.AppMeasurementService"
            android:enabled="true"
            android:exported="false" />

        <service
            android:name="com.google.android.gms.measurement.AppMeasurementJobService"
            android:permission="android.permission.BIND_JOB_SERVICE"
            android:enabled="true"
            android:exported="false" />

        <activity
            android:theme="@ref/0xtheme"
            android:name="com.google.android.gms.ads.AdActivity"
            android:exported="false"
            android:configChanges="0xfb0" />

        <provider
            android:name="com.google.android.gms.ads.MobileAdsInitProvider"
            android:exported="false"
            android:authorities="com.app.my.mobileadsinitprovider"
            android:initOrder="100" />

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@ref/0x7f0a0009" />

        <service
            android:name="com.google.android.datatransport.runtime.scheduling.jobscheduling.JobInfoSchedulerService"
            android:permission="android.permission.BIND_JOB_SERVICE"
            android:exported="false"/>
        
        <receiver
            android:name="com.google.android.datatransport.runtime.scheduling.jobscheduling.AlarmManagerSchedulerBroadcastReceiver"
            android:exported="false" />

<!-- not in the new version -->
    
    <uses-permission android:name="com.android.vending.CHECK_LICENSE" />

        <provider
            android:name="androidx.lifecycle.ProcessLifecycleOwnerInitializer"
            android:exported="false"
            android:multiprocess="true"
            android:authorities="com.app.my.lifecycle-process" />

    </application>
</manifest>
Run Code Online (Sandbox Code Playgroud)

.aab 中生成的清单(应用程序版本):

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    platformBuildVersionCode="33"
    platformBuildVersionName="13"
    package="com.app.my"
    android:compileSdkVersion="33"
    android:compileSdkVersionCodename="13"
    android:versionCode="33"
    android:versionName="3.0.3">

    <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="33" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE" />

    <application
        android:theme="@style/AppTheme"
        android:label="@string/app_name"
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:appComponentFactory="androidx.core.app.CoreComponentFactory">
        
        <activity
            android:name="com.app.my.MainActivity"
            android:theme="@style/AppTheme.NoActionBar"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name="com.app.my.NotificationReceiver" />
        <receiver
            android:name="com.app.my.BootReceiver"
            android:exported="false" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-12345" />

        <provider
            android:name="com.google.firebase.provider.FirebaseInitProvider"
            android:authorities="com.app.my.firebaseinitprovider"
            android:directBootAware="true"
            android:exported="false"
            android:initOrder="100" />
        
        <service
            android:name="com.google.firebase.components.ComponentDiscoveryService"
            android:directBootAware="true"
            android:exported="false" >
            <meta-data
                android:name="com.google.firebase.components:com.google.firebase.crashlytics.CrashlyticsRegistrar"
                android:value="com.google.firebase.components.ComponentRegistrar" />
            <meta-data
                android:name="com.google.firebase.components:com.google.firebase.analytics.connector.internal.AnalyticsConnectorRegistrar"
                android:value="com.google.firebase.components.ComponentRegistrar" />
            <meta-data
                android:name="com.google.firebase.components:com.google.firebase.installations.FirebaseInstallationsRegistrar"
                android:value="com.google.firebase.components.ComponentRegistrar" />
        </service>
        
        <service
            android:name="com.google.android.datatransport.runtime.backends.TransportBackendDiscovery"
            android:exported="false" >
            <meta-data
                android:name="backend:com.google.android.datatransport.cct.CctBackendFactory"
                android:value="cct" />
        </service>
        
        <receiver
            android:name="com.google.android.gms.measurement.AppMeasurementReceiver"
            android:enabled="true"
            android:exported="false" >
        </receiver>
        
        <service
            android:name="com.google.android.gms.measurement.AppMeasurementService"
            android:enabled="true"
            android:exported="false" />
            
        <service
            android:name="com.google.android.gms.measurement.AppMeasurementJobService"
            android:permission="android.permission.BIND_JOB_SERVICE"
            android:enabled="true"
            android:exported="false" />
        
        <activity
            android:theme="@android:style/Theme.Translucent"
            android:name="com.google.android.gms.ads.AdActivity"
            android:exported="false"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
        
        <provider
            android:name="com.google.android.gms.ads.MobileAdsInitProvider"
            android:exported="false"
            android:authorities="com.app.my.mobileadsinitprovider"
            android:initOrder="100" />
        
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
        
        <service
            android:name="com.google.android.datatransport.runtime.scheduling.jobscheduling.JobInfoSchedulerService"
            android:permission="android.permission.BIND_JOB_SERVICE"
            android:exported="false" >
        </service>
        
        <receiver
            android:name="com.google.android.datatransport.runtime.scheduling.jobscheduling.AlarmManagerSchedulerBroadcastReceiver"
            android:exported="false" />

<!-- the below aren't in the old versoin -->

    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
    <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="com.app.my.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION" />
    <uses-permission android:name="com.google.android.gms.permission.AD_ID" />
    <permission android:name="com.app.my.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION" android:protectionLevel="signature" />
    
    <queries>
        <intent>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.BROWSABLE" />

            <data android:scheme="https" />
        </intent>
        <intent>
            <action android:name="android.support.customtabs.action.CustomTabsService" />
        </intent>
    </queries>
    
        <activity
            android:name="com.app.my.SettingsActivity"
            android:configChanges="orientation|screenSize"
            android:parentActivityName="com.app.my.MainActivity" />

        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.app.my.provider"
            android:exported="false"
            android:grantUriPermissions="true"
            android:readPermission="com.ANOTHERapp.my.fileprovider.READ" >
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths" />
        </provider>

        <service
            android:name="com.google.android.gms.ads.AdService"
            android:enabled="true"
            android:exported="false" />

        <activity
            android:name="com.google.android.gms.ads.OutOfContextTestingActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
            android:exported="false" />

        <activity
            android:name="com.google.android.gms.common.api.GoogleApiActivity"
            android:exported="false"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

        <provider
            android:name="androidx.startup.InitializationProvider"
            android:authorities="com.app.my.androidx-startup"
            android:exported="false" >
            <meta-data
                android:name="androidx.emoji2.text.EmojiCompatInitializer"
                android:value="androidx.startup" />
            <meta-data
                android:name="androidx.work.WorkManagerInitializer"
                android:value="androidx.startup" />
            <meta-data
                android:name="androidx.lifecycle.ProcessLifecycleInitializer"
                android:value="androidx.startup" />
        </provider>

        <uses-library
            android:name="androidx.window.extensions"
            android:required="false" />
        <uses-library
            android:name="androidx.window.sidecar"
            android:required="false" />

        <service
            android:name="androidx.work.impl.background.systemalarm.SystemAlarmService"
            android:directBootAware="false"
            android:enabled="@bool/enable_system_alarm_service_default"
            android:exported="false" />
        <service
            android:name="androidx.work.impl.background.systemjob.SystemJobService"
            android:directBootAware="false"
            android:enabled="@bool/enable_system_job_service_default"
            android:exported="true"
            android:permission="android.permission.BIND_JOB_SERVICE" />
        <service
            android:name="androidx.work.impl.foreground.SystemForegroundService"
            android:directBootAware="false"
            android:enabled="@bool/enable_system_foreground_service_default"
            android:exported="false" />

        <receiver
            android:name="androidx.work.impl.utils.ForceStopRunnable$BroadcastReceiver"
            android:directBootAware="false"
            android:enabled="true"
            android:exported="false" />
        <receiver
            android:name="androidx.work.impl.background.systemalarm.ConstraintProxy$BatteryChargingProxy"
            android:directBootAware="false"
            android:enabled="false"
            android:exported="false" >
            <intent-filter>
                <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
                <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
            </intent-filter>
        </receiver>
        <receiver
            android:name="androidx.work.impl.background.systemalarm.ConstraintProxy$BatteryNotLowProxy"
            android:directBootAware="false"
            android:enabled="false"
            android:exported="false" >
            <intent-filter>
                <action android:name="android.intent.action.BATTERY_OKAY" />
                <action android:name="android.intent.action.BATTERY_LOW" />
            </intent-filter>
        </receiver>
        <receiver
            android:name="androidx.work.impl.background.systemalarm.ConstraintProxy$StorageNotLowProxy"
            android:directBootAware="false"
            android:enabled="false"
            android:exported="false" >
            <intent-filter>
                <action android:name="android.intent.action.DEVICE_STORAGE_LOW" />
                <action android:name="android.intent.action.DEVICE_STORAGE_OK" />
            </intent-filter>
        </receiver>
        <receiver
            android:name="androidx.work.impl.background.systemalarm.ConstraintProxy$NetworkStateProxy"
            android:directBootAware="false"
            android:enabled="false"
            android:exported="false" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>
        <receiver
            android:name="androidx.work.impl.background.systemalarm.RescheduleReceiver"
            android:directBootAware="false"
            andr

小智 6

我来自线程:应用程序是为旧版本的 Android 创建的

当内部测试 apk 的 targetSdk 高于生产版本时,Play 商店似乎有一个奇怪的错误,导致在访问内部测试时显示应用程序是为较旧的 Android 版本创建的消息。

就我们而言,按照本线程的最后一篇文章:此应用程序不适用于您的设备,因为它是为旧版本的 Android 制作的,我们已直接将新的 apk 投入生产,并且我们没有更多的问题。

我希望它对你有帮助。