Android 8:クリアテキストのHTTPトラフィックは許可されていません

この記事の翻訳元:Android 8:クリアテキストHTTPトラフィックは許可されていません

私はAndroidの8でユーザーからの報告を持っていた私のアプリ(用途があることバックエンドフィード)は、コンテンツが表示されないこと。 私は私のアプリケーションは、コンテンツが表示されませんでした(リアフィードを使用)と言って、Androidの8人のユーザーからの報告を受けています。 調査の後、私は例外で起こっ以下見つかっアンドロイド8: 調査の後、私は次の例外は、Android 8で発生しました:

08-29 12:03:11.246 11285-11285/ E/: [12:03:11.245, main]: Exception: IOException java.io.IOException: Cleartext HTTP traffic to * not permitted
at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:458)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
at com.deiw.android.generic.tasks.AbstractHttpAsyncTask.doConnection(AbstractHttpAsyncTask.java:207)
at com.deiw.android.generic.tasks.AbstractHttpAsyncTask.extendedDoInBackground(AbstractHttpAsyncTask.java:102)
at com.deiw.android.generic.tasks.AbstractAsyncTask.doInBackground(AbstractAsyncTask.java:88)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)

(パッケージ名、URLおよびその他の可能な識別子 を削除しましたパッケージ名、URLおよびその他の可能な識別子を削除しました)

