Android 8.0 への移行

Android 8.0(API レベル 26)では、動作の変更と、 いくつかご紹介しますこのドキュメントでは、移行手順の概要を説明します。 アプリを Android 8.0 に移行する主な 2 つのフェーズは次のとおりです。

  1. Android 8.0 との互換性を確認する

    アプリが新しいバージョンのプラットフォームで完全に機能することを確認します。この段階で 新しい API を使用したり、アプリの targetSdkVersion を変更したりしていないが、軽微な変更 必要になる場合があります。

  2. ターゲット バージョンを更新して Android 8.0 の機能を使用する

    Google Cloud の新しい機能を プラットフォーム、targetSdkVersion を 26 に更新、アプリが続行することを確認する 新しい API の使用を開始できます。

Android 8.0 との互換性を確認する

ここでの目的は、既存のアプリが Android 8.0 でそのまま動作することを確認することです。 (API レベル 26)。プラットフォームの変更によってはアプリの動作に影響する可能性があるため、 調整が必要になることがありますが、新しい API や API を使用する必要は targetSdkVersionを変更してください。

Android 8.0 との互換性を確認する

Android 8.0 を搭載するデバイスを準備する

  • 対応デバイス(Pixel、Pixel XL、Pixel C、Nexus 5X、Nexus 6P、Nexus)をお持ちの場合 プレーヤー)、 手順 デバイスにフラッシュします
  • または、Android Emulator 用の Android 8.0 システム イメージをダウンロードします。記載されている SDK Manager] の下にあります。 Google APIs Intel x86 Atom System Image としての Android 8.0

    注: Android 8.0 システム イメージは、 Android Studio 3.0 以降。 詳しくは、Android 8.0 SDK を入手するセクションをご覧ください。

互換性テストを実施する

ほとんどの場合、Android 8.0(API レベル 26)との互換性のテスト には、アプリのリリースを準備する際に実施するテストと同じ種類のテストが含まれます。この段階で、アプリの中核品質ガイドラインテストに関するベスト プラクティスを確認することをおすすめします。

ただし、テストにはもう 1 つの側面があります。Android 8.0 では、 変更しない場合でも、アプリの動作に影響したり、アプリ全体に影響を及ぼしたりする可能性があります。 targetSdkVersion。そのため、Google Chat での主な変更点を 表 1 を参照し、変更に対応するために実装した修正をテストします。

表 1. すべてのアプリに影響する主な変更 Android 8.0 デバイスで動作するアプリです。

変更 概要 その他のリファレンス
バックグラウンドでの位置情報の更新頻度を下げる アプリがバックグラウンド サービスから位置情報の更新を受信すると、 Android 8.0(API レベル 26)のアップデートを、古いバージョンの Android と比較しました。具体的には サービスは 1 時間に数回を超える位置情報の更新を受信できません。ただし、 アプリがフォアグラウンドにあると、位置情報の更新頻度は変わりません。 <ph type="x-smartling-placeholder"></ph> バックグラウンドでの位置情報の制限
net.hostname はサポートされなくなりました net.hostname システム プロパティのクエリを実行すると、null の結果が生成されます。 なし
send(DatagramPacket) からの新しい例外 send(DatagramPacket) メソッドが SocketException をスローする 以前に実行された connect(InetAddress, int) メソッドが失敗した場合。 <ph type="x-smartling-placeholder"></ph> 動作の変更点: ネットワークと HTTP(S) 接続
適切な NullPointerException: AbstractCollection 個のメソッド AbstractCollection.removeAll(null)AbstractCollection.retainAll(null) が常に NullPointerException、 以前は、コレクションが空の場合に NullPointerException がスローされませんでした。 この変更により、ドキュメントと一致する動作になります。 <ph type="x-smartling-placeholder"></ph> 動作の変更点: コレクションの処理
適切な NullPointerException: Currency.getDisplayName(null) Currency.getDisplayName(null) に発信中 NullPointerException をスローします。 <ph type="x-smartling-placeholder"></ph> 動作の変更点: ロケールと国際化

Android 8.0 における動作変更の包括的なリストについては、 (API レベル 26)、さらに Android 8.0 の動作の変更点をご覧ください。

ターゲット バージョンを更新して Android 8.0 の機能を使用する

このセクションでは、Android 8.0 の完全なサポートを有効にする方法について説明します。 (API レベル 26)targetSdkVersion を 26 に更新して Android 8.0 で利用できる新機能の追加です

Android 8.0 では、新しい API に加え、いくつかの動作が導入されています。 targetSdkVersion を 26 に更新すると変更されます。一部の動作が変更されるため アプリの障害を防ぐためにコードの変更が必要な場合もあるため、 targetSdkVersion を変更した場合の影響について、詳しくは Android 8.0 をターゲットとするアプリ向けの動作変更をすべてご確認ください。

注: 上述の手順は、 プラットフォームの互換性を確認する アプリを Android 8.0 にターゲット設定しますので、必ず先にこの手順を完了してください。

ターゲット バージョンを更新して Android 8.0 の機能を使用する手順

Android 8.0 SDK を入手する

