Cordova Android 8にアップグレードした後、net :: ERR_CLEARTEXT_NOT_PERMITTEDエラーが表示されるのはなぜですか?


120

アップグレードした後コルドバのAndroid 8.0、私は見ていますnet::ERR_CLEARTEXT_NOT_PERMITTEDに接続しようとするとエラーがhttp://ターゲット。

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

回答:


204

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">

36
error: unbound prefix.Cordovaアプリケーションをビルドしようとしたときにエラー()が発生しました。解決策は、私のconfig.xmlファイルに、ルート<widget>要素に属性を追加することでしたxmlns:android="http://schemas.android.com/apk/res/android
apiaget

@Der Hochstapler apiagetsコメントを回答に追加できますか?
マイケルB

@MichaelB誰もが回答を編集でき、そうすることを歓迎します。しかし、確かに、私はそれをします。
Der Hochstapler

1
@SteevJames変更が実際にAndroidプロジェクト構造に永続化されるように、Cordovaプロジェクトを再ビルドしましたか?AndroidManifest.xmlAndroidプロジェクトでに変更が加えられたことを確認しましたか?
Der Hochstapler

この作品ですが、私の場合、プラットフォームandroidを削除してから、それを機能させる必要があります。
kunal shaktawat

41

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が回避される場合、エラー:バインドされていないプレフィックス。表示されます


35

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

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

プラットフォーム:Ionic 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...

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


おかげで、Ionic 4でうまくいきました。ドメイン名<domain> example.com </ domain>を指定して、うまくいきました。この「developer.android.com/training/articles/security-config」からも助けを得ました
Zaki Mohammed

アプリを実行するたびに「<edit-config ..」が上書きされるのはなぜですか?
Jalle

3
これは機能しますがconfig.xmledit-configタグの前にこの行を追加する必要があります:<resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />。ありがとう!
tyn

@ZakiMohammedは、同じ問題のヘルプにも直面しているコードを共有してください!
ホセ

@jose私の答えをご覧ください
Zaki Mohammed

26

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


受け入れられたすべての解決策も必要でしたが、この答えは私が直面していた問題の鍵でした。
Peter Meadley

私のために働いた。ありがとう
Suhail Mushtaq

ありがとうございました!私もドメイン名の代わりにIPを使用しており、あなたの答えは完璧にフィットします!
早い

22

私は本日この問題に遭遇し、Apache Cordovaアプリケーションに対してAndroid 9以降でクリアテキストトラフィックを手動で許可する手間を省く本当に気の利いたプラグインを見つけました。cordova-plugin-cleartextをインストールするだけで、プラグインがAndroidの舞台裏のすべてを処理します。

$ cordova plugin add cordova-plugin-cleartext
$ cordova prepare
$ cordova run android

答えを探している人のために。構成の修正を適用するときに他のエラーに遭遇し続けましたが、これはすぐに機能しました。Thanks Topher
IvanSt

私のために働く。どうも!
iwanuschka

私のために働いていませんでした。
Eskim0

15

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

これを、コードの先頭にある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>

ここに画像の説明を入力してください

ここに画像の説明を入力してください


これに答えてもらえますか?stackoverflow.com/questions/59116787/...
pratik jaiswal

1
解決策をありがとう、私のために働いたのはそれだけです
Lud Osorio、

おかげで、それは私のために働いた唯一の解決策です。
ヘラルドサラザールサンチェス

これは私のために働いたソリューションでした。特に、trust-anchorsタグは他のすべてのものを機能させるための最後のコンポーネントであるように思われました。
リンガー

phonegabビルドを使用している場合は、ルートフォルダーにnetwork_security_configを保持し、リソースファイルsrc = "
network_security_config.xml

12

<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">

2
私はこの回答を見たときに気づきませんでしたが、これは受け入れられた回答のコードに追加されていedit-configます(unbound prefixエラーを修正します)
RishiG

@RishiGは現在、完全な正しい答えを説明する答えです
zardilior

@zardiliorはい、編集の答えをハイジャックしてくれて、おめでとう...笑
Mark McCorkle

5

追加する必要があります

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

何でこれが大切ですか?
Tomas Vancoillie

5

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

  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

このファイルでは、プロジェクト要件に従って、<domain>タグ内に2つのタグ<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に感謝します。

それが役に立てば幸い。


私の日を救ってくれてありがとう
Karnan Muthukumar、

5

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_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>

ありがとうございます。


これは既存のIonicソリューションとどう違うのですか?
Der Hochstapler

状況は異なります。人々がグーグル検索からここに来るのを思い出してください。この問題では、状況や設定が異なる可能性があります。私の場合、プロジェクトは問題なく機能し、プラットフォームの更新やデバイスの更新を行っていなくても、このエラーが発生し始めました。
Rajendra

1
おかげで、これは私にとってうまくいきました:)-時間の経過とともに古いソリューションが機能しなくなり、特に変化し続ける変化するフレームワークでは、機能するソリューションのバージョン更新を確認できるのは素晴らしいことです。
グラント

2
おかげでチームメイト、私にとってはこれが唯一の作業溶液だったことを言いたかった
Anakin001

2
ありがとう。これは私の問題を解決しました。他の多くの提案を試しましたが、うまくいきませんでした。
MasterJedi

3

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


ありがとうございました。これが私の解決策でした。IonicをインストールしてIonic CLIコマンドを実行する別のビルドプロセスをApp Centerで実行しました。彼らは「@ ionic / cli」を支持して「ionic」を非推奨にしました。
MarkHoward02

0

この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

(iOS構成buildType="debug"でそれが提供されているようですが、これがAndroid構成に当てはまるかどうかはわかりません。)


0

@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タグで、いくつかの行をカスタマイズして以下
を確認します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ソリューションとどう違うのですか?
Der Hochstapler

私は単一の<edit-config>タグ内に「android:networkSecurityConfig = "@ xml / network_security_config"とともに「android:usesCleartextTraffic = "true」が追加されたので、私にとっては機能しなかったので、新しい<edit-config>タグを追加したとき"android:usesCleartextTraffic =" true ""と "android:networkSecurityConfig" <edit-config>タグの
後ろに貼り付ければ

0

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

レガシー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>

これは既存のIonicソリューションとどう違うのですか?
Der Hochstapler

一部のレガシープロジェクトは、手動で更新する必要があるNPMおよびCordovaコマンドに準拠していません。
Pradeepta

0

次の解決策は私のために働いた-

goto 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>

0

この行をplatforms / 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" >

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.