各種の画面サイズ用の APK を複数作成する

アプリを Google Play に公開する場合は、Android App Bundle を作成してアップロードしてください。そうすることで、各ユーザーのデバイス構成に合わせて最適化された APK が Google Play によって自動的に生成、配信されるため、ユーザーはアプリの実行に必要なコードとリソースをダウンロードするだけで済みます。複数の APK を公開するという方法は、Google Play に公開しない場合は便利ですが、各 APK のビルド、署名、管理を自分で行う必要があります。

Android アプリを開発して Google Play の複数の APK を利用する場合は、 最初から適切な方法を採用して 不必要な頭痛の種を防ぐことが重要 開発プロセスに進みますこのレッスンでは、Android または iOS モバイル デバイスに それぞれ異なる画面サイズに対応していますまた、次のことを行うために必要なツールも 複数 APK のコードベースをできる限り簡単に維持できるようになります。

複数 APK の必要性を確認する

さまざまなサイズの Android デバイスで動作するアプリを作成するには、 当然ながら、大きなデバイスの使用可能なスペースをアプリケーションで活用する必要があります。 小さな画面での互換性やユーザビリティを犠牲にすることなく、初めに 複数 APK をサポートすることが最善の解決策となりますが、多くの場合、そうではありません。単一 APK の使用 複数 APK のデベロッパー ガイドのセクションに、 サポート ライブラリの使用を含め、単一の APK でこれを実現できます。また、 複数画面のサポートに関するガイド、 利用可能なサポート ライブラリも は Android SDK を使用してダウンロードできます。これにより、Honeycomb より前のデバイスでフラグメントを使用できます( 1 つの APK で複数画面をサポートする方がはるかに簡単です)。

アプリを単一 APK に限定できるのであれば、次のような利点があります。

  • 公開とテストがより簡単になります
  • 管理するコードベースは 1 つだけです
  • アプリはデバイス構成の変更に適応できます
  • 複数のデバイスにまたがるアプリの復元が機能します
  • 市場選好や「アップグレード」による行動を心配する必要がないを 1 つの APK から どの APK をどのクラスのデバイスに適用するか

このレッスンの残りの部分は、トピックについて調査し、 リンク先のリソースのマテリアルにあり、複数の APK がアプリのパスとして適切であると判断されました。 説明します。

要件を図示する

まず簡単なグラフを作成して、必要な APK の数と画面数をすばやく判断しましょう。 サイズ。要件の図は短時間で簡単に作成でき、後で参照できるので便利です。さまざまな画面サイズを表すセルの行から始める Android プラットフォームで利用できます

標準 特大

次に、個々の APK を表す色をセルに塗ります。これは、Google Chat で は、各 APK を特定の範囲の画面サイズに適用することがあります。

標準 特大

必要に応じて、「小とそれ以外」の 2 つの APK にすることもできます。または「xlarge と 表示されます。図を色分けすることで、チーム内のコミュニケーションも容易になります。APK がカバーする画面タイプの数と関係なく、各 APK を単に「青」「緑」「赤」と呼ぶことができます。

ライブラリ プロジェクトにすべての共通のコードとリソースを配置する

既存の Android アプリを変更する場合でも、ゼロから作成する場合でも、 コードベースに対してまず行うべきであり 圧倒的に最も重要なことですすべて 更新が必要なのは 1 回だけです(言語にローカライズされた文字列、 カラーテーマ、共有コードのバグ修正)によって開発時間を短縮し、 間違いの可能性が高まります。

注: ライブラリ プロジェクトを作成してインクルードする実装の詳細はこのレッスンでは扱いませんが、Android ライブラリの作成を参照すると速やかに実装できます。

既存のアプリを変換して複数 APK サポートを使用するには、 ローカライズされたすべての文字列ファイル、値のリスト、テーマについてコードベースを精査する APK 間で変更されない色、メニュー アイコン、レイアウト、 すべてライブラリプロジェクトで行えますあまり変更されないコードは 共有することもできます。そうしたクラスを拡張して、APK ごとにメソッドを 1 つか 2 つ追加できます。

一方、アプリをゼロから作成する場合は、最初にできるだけ多くのコードをライブラリ プロジェクト内で作成し、必要なときだけ個々の APK に移動します。コードを個別に APK に追加していき、数か月経った後でどうすれば大量のコードをライブラリ セクションに移動できるかに頭を悩ませるより、上記のように長期的な視野に立って管理する方がはるかに簡単です。