Android 8.0 でアプリをビルドするための SDK パッケージを入手できます。 (API レベル 26)に最新バージョンの Android Studio(Android Studio 3.0 以降を推奨)。 Android Studio 3.0 以降に搭載された Android 8.0 の機能 たとえばアダプティブ アイコンダウンロード可能フォントを利用できます。 これらの機能がまだ必要ない場合は、Android Studio の安定版を使用できます。 2.3.3 に沿って Android 8.0 でアプリをビルドして新しい API を使用できるようになりました。

どちらのバージョンの Android Studio でもセットアップする手順は次のとおりです。

  1. Android Studio を起動し、クリックして SDK Manager を開きます。 [ツール] >SDK Manager
  2. [SDK Platforms] タブで、[Show Package Details] をオンにします。下回っている Android 8.0 プレビューでは、以下の点を確認します。 <ph type="x-smartling-placeholder">
      </ph>
    • Android SDK プラットフォーム 26
    • Google APIs Intel x86 Atom システム イメージ (エミュレータの場合のみ必須)
  3. [SDK Tools] タブに切り替えて、利用可能なアップデートがあるすべての項目を確認します( ダッシュ が表示されます。次の項目の最新バージョンを含める必要があります。 次の要件があります。 <ph type="x-smartling-placeholder">
      </ph>
    • Android SDK Build-Tools 26.0.0
    • Android SDK Platform-Tools 26.0.0
    • Android Emulator 26.0.0
  4. [OK] をクリックして、選択したすべての SDK パッケージをインストールします。

これで、Android 8.0 でのビルドを開始する準備ができました。

ビルド構成を更新する

compileSdkVersion を更新します。 targetSdkVersion と、Support Library のバージョンを最新バージョンに 次に例を示します。

android {
  compileSdkVersion 26

  defaultConfig {
    targetSdkVersion 26
  }
  ...
}

dependencies {
  compile 'com.android.support:appcompat-v7:26.0.0'
}

// REQUIRED: Google's new Maven repo is required for the latest
// support library that is compatible with Android 8.0
repositories {
    google()

    // If you're using a version of Gradle lower than 4.1, you must instead use:
    // maven {
    //     url 'https://maven.google.com'
    // }
}

マニフェスト ファイルからブロードキャスト レシーバを削除する

Android 8.0(API レベル 26)では、 制限事項 ブロードキャスト レシーバを使用している場合は、サービス アカウントによって削除されたブロードキャスト レシーバをすべて削除する必要があります。 暗黙的ブロードキャスト インテントに登録されている。そのままにしても、アプリが壊れることはありません ただし、Android 8.0 でアプリを実行する場合には影響しません。

自分のアプリだけが応答できるブロードキャスト - 明示的ブロードキャスト インテントと ブロードキャストが受信される場合も、引き続き同じように動作します。 Android 8.0。

この新しい制限には例外があります。1 つの Android 8.0 をターゲットとするアプリで引き続き動作する暗黙的なブロードキャストの一覧については、暗黙的ブロードキャストの例外をご覧ください。

Android 8.0 アプリをテストする

上記の準備が完了したら、アプリをビルドしてテストできます。 さらに、Android 8.0 をターゲットに設定したときに正しく動作することを確認します。 (API レベル 26)。ここでも コアアプリ 品質ガイドラインおよびベスト プラクティス テストの実施方法をご覧ください。

targetSdkVersion を 26 に設定してアプリをビルドすると、次のようになります。 注意が必要なプラットフォームの変更点があります一部の広告 アプリの動作に重大な影響を及ぼす可能性があり、 新しい関数を実装しなくても、アプリ全体が壊れてしまいます。 Android 8.0 の新機能です。

表 2 に、これらの変更点の一覧と詳細情報へのリンクを示します。

表 2. アプリに影響する主な変更点 targetSdkVersion が 26 に設定されている場合。

変更 概要 その他のリファレンス
プライバシー Android 8.0(API レベル 26)では、 net.dns1、net.dns2、net.dns3、または net.dns4 システム プロパティ。 動作の変更点: プライバシー
書き込み可能セグメントと実行可能なセグメントの適用 ネイティブ ライブラリの場合、Android 8.0(API レベル 26)では、 データを実行可能にし、コードを書き込み可能にすべきではありません。 動作の変更点: ネイティブ ライブラリ
ELF のヘッダーとセクションの検証 ダイナミック リンカーが ELF ヘッダーでより多くの値をチェックする セクション ヘッダーが使用され、それらが無効な場合は失敗します。 動作の変更点: ネイティブ ライブラリ
通知 Android 8.0(API レベル 26)バージョンの SDK をターゲットとするアプリ POST リクエストを送信します ユーザーに通知します。 API の概要: 通知
List.sort() メソッド このメソッドの実装で Collections.sort() が呼び出されなくなるか、アプリがスタック オーバーフローのために例外をスローします。 動作の変更点: コレクションの処理
Collections.sort() メソッド List 実装で、Collections.sort()ConcurrentModificationException 動作 変更: コレクションの処理

Android 8.0(API レベル 26)における動作変更の広範な一覧については、 Android 8.0 の動作の変更点をご覧ください。

Android 8.0(API レベル 26)で利用できる新しい機能と API については、以下をご覧ください。 Android 8.0 の機能と API