为什么升级到Cordova Android 8后我会看到net::ERR\u CLEARTEXT\u不允许的错误?
升级到后,我看到尝试连接到为什么升级到Cordova Android 8后我会看到net::ERR\u CLEARTEXT\u不允许的错误?,android,cordova,Android,Cordova,升级到后,我看到尝试连接到http://目标时出现net::ERR\u CLEARTEXT\u NOT \u允许的错误 这是为什么?我如何解决这个问题?Cordova Android平台的默认API级别已经升级。在安卓9设备上,现在可以进行明文通信 要再次允许明文通信,请将应用程序上的android:usesCleartextTraffic标记设置为true: 如注释中所述,如果您以前没有定义androidXML名称空间,则在构建过程中会收到一个错误:unbound prefix。这表示您需
http://
目标时出现net::ERR\u CLEARTEXT\u NOT \u允许的
错误
这是为什么?我如何解决这个问题?Cordova Android平台的默认API级别已经升级。在安卓9设备上,现在可以进行明文通信 要再次允许明文通信,请将
应用程序上的android:usesCleartextTraffic
标记设置为true
:
如注释中所述,如果您以前没有定义android
XML名称空间,则在构建过程中会收到一个错误:unbound prefix
。这表示您需要将其添加到同一config.xml
中的小部件
标记中,如下所示:
在opening标记中添加以下属性对我来说很有效。在Android 9仿真器上正确地重新加载Simple和livexmlns:android=”http://schemas.android.com/apk/res/android“
config.xml中有两件事需要更正
因此,正确的答案应该是添加xmls:android:
<widget id="com.my.awesomeapp" version="1.0.0"
xmlns="http://www.w3.org/ns/widgets"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:cdv="http://cordova.apache.org/ns/1.0">
加上编辑配置以允许:
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
如果避免了步骤1,错误:未绑定前缀。将出现以解决问题,还有其他选项。
在文件resources/android/xml/network\u security\u config.xml中。插入:
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain>localhost</domain>
<domain includeSubdomains="true">192.168.7.213:8733</domain>
</domain-config>
</network-security-config>
本地服务器
192.168.7.213:8733
在我的情况下,我使用IP地址,那么基本配置是必要的,但如果你有一个域。只需添加域。旧的ionic cli(4.2)导致了问题。在我的情况下,更新5解决问题。这里的明文表示未加密的信息。自Android 9以来,建议应用程序调用HTTPS API,以确保没有eves掉落
但是,如果我们仍然需要调用HTTP API,我们可以执行以下操作:
平台:爱奥尼亚4
在project root/resources/android/xml下创建一个名为:network\u security\u config.xml的文件
<platform name="android">
...
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
<application android:networkSecurityConfig="@xml/network_security_config" />
</edit-config>
<resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
...
</platform>
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
添加以下行:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain>ip-or-domain-name</domain>
</domain-config>
</network-security-config>
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
<application android:usesCleartextTraffic="true" />
<application android:networkSecurityConfig="@xml/network_security_config" />
</edit-config>
... other statements...
ip或域名
现在在项目根目录/config.xml中,更新以下行:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain>ip-or-domain-name</domain>
</domain-config>
</network-security-config>
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
<application android:usesCleartextTraffic="true" />
<application android:networkSecurityConfig="@xml/network_security_config" />
</edit-config>
... other statements...
... 其他声明。。。
现在应该可以使用了。您应该添加
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
到
resources/android/xml/network\u security\u config.xml
像这样
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
</domain-config> </network-security-config>
本地服务器
以下是对我有效的解决方案。我更新的文件如下:
config.xml(完整路径:/config.xml)
network\u security\u config.xml(完整路径:/resources/android/xml/network\u security\u config.xml)
相应文件中的更改如下:
1。config.xml
<platform name="android">
...
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
<application android:networkSecurityConfig="@xml/network_security_config" />
</edit-config>
<resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
...
</platform>
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
我在config.xml文件的
标记中添加了
标记
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
<application android:usesCleartextTraffic="true" />
<application android:networkSecurityConfig="@xml/network_security_config" />
</edit-config>
...
<platform name="android">
...
2。网络安全配置xml
<platform name="android">
...
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
<application android:networkSecurityConfig="@xml/network_security_config" />
</edit-config>
<resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
...
</platform>
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
在这个文件中,我根据我的项目要求,在
标记中添加了2个
标记、主域和子域
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">mywebsite.in</domain>
<domain includeSubdomains="true">api.mywebsite.in</domain>
</domain-config>
</network-security-config>
我的网站
api.mywebsite.in
感谢@Ashutosh提供的帮助
希望能有所帮助。经过几天的努力,这对我很有效,我希望这对你也很有效
将此添加到CONFIG.XML,即代码的顶部
<access origin="*" />
<allow-navigation href="*" />
我今天自己也遇到了这个问题,发现了一个非常漂亮的插件,它可以帮你省去在Android 9+中为你的Apache Cordova应用程序手动允许明文通信的麻烦。只需安装cordova插件cleartext,该插件就可以为您处理所有Android幕后工作
$ cordova plugin add cordova-plugin-cleartext
$ cordova prepare
$ cordova run android
我们正在使用插件来管理我们的Android配置。在本例中,解决方案是在我们的config.xml
中添加一个新的:
<platform name="android">
<preference name="orientation" value="portrait" />
<!-- ... other settings ... -->
<!-- Allow http connections (by default Android only allows https) -->
<!-- See: https://stackoverflow.com/questions/54752716/ -->
<custom-preference
name="android-manifest/application/@android:usesCleartextTraffic"
value="true" />
</platform>
有人知道如何只为开发构建这样做吗?我很高兴发布版本离开此设置false
(我看到iOS配置为此提供了buildType=“debug”
,但我不确定这是否适用于Android配置。)@Der Hochstapler感谢您的解决方案。
但是在爱奥尼亚4中,projectconfig.xml中的一些定制对我来说是可行的
在小部件标记中添加一行
<widget id="com.my.awesomeapp" version="1.0.0"
xmlns="http://www.w3.org/ns/widgets"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:cdv="http://cordova.apache.org/ns/1.0">
在此之后,在android的平台标签中自定义一些行,检查下面的
在网络安全配置和资源文件标记之后添加usesCleartextTraffic=true
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
<application android:networkSecurityConfig="@xml/network_security_config" />
</edit-config>
<resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
<edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
Im使用IONIC 5.4.13、cordova 9.0.0(cordova-lib@9.0.1)
我可能在重复这些信息,但对我来说,添加一些插件后问题开始出现(还不确定)。
我尝试了以上所有的组合,但没有任何效果。
它仅在添加以下内容后才开始工作:
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
在项目中归档
resources/android/xml/network\u security\u config.xml
因此,我的network_security_config.xml文件现在看起来像:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
<domain includeSubdomains="true">10.1.25.10</domain>
</domain-config>
</network-security-config>
本地服务器
10.1.25.10
感谢大家。在一个离子4电容器项目中,当我打包并部署到android手机进行测试时,我得到了这个错误。通过重新安装电容器和更新android平台解决了这个问题
npm run build --prod --release
npx cap copy
npm install --save @capacitor/core @capacitor/cli
npx cap init
npx cap update android
npx cap open android
如果您的旧Cordova框架与NPM和Cordova命令存在问题。我建议以下选项
创建文件android/res/xml/network\u security\u conf
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>