Android Webview https 证书问题及混淆打包后不能访问

本文介绍了Android Webview在加载HTTPS资源时遇到的SslError问题及其解决办法,包括直接忽略错误和进行域名验证。此外,还讨论了混淆打包后Webview无法访问DApp的情况,分析了混淆配置可能导致的问题,并提供了解决方案。

前言

随着人们对安全意识的提高,越来越多的产品都采用HTTPS的方式提供服务。然而在我们的移动产品开发过程中,或多或少的都会去使用Webview去加载部分功能,特别是现在区块链的潮流下,为了减少开发成本,加快开发速度,我们的DApp应用大多都是采用h5进行开发。

现在购买证书的渠道很多,但我们系统内置的根证书却有限,特别是Android系统的证书就比IOS的要少,很多的应用在IOS上能够打开,但在Android却不能,然而更多的原因是因为证书的问题。

问题描述

最近公司开发了一款DApp应用,所有的功能在IOS上都没有问题,但是到了Android上面来了以后却发现用系统的Webview访问不了我们的应用,查看原因发现是DApp里面引用的一些https的资源导致;解决完https后打包正式发布,却又发现页面访问了,当时一个郁闷,在Debug模式都能正常访问,发布Release版本后却不能;经过一番的问题排查,最终找到解决问题的办法。

一、Webview Https 引起的SslError错误解决办法

这个问题相对简单,直接忽略掉SslError错误就行,处理办法如下:

调用webview.setWebViewClient()时候重写WebViewClient的onReceivedSslError方法;

override fun onReceivedSslError(view: WebView?, handler: SslErrorHandler?, error: SslError?) {
    handler!!.proceed()
}

这种解决办法是简单粗暴的方法,能够快速的解决当前的https问题,但同时存在一定的安全隐患,让一些有不法分子有机可

<think>好的,我现在要解决用户的问题:Flutter应用在Android平台上打包后输入框无法聚焦以及部分文字不显示的问题。首先,我需要分析可能的原因,并逐一排查。 输入框无法聚焦的情况,可能和发布版本的配置有关。比如,在release模式下,Flutter可能会启用一些优化,比如使用Skia的图形引擎,这可能会影响输入框的行为。另外,Proguard或R8的代码混淆可能导致某些必要的类被混淆,从而引发问题。用户提到的输入框无法聚焦,可能需要检查是否在混淆配置中排除了Flutter相关的类,或者是否启用了不兼容的优化选项。 关于文字不显示的问题,可能是字体文件未正确打包进APK,或者字体在release模式下未被正确加载。另外,如果使用了自定义字体,需要在pubspec.yaml中正确声明,并且确保路径正确。还有可能是文本渲染的问题,比如在release模式下启用了不兼容的渲染设置,比如Impeller引擎是否影响文本显示。 接下来,我需要参考用户提供的引用。引用[1]提到Android平台和构建工具的安装,特别是Android SDK版本和构建工具版本。用户可能在使用特定版本的Android SDK或构建工具时出现问题,可能需要检查是否版本不兼容。比如,使用Android 29平台和构建工具28.0.3是否有冲突?或者是否需要升级到更新的版本? 引用[2]提到预发现机制,但似乎和当前问题关联不大,可能可以暂时忽略。 根据我的经验,首先应该检查混淆配置。在release构建中,Proguard/R8可能会移除或混淆某些Flutter需要的类,导致输入框无法正常工作。因此,需要在proguard-rules.pro中添加Flutter和输入框相关的保留规则。例如,保留FlutterActivity、FlutterView等类。 其次,检查是否启用了不合适的优化选项。比如,在build.gradle中是否设置了正确的minifyEnabled和shrinkResources。可能需要暂时关闭这些选项,看问题是否解决,以确定是否是混淆导致的问题。 关于文字显示,需要检查字体是否正确引入。在pubspec.yaml中,字体配置是否正确,路径是否准确。另外,某些字体可能在release模式下没有被正确打包,可以尝试将字体文件放在assets/fonts目录,并在pubspec.yaml中声明。 另外,考虑是否启用了Impeller引擎。如果用户升级到Flutter 3.3+,可能默认启用了Impeller,这可能导致渲染问题。可以尝试在启动时禁用Impeller,或者在AndroidManifest.xml中添加元数据关闭它。 最后,用户可能需要清理构建缓存,重新生成APK,或者检查是否有第三方插件的问题,比如是否某些插件在release模式下有兼容性问题。 总结步骤:检查混淆配置,确保保留Flutter相关类;检查字体配置是否正确;尝试禁用Impeller;清理构建缓存;检查第三方插件。</think>### Flutter Android Release输入框无法聚焦及文字显示问题解决方案 #### 一、输入框无法聚焦问题排查 1. **检查混淆规则** 在`android/app/proguard-rules.pro`中添加Flutter框架保留规则: ```pro -keep class io.flutter.app.** { *; } -keep class io.flutter.plugin.** { *; } -keep class io.flutter.util.** { *; } -keep class androidx.lifecycle.DefaultLifecycleObserver ``` 若使用特定插件(如`webview_flutter`),需添加插件对应的保留规则[^1]。 2. **禁用代码压缩(临时测试)** 修改`android/app/build.gradle`: ```groovy buildTypes { release { minifyEnabled false // 临时关闭 shrinkResources false signingConfig signingConfigs.release } } ``` 若问题消失,则需优化混淆规则。 3. **检查Flutter引擎配置** 在`AndroidManifest.xml`中添加硬件加速支持: ```xml <application android:hardwareAccelerated="true"> ``` #### 二、文字不显示问题排查 1. **验证字体加载** 检查`pubspec.yaml`字体配置,确保路径正确且执行了`flutter pub get`: ```yaml flutter: fonts: - family: CustomFont fonts: - asset: assets/fonts/CustomFont.ttf ``` 2. **Impeller渲染引擎兼容性** 在`MainActivity.kt`中禁用Impeller(Flutter 3.3+): ```kotlin FlutterEngine(this).apply { dartEntrypointArgs = listOf("--disable-impeller") } ``` 或在`AndroidManifest.xml`添加: ```xml <meta-data android:name="io.flutter.embedding.android.EnableImpeller" android:value="false" /> ``` 3. **检查DPI适配** 确保布局使用`MediaQuery`动态尺寸而非固定数值: ```dart Text("Hello", style: TextStyle(fontSize: 16 * MediaQuery.textScaleFactorOf(context))) ``` #### 三、通用验证步骤 1. **清理构建缓存** 执行以下命令后重新构建: ```bash flutter clean rm -rf android/build ``` 2. **验证第三方插件** 通过`--no-sound-null-safety`参数运行应用,检测空安全兼容性问题: ```bash flutter run --release --no-sound-null-safety ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值