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

APK无法加载API数据求助:模拟器正常但安装包无内容

Flutter APK无法加载API数据问题排查方案

问题描述

我的Flutter应用在Android模拟器中能正常加载所有API数据,但打包成APK后完全无法加载API数据。已经在debug、main、profile三个Android Manifest文件中添加了INTERNET权限,问题仍未解决,求可行的解决办法。

提供的Android Manifest文件

debug AndroidManifest 文件

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.digitaldisplay">
    <!-- The INTERNET permission is required for development. Specifically,
         the Flutter tool needs it to communicate with the running application
         to allow setting breakpoints, to provide hot reload, etc.
    -->
    <uses-permission android:name="android.permission.INTERNET"/>
</manifest>

main AndroidManifest 文件

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.digitaldisplay">
    <uses-permission android:name="android.permission.INTERNET"/>
   <application
        android:label="digitaldisplay"
        android:name="${applicationName}"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <!-- Specifies an Android theme to apply to this Activity as soon as
                 the Android process has started. This theme is visible to the user
                 while the Flutter UI initializes. After that, this theme continues
                 to determine the Window background behind the Flutter UI. -->
            <meta-data
              android:name="io.flutter.embedding.android.NormalTheme"
              android:resource="@style/NormalTheme"
              />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <!-- Don't delete the meta-data below.
             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
    </application>
</manifest>

profile AndroidManifest 文件

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.digitaldisplay">
    <!-- The INTERNET permission is required for development. Specifically,
         the Flutter tool needs it to communicate with the running application
         to allow setting breakpoints, to provide hot reload, etc.
    -->
    <uses-permission android:name="android.permission.INTERNET"/>
</manifest>

解决办法

  • 处理明文网络请求限制:Android 9及以上版本默认禁止HTTP明文请求,模拟器调试时会自动绕过该限制,但正式APK会拦截。解决方式二选一:

    • 将API地址切换为HTTPS协议;
    • 在main/AndroidManifest.xml的<application>标签内添加属性:android:usesCleartextTraffic="true"。
  • 检查代码混淆规则:如果开启了ProGuard/R8代码混淆,可能误删了网络请求相关的类或方法。打开android/app/proguard-rules.pro,添加对应规则(以Retrofit为例,根据你使用的网络库调整):

    # 保留网络请求核心类
    -keep class retrofit2.** { *; }
    -keepclasseswithmembers class * {
        @retrofit2.http.* <methods>;
    }
    # 保留自定义网络相关类
    -keep class com.example.digitaldisplay.network.** { *; }
    
  • 验证APK权限是否生效:用Android Studio的APK Analyzer打开生成的APK,查看合并后的AndroidManifest.xml是否包含<uses-permission android:name="android.permission.INTERNET"/>,避免打包时出现权限合并错误。

  • 排查API服务器限制:确认API服务器是否设置了IP白名单,真机的网络IP可能不在允许范围内,导致请求被拒绝。

  • 添加错误日志定位问题:在应用中添加网络请求的错误日志打印,比如捕获请求的状态码、异常信息,安装到真机后通过adb logcat命令查看具体报错,精准定位问题。

内容的提问来源于stack exchange,提问作者Faiz Ahamed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:35:24