Android 9でのHTTPプロトコル使用問題の解決方法

Android 9にアップグレードしたアプリケーションでサーバー接続ができなくなる問題に直面したことはありますか?ネットワーク自体は正常に動作しているにもかかわらず、アプリケーションがサーバーに接続できない場合、Android 9のセキュリティポリシーが原因である可能性があります。

ここでは、Delphi開発環境でこの問題を解決する方法を説明します。

ステップ1:ネットワークセキュリティ設定ファイルの作成

まず、network_security_config.xmlという名前の設定ファイルを作成します。以下がその内容です:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network_security-config>

次に、プロジェクトフォルダ内にres/xmlというサブフォルダを作成し、そこに上記のnetwork_security_config.xmlファイルを保存します。

ステップ2:AndroidManifest.templateファイルの修正

プロジェクトのAndroidManifest.templateファイルを編集します。applicationセクションに以下の行を追加します:

    <application android:persistent="%persistent%"
        android:restoreAnyVersion="%restoreAnyVersion%"
        android:label="%label%"
        android:debuggable="%debuggable%"
        android:largeHeap="%largeHeap%"
        android:icon="%icon%"
        android:theme="%theme%"
        android:hardwareAccelerated="%hardwareAccelerated%"
        android:networkSecurityConfig="@xml/network_security_config"
        >

この追加により、ステップ1で作成した設定ファイルを参照します。

**注意点:**この設定は正確な場所に記述する必要があります。誤った場所に記述すると、問題が解決しないことがあります。

ステップ3:設定ファイルのデプロイ

Project -> Deploymentメニューからデプロイウィンドウを開き、network_security_config.xmlを追加します。リモートパス(Remote Path)はres\\xml\\に設定してください。

設定後、プロジェクトを再コンパイルすれば問題は解決するはずです。

以前にプロジェクトをコンパイルしている場合、AndroidManifest.xmlファイルを再生成する必要があります。プロジェクトをクリアするか、手動でAndroid\\Releaseフォルダ内の既存のAndroidManifest.xmlを削除してください。後者の方はコンパイル時間を短縮できます。

代替ソリューション:より簡単な方法

Android 9でHTTPS以外のプロトコル(HTTP)を使用する許可を与えるより簡単な方法があります:

  1. Androidプラットフォームでプログラムを一度コンパイルします。プロジェクトのルートディレクトリにAndroidManifest.template.xmlファイルが生成されます。
  2. このファイルを開き、適切な位置に以下の行を追加します:android:usesCleartextTraffic="true"

以下のようなコードになります:

<application android:persistent="%persistent%" 
        android:restoreAnyVersion="%restoreAnyVersion%" 
        android:label="%label%" 
        android:debuggable="%debuggable%" 
        android:largeHeap="%largeHeap%"
        android:icon="%icon%"
        android:theme="%theme%"
        android:hardwareAccelerated="%hardwareAccelerated%"
    android:usesCleartextTraffic="true"
        android:resizeableActivity="false">

この方法では、AndroidManifest.template.xmlに直接HTTPアクセスを許可する設定を追加するだけで済みます。

タグ: Android Delphi HTTP ネットワーク設定 セキュリティ設定

7月15日 18:01 投稿