Android 9以降でHTTPを利用する

提供: MonoBook
ナビゲーションに移動 検索に移動


Android 9から「セキュリティを強化する」という名目でアプリ内での通信はHTTPSが必須になり、HTTPで通信しようとすると以下のような例外を吐くようになった。

Java.IO.IOException: Cleartext HTTP traffic to localhost not permitted

ただデバッグのときはHTTPSオレオレ証明証だと色々とめんどくさいし捗らない。

すべてのドメインでHTTP通信を許可する[編集 | ソースを編集]

「android:usesCleartextTraffic="true"」で全許可となる。 当然ながらオススメされない方法である。 この方法はそのうちGoogle Playの審査で弾かれるようになるかもしれない。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="org.monobook.app1">
	<uses-sdk 
        android:minSdkVersion="21" 
        android:targetSdkVersion="28" />
    
    <!-- network_security_config.xmlを適用する -->
	<application 
        android:label="app1.Android" 
        android:usesCleartextTraffic="true" />
    
	<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
	<uses-permission android:name="android.permission.INTERNET" />
</manifest>

特定のドメインのみHTTP通信を許可する[編集 | ソースを編集]

xmlフォルダを作る[編集 | ソースを編集]

上記フォルダの中に「xmlフォルダ」を新規作成する。

network_security_config.xmlを作る[編集 | ソースを編集]

さきほど作ったxmlフォルダ内にnetwork_security_config.xmlを新規作成する。

<?xml version="1.0" encoding="utf-8" ?>
<network-security-config>

  <!-- デフォルトの設定 -->
  <base-config cleartextTrafficPermitted="false" />

  <!-- ドメイン毎の設定 -->
  <domain-config cleartextTrafficPermitted="true"> 
    <!-- HTTP通信を許可するドメインを列挙しておく -->
    <domain includeSubdomains="true">10.0.2.2</domain>
  </domain-config>

</network-security-config>

AndroidManifest.xmlを書き換える[編集 | ソースを編集]

AndroidManifest.xmlをマウスで右クリックして「プログラムから開く」の「ソースコードエディター」を選ぶ。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="org.monobook.app1">
	<uses-sdk 
        android:minSdkVersion="21" 
        android:targetSdkVersion="28" />
    
    <!-- network_security_config.xmlを適用する -->
	<application 
        android:label="app1.Android" 
        android:networkSecurityConfig="@xml/network_security_config">
        />
    
	<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
	<uses-permission android:name="android.permission.INTERNET" />
</manifest>


関連項目[編集 | ソースを編集]