升级到Cordova Android 8.0后,net::ERR_CLEARTEXT_NOT_PERMITTED
尝试连接http://
目标时出现错误。
为什么会这样,我该如何解决呢?
升级到Cordova Android 8.0后,net::ERR_CLEARTEXT_NOT_PERMITTED
尝试连接http://
目标时出现错误。
为什么会这样,我该如何解决呢?
Answers:
Cordova Android平台中的默认API级别已升级。在Android 9设备上,默认情况下现在禁用明文通信。
要再次允许明文交流,请将标签android:usesCleartextTraffic
上的设置application
为true
:
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
如注释中所述,如果您之前未定义android
XML名称空间,则将error: unbound prefix
在构建过程中收到。这表明您需要将其添加到widget
同一标签中config.xml
,如下所示:
<widget id="you-app-id" version="1.2.3"
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">
AndroidManifest.xml
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,则错误:未绑定前缀。会出现
明文此处表示未加密的信息。从Android 9开始,建议应用程序应调用HTTPS API,以确保没有平安夜。
但是,如果仍然需要调用HTTP API,则可以执行以下操作:
平台:离子4
在project-root / resources / android / xml下创建一个名为network_security_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>
现在在project-root / 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>
... other statements...
现在应该可以工作了。
config.xml
在edit-config
标记之前添加此行<resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
。谢谢!
为了解决这个问题,还有其他选择。在文件资源/android/xml/network_security_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>
我的情况是,我使用的是IP地址,则base-config是必需的,但是如果您有域。只需添加域。
今天,我本人就遇到了这个问题,并且发现了一个非常漂亮的插件,它将为您省去尝试为Apache Cordova应用程序手动允许Android 9+中的明文通信的麻烦。只需安装cordova-plugin-cleartext,该插件即可为您处理所有幕后的Android任务。
$ cordova plugin add cordova-plugin-cleartext
$ cordova prepare
$ cordova run android
经过几天的努力,这对我有用,我希望这对您也有用。
将其添加到代码顶部的CONFIG.XML中。
<access origin="*" />
<allow-navigation href="*" />
而这个,在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>
<resource-file src="resources/android/xml/network_security_config.xml"
target="app/src/main/res/xml/network_security_config.xml" />
将以下代码添加到此文件“ resources / android / 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">YOUR DOMAIN HERE/IP</domain>
</domain-config>
</network-security-config>
trust-anchors
标签似乎是使所有其他内容正常工作的最终组件。
在开头的<widget>标记内添加以下属性对我来说很有效。简单,实时地在Android 9模拟器上正确重新加载。 xmlns:android =“ http://schemas.android.com/apk/res/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">
edit-config
(修正了unbound prefix
错误)
您应该添加
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
至
资源/android/xml/network_security_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>
以下是对我有用的解决方案。我更新的文件如下:
相应文件中的更改如下:
1. config.xml
我已经在config.xml文件的标记中添加了<application android:usesCleartextTraffic="true" />
标记<edit-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>
...
<platform name="android">
2. network_security_config.xml
在此文件中,根据我的项目要求,我<domain>
在<domain-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>
感谢@Ashutosh提供的帮助。
希望能帮助到你。
我正在使用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>
提交到项目
资源/android/xml/network_security_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>
谢谢大家。
在我的情况下,旧的离子cli(4.2)引起了问题,更新为5可解决问题
我们正在使用cordova-custom-config
插件来管理我们的Android配置。在这种情况下,解决方案是custom-preference
向我们添加新的config.xml
:
<platform name="android">
<preference name="orientation" value="portrait" />
<!-- ... other settings ... -->
<!-- Allow http connections (by default Android only allows https) -->
<!-- See: /programming/54752716/ -->
<custom-preference
name="android-manifest/application/@android:usesCleartextTraffic"
value="true" />
</platform>
有人知道如何仅针对开发版本进行此操作吗?我很乐意发布版本离开此设置false
。
(我看到了buildType="debug"
为此提供的iOS配置,但是我不确定这是否适用于Android配置。)
@Der Hochstapler感谢您的解决方案。
但是在IONIC 4中,项目config.xml中的一些自定义对我 有用
在Widget标签中添加一行
<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的Platform标记中自定义一些代码行,然后在networkSecurityConfig和resource-file标记后
添加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>
在Ionic 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_security_config.xml-
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">Your URL(ex: 127.0.0.1)</domain>
</domain-config>
</network-security-config>
AndroidManifest.xml-
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:networkSecurityConfig="@xml/network_security_config"
...>
...
</application>
</manifest>
以下解决方案为我工作-
转到将其resources/android/xml/network_security_config.xml
更改为-
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
<domain includeSubdomains="true">api.example.com(to be adjusted)</domain>
</domain-config>
</network-security-config>
只需将此行添加到platform / android / app / src / main / AndroidManifest.xml文件
<application android:hardwareAccelerated =“ true” android:icon =“ @ mipmap / ic_launcher” android:label =“ @ string / app_name” android:supportsRtl =“ true” android:usesCleartextTraffic =“ true” >
error: unbound prefix.
尝试构建Cordova应用程序时遇到错误()。解决的方法是在我的config.xml
文件的根<widget>
元素中添加属性xmlns:android="http://schemas.android.com/apk/res/android