You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 14兼容性问题求助:Delphi 12.1应用启动后报错

Android 14 32位设备兼容性警告问题排查与解决

问题背景

使用Delphi 12.1开发应用,配置minSdkVersion="23"、targetSdkVersion="34",采用默认类库。客户在32位Android 14设备上启动应用进入设置界面后,弹出警告:"This app isn't compatible with the latest version of Android"。应用尚未调用地图功能,但怀疑问题与新地图系统有关,无Android 14设备测试,Google官方文档未找到对应说明。

可能原因分析

  • 32位应用适配限制:Android 14对32位应用的权限、库依赖检查更严格,部分旧版组件可能触发系统兼容性警告。
  • Google Play服务版本过时:Manifest中配置的com.google.android.gms.version="12451000"版本较旧,与Android 14的兼容性存在问题。
  • 权限声明冲突:MANAGE_EXTERNAL_STORAGE等权限在Android 14中的获取规则变更,或权限组合触发系统兼容性检测逻辑。
  • 地图组件隐性依赖:虽未主动调用地图功能,但Manifest中配置的com.google.android.geo.API_KEY及地图包查询,可能引入未适配Android 14的组件。
  • resizeableActivity配置不符合要求:android:resizeableActivity="false"不符合Android 14对多窗口适配的推荐标准,触发系统警告。

解决方案建议

  1. 更新Google Play服务版本
    将Manifest中的com.google.android.gms.version替换为Delphi 12.1适配Android 14的最新版本号(可参考Delphi官方文档或SDK管理器中的对应版本)。

  2. 优化权限声明

    • 确认MANAGE_EXTERNAL_STORAGE是否为必需权限,Android 14优先推荐使用MANAGE_MEDIA或分区存储方案,移除不必要的权限。
    • 检查权限的maxSdkVersion配置是否合理,避免权限在高版本系统中引发冲突。
  3. 调整resizeableActivity配置
    将android:resizeableActivity改为true,符合Android 14的多窗口适配要求:

    android:resizeableActivity="true"
    
  4. 排查地图组件影响
    暂时注释掉Manifest中的地图相关配置,测试警告是否消失:

    • 注释<meta-data android:name="com.google.android.geo.API_KEY" ... />
    • 注释<queries>中的地图包声明
      若警告消失,需更新地图依赖库至适配Android 14的版本。
  5. 验证32位编译配置
    确认Delphi的32位编译选项是否完全适配Android 14,检查NDK版本是否符合要求,避免使用已废弃的Native组件。

应用Manifest文件

<?xml version="1.0" encoding="utf-8"?>
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="nz.sartrack.SARTrackApp"
    android:versionCode="1009"
    android:versionName="1.019C"
    android:installLocation="preferExternal">
    <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="34" />
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
    <uses-permission android:name="android.permission.BROADCAST_STICKY" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MANAGE_MEDIA" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

    <uses-feature android:glEsVersion="0x00020000" android:required="true"/>
    <queries>
        <package android:name="com.google.android.apps.maps" />

    </queries>
    <application
        android:persistent="False"
        android:restoreAnyVersion="False"
        android:label="SARTrack"
        android:debuggable="false"
        android:largeHeap="False"
        android:icon="@drawable/ic_launcher"
        android:theme="@style/AppTheme"
        android:hardwareAccelerated="true"
        android:resizeableActivity="false"
        android:requestLegacyExternalStorage="true">
        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="nz.sartrack.SARTrackApp.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths" />
        </provider>

        <meta-data android:name="com.google.android.geo.API_KEY" android:value="XXXX" />
        <meta-data android:name="com.google.android.gms.version" android:value="12451000" />

        <uses-library android:name="org.apache.http.legacy" android:required="false" />

<service android:name="com.embarcadero.services.SARTrackService" android:exported="false" />

        <!-- Our activity is a subclass of the built-in NativeActivity framework class.
             This will take care of integrating with our NDK code. -->
        <activity
            android:name="com.embarcadero.firemonkey.FMXNativeActivity"
        android:foregroundServiceType="location"
            android:exported="true"
            android:label="SARTrack"
            android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
            android:launchMode="singleTask">
            <!-- Tell NativeActivity the name of our .so -->
            <meta-data android:name="android.app.lib_name" android:value="SARTrackApp" />

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name="com.embarcadero.rtl.notifications.NotificationAlarm" />

    </application>
</manifest>
<!-- END_INCLUDE(manifest) -->

内容的提问来源于stack exchange,提问作者Bart Kindt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 07:34:55