Android 7以下ではすべてが機能しますが、android:usesCleartextTrafficマニフェストで設定しtrueません(それを設定しても役に立たないため、それがデフォルト値です)。また、ネットワークセキュリティ情報を使用しません 。Android7以下では、すべてが正常に機能します、私はそれをリストに設定せずandroid:usesCleartextTraffic(そしてtrue常にデフォルトであるno availに設定しました)、ネットワークセキュリティ情報を使用しません。 I IFを呼び出しNetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted()ITはAを返し、false、Androidの8のためにtrue、同じでAPKファイルを使用して、古いバージョンのために。 私が呼び出した場合NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted()、その後、Androidの8のために、それは同じAPKファイルのリターンを使用するfalse以前のバージョンのために(true いくつか見つけることを試みた私をAndroid Oに関するGoogleの情報でこれについて言及しましたが、成功 しませんでした。GoogleのAndroid Oに関する情報でこれについて言及しようとしましたが、成功しませんでした。


#1階

参照:https : //stackoom.com/question/36lJd/Android-ClearテキストHTTPトラフィックは許可されていません


#2F

さて、私はこれを考え出した。 さて、私は知っています。 ITは、パラメータのマニフェストでが原因ですandroid:targetSandboxVersion="2"。転送時に彼の-データを失うことはありませんすることによって、彼のITは、ユーザーアップグレードしたら正規のアプリケーションへの即時アプリから最後の中で確かをしなければならない-我々はまた、インスタントアプリのバージョンを持っていますので、私が追加したしたこと、 これは私が追加されるためマニフェストパラメータが含まれandroid:targetSandboxVersion="2"ているのは、Instant Appバージョンもあるためです。InstantAppから通常のアプリケーションにアップグレードすると、ユーザーがデータを失うことがないようにする必要があります。渡す。 ただし、あいまいな説明が示唆するように: ただし、あいまいな説明は次のことを示唆しています。

このアプリが使用するターゲットサンドボックスを 指定 します。このアプリが使用するターゲットサンドボックスを指定しますsanboxのバージョンが高いほどセキュリティのレベルが高くなり、sanboxのバージョンが高いほどセキュリティのレベルが高くなります

この属性のデフォルト値は 1です。この属性のデフォルト値は1です。

それは明らかに、少なくともAndroid 8では新しいレベルのセキュリティポリシーを追加します。 明らかに、Android 8では新しいレベルのセキュリティポリシーも追加します


#3階

AndroidManifestでこのパラメーターを見つけました: AndroidManifestでこのパラメーターを見つけました:

android:networkSecurityConfig="@xml/network_security_config"

また、@ xml / network_security_configはnetwork_security_config.xmlで次のように定義されています。@@ xml / network_security_config在network_security_config.xml中定义义:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <!--Set application-wide security config using base-config tag.-->
    <base-config cleartextTrafficPermitted="false"/>
</network-security-config>  

ちょうど私がtrueにcleartextTrafficPermittedを変えた が、私はcleartextTrafficPermitted trueに変更します


#4F

よらへのネットワークセキュリティに設定を - に応じてネットワークセキュリティの設定 -

Android 9(APIレベル28)以降、クリアテキストのサポートはデフォルトで無効になっていますAndroid 9(APIレベル28)以降、 クリアテキストのサポートはデフォルトで無効になっています

また、AT Aを見てきた- https://koz.io/android-m-and-the-war-on-cleartext-traffic/ も-httpsを見ることができます。//koz.io/android-m-and-the -war-on-cleartext-traffic /

オプション1- オプション1-

作成ファイルres / xml / network_security_config.xml- 作成ファイルres / xml / network_security_config.xml-

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">domain.com (to be adjusted)</domain>
    </domain-config>
</network-security-config>

AndroidManifest.xml- 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>

オプション2- オプション2

android:usesCleartextTraffic Doc android:usesCleartextTraffic Doc

AndroidManifest.xml- AndroidManifest.xml-

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:usesCleartextTraffic="true"
        ...>
        ...
    </application>
</manifest>

また、@ david.sが指摘した回答android:targetSandboxVersion 問題になる可能性があるため@ david.sが指摘した回答問題になる可能性があるため、android:targetSandboxVersion

よらへのマニフェストのドキュメントを - に応じて文書のリスト -

android:targetSandboxVersion

このアプリが使用する対象のサンドボックス。このアプリが使用する対象のサンドボックス サンドボックスのバージョン番号が大きいほどセキュリティのレベルが高くなり、サンドボックスのバージョン番号が大きいほど セキュリティのレベル が高くなります。デフォルト値は1、 デフォルト値は1、デフォルト値は1です。 この属性を2に設定すると、アプリが別のSELinuxサンドボックスに切り替わります。2に設定 する こともできます。このプロパティを2に設定すると、アプリケーションが他のSELinuxサンドボックスに切り替わります。次の制限がレベル2のサンドボックスに適用されます。次の制限がレベル2のサンドボックスに適用されます

  • 時のデフォルト値はusesCleartextTrafficコンフィグでのネットワークセキュリティではfalseです。 のネットワークセキュリティ設定usesCleartextTrafficのデフォルト値はfalseです。
  • Uid共有は許可されていません。Uid共有は許可されていません

だからオプション3- だからオプション3-

あなたはしている場合は持っているandroid:targetSandboxVersion<manifest>、それを減らすために1 あなたがいる場合<manifest>持っているandroid:targetSandboxVersion、そしてそれが低減され1

AndroidManifest.xml- AndroidManifest.xml-

<?xml version="1.0" encoding="utf-8"?>
<manifest android:targetSandboxVersion="1">
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>

#5F

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">***Your URL(ex: 127.0.0.1)***</domain>
    </domain-config>
</network-security-config>

上記の提案では、URLはhttp://xyz.abc.com/mno/ でした。上記の提案では、提供したURL http://xyz.abc.com/mno/でした。

ことは、私に変更xyz.abc.comそれは作業を開始。 私はそれを変更しますxyz.abc.com、その後、作業を開始します。


#6階

それは誰かにとって役に立つかもしれません

最近、Android 9 でも同じ問題が発生しましたが、 WebView内にいくつかのURLを表示するだけで、特別なことは何もありませんでした。最近、Android 9でも同じ問題が発生しましたが、一部のURLをWebViewで表示するだけで、何が特別なのか。つまりandroid:usesCleartextTraffic="true"、マニフェストへの 追加android:usesCleartextTraffic="true"は機能しましたがandroid:usesCleartextTraffic="true"、アプリケーション全体のセキュリティを犠牲にしたくありませんでした したがって、マニフェストへの追加はですが、アプリケーション全体のセキュリティを犠牲にしたくありません。リンクからSO FIXにあったで変更httpするhttps ので、解決策はリンクすることでhttp変更をhttps

元の記事を0件公開 75 件を賞賛 56万回の閲覧+

おすすめ

転載: blog.csdn.net/w36680130/article/details/105435238