Android 中的离子 5/电容器 ERR_CLEARTEXT_NOT_PERMITTED
Posted
技术标签:
【中文标题】Android 中的离子 5/电容器 ERR_CLEARTEXT_NOT_PERMITTED【英文标题】:Ionic 5/Capacitor ERR_CLEARTEXT_NOT_PERMITTED in Android 【发布时间】:2020-07-09 10:17:48 【问题描述】:我正在使用 Capacitor 来构建 Ionic 应用程序。这些是为了在 android Studio 中打开 android 应用而运行的以下命令。
npx cap add android
ionic build
npx cap copy
npx cap open android
在 Android Studio 中,我运行构建并单击运行,之后我在设备中看到错误 net::ERR_CLEARTEXT_NOT_PERMITTED
。我看到各种帖子都有相同的错误,但那些都是Cordova
build。就我而言,我没有使用 Cordova 来准备 Android 应用程序。
以下是我的 Ionic 应用程序的一些摘录。
capacitor.config.json
file
"appId": "com.abc",
"appName": "abc",
"bundledWebRuntime": false,
"npmClient": "npm",
"webDir": "www",
"cordova":
"preferences":
"ScrollEnabled": "false",
"android-minSdkVersion": "19",
"BackupWebStorage": "none",
"SplashMaintainAspectRatio": "true",
"FadeSplashScreenDuration": "0",
"SplashShowOnlyFirstTime": "false",
"SplashScreen": "none",
"SplashScreenDelay": "0"
,
"server":
"url": "http://192.168.1.208:8100"
我在 Android Studio 的 LogCat 中也看到了这个错误
W/cr_AwContents: Application attempted to call on a destroyed WebView
java.lang.Throwable
at org.chromium.android_webview.AwContents.a(PG:127)
at org.chromium.android_webview.AwContents.a(PG:209)
at com.android.webview.chromium.WebViewChromium.evaluatejavascript(PG:8)
at android.webkit.WebView.evaluateJavascript(WebView.java:1113)
at com.getcapacitor.cordova.MockCordovaWebViewImpl$1.run(MockCordovaWebViewImpl.java:203)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6923)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:870)
【问题讨论】:
【参考方案1】:在application
元素中添加这个AndroidManifest.xml
<application
android:usesCleartextTraffic="true"
【讨论】:
这对我不起作用。一旦我添加了这个语句,它就会在设备中给出ERR_CONNECTION_REFUSED
错误。
我认为这是正确的做法,因为它符合电容器的一次编码,到处配置的理念
我被告知要来这里为我的问题 (***.com/questions/67602933/…) 找到解决方案,但它也没有帮助我。
谢谢。有没有办法只为本地开发案例启用此功能?【参考方案2】:
当您在 Capacitor 配置中指定 server
时,应将 server.cleartext
设置为 true
以防止发生此问题。示例:
"appId": "com.abc",
"appName": "abc",
"npmClient": "npm",
"server":
"url": "http://192.168.1.208:8100",
"cleartext": true
这没有很好的记录——我发现这个配置被使用的唯一地方是https://capacitorjs.com/docs/guides/live-reload
【讨论】:
没有帮助!现在白屏需要很长时间,然后抛出ERR_CONNECTION_TIMED_OUT
【参考方案3】:
这个post 帮助我找到了解决问题的方法。
我删除了 capacitor.config.json 文件中的 server
字段以使其正常工作。
"server":
"url": "http://localhost:8100"
现在我的 capacitor.config.json 看起来像
"appId": "com.abc",
"appName": "abc",
"bundledWebRuntime": false,
"npmClient": "npm",
"webDir": "www",
"cordova":
"preferences":
"ScrollEnabled": "false",
"android-minSdkVersion": "19",
"BackupWebStorage": "none",
"SplashMaintainAspectRatio": "true",
"FadeSplashScreenDuration": "0",
"SplashShowOnlyFirstTime": "false",
"SplashScreen": "none",
"SplashScreenDelay": "0"
【讨论】:
所做的只是关闭实时重新加载,这就是您的应用开始工作的原因 我根本没有使用 livereload 来运行我的应用程序。不知何故,server
行被添加到capacitor.config.json
文件中,当我删除该字段时,我的应用程序开始在设备和模拟器中运行。我不必在 manifest.xml 中使用任何 android:usesCleartextTraffic
属性
@coderpc 是对的。发生在我身上。从一秒钟到另一秒钟,我自己没有改变,这条线也被添加了,没有任何效果了。删除它,现在一切正常。谢谢【参考方案4】:
您可以通过在 capacitor.config 文件中启用 cleartext
流量来允许 Web 视图中的流量,方法是添加以下代码
server:
cleartext: true
构建您的项目以查看更改
ionic capacitor build android
【讨论】:
表演节目,谢谢【参考方案5】:将此代码添加到capacitor.config中: 服务器: 明文:真
【讨论】:
表演节目,谢谢【参考方案6】:只需运行此命令:
ionic capacitor run android -l --ssl
【讨论】:
【参考方案7】:虽然上述解决方案可能有效,但也值得检查您的网络资产是否已正确复制到 android/app/src/main
目录,因为缺少 index.html 会引发相同的 net::ERR_CLEARTEXT_NOT_PERMITTED
错误。
在某些情况下,例如当cap sync
无法删除之前的assets目录时,文件没有被正确复制,但是进程没有错误退出。
【讨论】:
【参考方案8】:这对我有用: https://www.basezap.com/fix-leartext-error-for-websites/
在 app/manifests/AndroidManifest.xml 编辑应用标签添加 android:usesCleartextTraffic="true" 属性
【讨论】:
【参考方案9】:进入capacitor.config.json
并添加cleartext: true
属性:
"server":
"cleartext": true
然后,运行npx cap copy
,启动服务器,重新编译并再次从您的IDE(Xcode/AndroidStudio)运行项目。
【讨论】:
以上是关于Android 中的离子 5/电容器 ERR_CLEARTEXT_NOT_PERMITTED的主要内容,如果未能解决你的问题,请参考以下文章
离子/电容器 - PushNotiifcations - Android - “通知” + “数据” 消息
(离子/电容器)-> 没有在 Android 设备上构建的 TypeScript 源映射
离子电容器构建找不到符号 android.support.v4.app.ActivityCompat