Flutter InAppWebView在Android加载URL报ERR_INVALID_RESPONSE,iOS正常
Flutter InAppWebView Android端ERR_INVALID_RESPONSE问题排查
我使用flutter_inappwebview作为Flutter WebView的封装,此前主要在iOS模拟器开发应用,升级Flutter到最新稳定版后,Android模拟器测试时无法正常加载网页,报ERR_INVALID_RESPONSE错误。升级前Android和iOS均能正常运行,目前iOS仍可正常使用,HTTP请求、flutter_inappwebview的Headless Browser也能正常工作,仅InAppWebView组件失效。
设备信息
Apple M3 Pro
macOS 14.4 (23E214)
Flutter版本
Flutter 3.19.3 • channel stable • https://github.com/flutter/flutter.git
Framework • revision ba39319843 (2周前) • 2024-03-07 15:22:21 -0600
Engine • revision 2e4ba9c6fb
Tools • Dart 3.3.1 • DevTools 2.31.1
InAppWebView配置代码
InAppWebView( initialSettings: InAppWebViewSettings( useShouldInterceptRequest: true, thirdPartyCookiesEnabled: true, iframeAllowFullscreen: false, userAgent: userAgent, javaScriptCanOpenWindowsAutomatically: false, useShouldOverrideUrlLoading: true, mediaPlaybackRequiresUserGesture: true, allowsPictureInPictureMediaPlayback: false, allowsLinkPreview: false, allowsBackForwardNavigationGestures: true, ), )
pubspec.yaml相关配置
environment: sdk: '>=3.1.2 <4.0.0' dependencies: collection: ^1.17.2 flutter: sdk: flutter flutter_inappwebview: ^6.0.0 // .. and so on
AndroidManifest.xml配置
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <uses-permission android:name="android.permission.INTERNET"/> <application android:label="myapp" android:name="${applicationName}" android:usesCleartextTraffic="true" 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> <!-- Required to query activities that can process text, see: https://developer.android.com/training/package-visibility?hl=en and https://developer.android.com/reference/android/content/Intent#ACTION_PROCESS_TEXT. In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. --> <queries> <intent> <action android:name="android.intent.action.PROCESS_TEXT"/> <data android:mimeType="text/plain"/> </intent> </queries> </manifest>
android/app/build.gradle配置
plugins { id "com.android.application" id "kotlin-android" id "dev.flutter.flutter-gradle-plugin" } def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { localPropertiesFile.withReader('UTF-8') { reader -> localProperties.load(reader) } } def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' } def flutterVersionName = localProperties.getProperty('flutter.versionName') if (flutterVersionName == null) { flutterVersionName = '1.0' } android { namespace "com.example.myapp" compileSdk flutter.compileSdkVersion ndkVersion flutter.ndkVersion compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } sourceSets { main.java.srcDirs += 'src/main/kotlin' } defaultConfig { applicationId "com.example.myapp" minSdkVersion 19 targetSdkVersion 34 versionCode flutterVersionCode.toInteger() versionName flutterVersionName multiDexEnabled true } buildTypes { release { signingConfig signingConfigs.debug } } } flutter { source '../..' } dependencies {}
已尝试的解决方案
- 执行
flutter clean - 删除整个/android文件夹后重新执行
flutter create - 通过Android Studio升级助手将Android Gradle Plugin从7.4.2升级到8.2.2,但编译失败已回滚
内容的提问来源于stack exchange,提问作者Donghu Kim
相关产品推荐
相关产品推荐

