为什么升级到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>