web-dev-qa-db-ja.com

Cordova Android 8?

Cordova Android 8. にアップグレードした後、net::ERR_CLEARTEXT_NOT_PERMITTEDに接続しようとしたときのエラーhttp://ターゲット。

なぜですか、どうすれば解決できますか?

95
Der Hochstapler

Cordova AndroidプラットフォームのデフォルトのAPIレベルがアップグレードされました。 Android 9デバイスでは、デフォルトでクリアテキスト通信が 無効になっています

再びクリアテキスト通信を許可するには、applicationタグのAndroid:usesCleartextTraffictrueに設定します。

<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を受け取ります。これは、次のように、同じconfig.xmlwidgetタグに追加する必要があることを示しています。

<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">
167
Der Hochstapler

Config.xmlには2つの修正点があります。そのため、正しい答えは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のエラーが回避された場合:バインドされていないプレフィックス。表示されます

37
zardilior

ここのクリアテキストは、暗号化されていない情報を表します。 Android 9なので、アプリがHTTPS APIを呼び出して、前夜が落ちないようにすることをお勧めします。

ただし、HTTP APIを呼び出す必要がある場合は、次を実行できます。

プラットフォーム:Ionic 4

次の名前のファイルを作成します:network_security_config.xml under project-root/resources/Android/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...

これで動作するはずです。

26
Ashutosh

問題を解決するために、他のオプションがあります。ファイルresources/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が必要ですが、ドメインがある場合。ドメインを追加するだけです。

20
Edvan Souza

最初の<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">
12
Mark McCorkle

今日私はこの問題にぶつかりましたが、Apache CordovaアプリケーションでAndroid 9+でクリアテキストトラフィックを手動で許可しようとする手間を省く、本当に気の利いたプラグインを見つけました。 plugin-cleartext、およびプラグインはすべての舞台裏を処理する必要がありますAndroid stuff。

$ cordova plugin add cordova-plugin-cleartext
$ cordova prepare
$ cordova run Android
10
topherPedersen

数日間の闘争の後、これは私にとってはうまくいきます。あなたにとってもうまくいくことを願っています。

これを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>

enter image description here

enter image description here

9
Sushil

以下は私のために働いた解決策です。更新したファイルは次のとおりです。

  1. config.xml(フルパス:/config.xml)
  2. network_security_config.xml(フルパス:/resources/Android/xml/network_security_config.xml)

対応するファイルの変更は次のとおりです。

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

このファイルでは、プロジェクト要件に従って、メインドメインとサブドメインの2つの<domain>タグを<domain-config>タグ内に追加しました。

<?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に感謝します。

それが役に立てば幸い。

5
Zaki Mohammed

追加する必要があります

<base-config cleartextTrafficPermitted="true">
    <trust-anchors>
        <certificates src="system" />
    </trust-anchors>
</base-config>

resources/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>
5
mustafa mohamed

古いionic cli(4.2)は私の場合問題を引き起こしていました。5に更新すると問題が解決します

2
hugo blanc

@Der Hochstaplerはソリューションに感謝します。
しかしIONIC 4プロジェクトのカスタマイズconfig.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のPlatformタグで、以下のいくつかの行をカスタマイズします。
add sesCleartextTraffic = true after networkSecurityConfigおよびresource-fileタグ

 <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>
0
yash

cordova-custom-config プラグインでAndroid設定を管理します。この場合、解決策は新しい custom-preferenceconfig.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 configuration。)に適用されるかどうかはわかりません。

0
joeytwiddle

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
0
Karthik Sankar

NPMおよびCordovaコマンドに問題があるレガシー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>
0
Pradeepta

IM IONIC 5.4.13、cordova 9.0.0([email protected]

私は情報を繰り返しているかもしれませんが、私にとっては、いくつかのプラグインを追加した後に問題が現れ始めました(まだわかりません)。上記のすべての組み合わせを試しましたが、何も機能しませんでした。以下を追加した後にのみ機能し始めました:

   <base-config cleartextTrafficPermitted="true">
       <trust-anchors>
           <certificates src="system" />
       </trust-anchors>
   </base-config>

プロジェクトのファイルに

resources/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>

ありがとうございます。

0
Rajendra