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)を使用する許可を与えるより簡単な方法があります:
- Androidプラットフォームでプログラムを一度コンパイルします。プロジェクトのルートディレクトリに
AndroidManifest.template.xmlファイルが生成されます。 - このファイルを開き、適切な位置に以下の行を追加します:
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アクセスを許可する設定を追加するだけで済みます。