新しい APK プロジェクトを作成する

リリースする APK ごとに別個の Android プロジェクトが必要です。簡単に ライブラリ プロジェクトとすべての関連する APK プロジェクトを同じ親フォルダに配置します。 また、各 APK は同じパッケージ名を持つ必要がありますが、必ずしもパッケージ名をライブラリと共有する必要はありません。このスキームに従って 3 つの APK が存在する場合 ルート ディレクトリは次のようになります。

alexlucas:~/code/multi-apks-root$ ls
foo-blue
foo-green
foo-lib
foo-red

プロジェクトを作成したら、ライブラリ プロジェクトを各 APK プロジェクトへの参照として追加します。条件 ライブラリ プロジェクトで開始アクティビティを定義し、APK でそのアクティビティを拡張する できます。ライブラリ プロジェクト内で開始アクティビティを定義すると、 アプリの初期化を 1 か所で行えるため、APK ごとに初期化を 「ユニバーサル」なライセンス チェックの実行など、さまざまなタスクに APK から APK に大きく変更されない初期化手順。

マニフェストを調整する

ユーザーが複数 APK を使用するアプリを Google Play でダウンロードする場合、次の 2 つの単純なルールで適切な APK が選択されます。

  • マニフェストで特定の APK が適格であることが示されている必要がある
  • 適格な APK のうち、バージョン番号が最も大きいものが優先される

例として、前述の複数の APK のセットを取り上げ、各 APK が 「ターゲット」より大きいすべての画面サイズをサポートするよう設定されているあります。個別に受験した場合、 各 APK の可能な範囲は次のようになります。

標準 特大
標準 特大
標準 特大

ただし、「最も高いバージョン番号」を使用する方が有効です。versionCode 属性を 各 APK を赤 ≥ 緑 ≥ 青に設定すると、グラフは次のようにまとめられます。

標準 特大

さらに、赤の APK には他の 2 つにない要件があると仮定します。Android デベロッパー ガイドの Google Play 上のフィルタページには、考えられる要因の完全なリストがあります。ここでは例として、 赤は前面カメラが必要です。つまり、赤の主要な目的は、利用可能な特大の画面スペースを使用して、前面カメラで撮影を楽しむことです。しかし 結局のところ すべての特大デバイスに前面カメラがあるわけではありません。その場合はどうなるでしょうか?

幸いなことに、ユーザーがそのようなデバイスから Google Play を閲覧している場合、Google Play は Red が前面カメラを要件としてリストしていることを確認して、静かに無視し、 Red とそのデバイスはデジタル天国では一致しないと判断しました。その後、 緑色は xlarge デバイスと互換性があるだけでなく、 前面カメラこの場合、ユーザーは Google Play からアプリをダウンロードできます。デバイスに前面カメラがないのは残念ですが、特定の画面サイズをサポートする APK が存在するからです。

すべての APK を別個の「トラック」で保存するには、適切なバージョン コードのスキームを用意することが重要です。デベロッパー ガイドのバージョン コード セクションに記載されているスキームの使用をおすすめします。上記の例の APK セットは 3 つの可能なディメンションのうち 1 つのみを扱うので、各 APK を 1,000 単位で区切り、そこから増分すれば十分です。この 次のようになります。

青: 1001, 1002, 1003, 1004...
緑: 2001, 2002, 2003, 2004...
赤:3001, 3002, 3003, 3004...

これらをまとめると、Android マニフェストは次のようになります。 次のとおりです。

青:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1001" android:versionName="1.0" package="com.example.foo">
    <supports-screens android:smallScreens="true"
        android:normalScreens="true"
        android:largeScreens="true"
        android:xlargeScreens="true" />
    ...

緑:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="2001" android:versionName="1.0" package="com.example.foo">
    <supports-screens android:smallScreens="false"
        android:normalScreens="false"
        android:largeScreens="true"
        android:xlargeScreens="true" />
    ...

赤:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="3001" android:versionName="1.0" package="com.example.foo">
    <supports-screens android:smallScreens="false"
        android:normalScreens="false"
        android:largeScreens="false"
        android:xlargeScreens="true" />
    ...

