前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

Target API levelを28にした際に遭遇したエラー

Target API level 28にしたところ、Essential Phoneで2つのエラーに遭遇した。

Google Mapが落ちる

NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion; inside of com.google.android.gms

対応

AndroidManifest.xmlに以下の記述を追加する。

<uses-library
            android:name="org.apache.http.legacy"
            android:required="false" />
参考

Project Configuration  |  Maps SDK for Android  |  Google Developers

HTTP通信がエラーになる

Httpはデフォルトで無効化されたため、HTTP通信が必要な場合は回避コードを記述する必要がある。

対応

res/xml/network_security_config.xml を新たに作成し、HTTPを有効化したいドメインを記述し、 cleartextTrafficPermitted="true" とする

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">example.com</domain>
    </domain-config>
</network-security-config>

AndroidManifest.xmlに追記する

<application
        android:networkSecurityConfig="@xml/network_security_config">
参考

Android 8: Cleartext HTTP traffic not permitted - Stack Overflow