技術的には、複数の APK はサポート画面のどちらでも動作します。 使用するように指定してください。一般的には、supports-screens が推奨されます。 同じマニフェスト内で両方のタグを使用することは一般的におすすめしません。これは、 作業が必要以上に複雑になり、エラーの可能性が高まります。 また、デフォルト値(小さな値と デフォルトで、normal が常に true です)が、マニフェスト内で 最適化されていますそうすれば、将来の悩みの種が少なくなります。たとえば、マニフェスト ファイルで のターゲット SDK が <9 では xlarge のサイズがまだ存在しないため、自動的に false に設定されます。 はっきりと表現しましょう。

リリース前チェックリストを確認する

Google Play にアップロードする前に、次の項目を念入りにチェックしてください。これらは 特に複数の APK に関連するものであり、すべての APK を対象とした完全なチェックリストを表すものではありません。 ダウンロードされる場合もあります。

  • すべての APK は同じパッケージ名を持つ必要があります
  • すべての APK は同じ証明書で署名する必要があります
  • APK がサポートするすべての画面サイズをマニフェストで true に設定し、あらゆる画面サイズ 避けるようにするには、false に設定します。
  • マニフェスト フィルタで、競合する情報( XLARGE 画面でカップケーキが表示されると、誰にも表示されません)。
  • 各 APK のマニフェストは、サポートされる画面、OpenGL のテクスチャ、プラットフォーム バージョンのうち、少なくとも 1 つで一意であることが必要です
  • 1 台以上のデバイスで各 APK をテストします。それ以外では、Google Cloud には カスタマイズ可能なデバイス エミュレータを開発マシン上で実行できます。ぜひ利用してください。

また、市場にリリースする前にコンパイル済みの APK を調べて、 アプリが Google Play で非表示になるおそれのある事態が発生した場合。そのためには、「aapt」ツールを使用すると非常に便利です。Aapt(Android Asset Packaging Tool)は、Android Asset Packaging ツールの作成と Android アプリをパッケージ化できます。また、アプリを検査するための非常に便利なツールでもあります。

>aapt dump badging
package: name='com.example.hello' versionCode='1' versionName='1.0'
sdkVersion:'11'
uses-permission:'android.permission.SEND_SMS'
application-label:'Hello'
application-icon-120:'res/drawable-ldpi/icon.png'
application-icon-160:'res/drawable-mdpi/icon.png'
application-icon-240:'res/drawable-hdpi/icon.png'
application: label='Hello' icon='res/drawable-mdpi/icon.png'
launchable-activity: name='com.example.hello.HelloActivity'  label='Hello' icon=''
uses-feature:'android.hardware.telephony'
uses-feature:'android.hardware.touchscreen'
main
supports-screens: 'xlarge'
supports-any-density: 'true'
locales: '--_--'
densities: '120' '160' '240'

aapt 出力を調べるときは、Terraform の引数に矛盾する値が supports-screens および compatible-screens、および意図しない「uses-feature」がない値 権限がある結果として追加された権限などです。上記の例では、APK はほとんどのデバイス(すべてのデバイスではない)には表示されません。

その原因は、必要な SEND_SMS 権限の追加により、android.hardware.telephony の機能要件が暗黙的に追加されたことにあります。(すべてではないにせよ)ほとんどの特大デバイスはテレフォニー ハードウェアを搭載していないタブレットであるため、このケースでは Google Play はこの APK を除外します。ただしこれは、将来、特大画面サイズとして報告するのに十分な大きさとテレフォニー ハードウェアの両方を備えたデバイスが登場するまでのことです。

幸い、この問題は、次のコードを manifest:

<uses-feature android:name="android.hardware.telephony" android:required="false" />

また、android.hardware.touchscreen 要件も暗黙的に追加されます。タッチスクリーンがないデバイスの TV で APK を表示するには、マニフェストに次の行を追加する必要があります。

<uses-feature android:name="android.hardware.touchscreen" android:required="false" />

リリース前チェックリストの作業が完了したら、APK を Google Play にアップロードします。 Google Play を閲覧しているときアプリが表示されるまで少し時間がかかることがありますが、表示されると 最後のチェックを行います以下を確認できるテスト用デバイスにアプリをダウンロードします。 APK が目的のデバイスをターゲットにしているかどうかを確認します。

Google Play で複数の APK を公開する方法の詳細については、複数 APK のサポートをご覧ください。