各種の画面サイズ用の 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 の数と画面数をすばやく判断しましょう。 サイズ。幸い、要件をすばやく簡単に示すことができます。 後で参照できるようにしておきますさまざまな画面サイズを表すセルの行から始める ネイティブにサポートしています

標準 特大

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

標準 特大

必要に応じて、「小とそれ以外」の 2 つの APK にすることもできます。または「xlarge と 表示されます。グラフを色分けすることで、チーム内のコミュニケーションも容易になります。 画面の種類がいくつでも、各 APK を単に「青」、「緑」、「赤」と呼ぶようになりました。 説明します。

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

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

注: 作成方法と作成方法の実装の詳細は、 このレッスンでは説明しませんが、インクルード ライブラリの Android ライブラリを作成するをご覧ください。

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

一方、アプリケーションをゼロから作成する場合は、 まずライブラリ プロジェクトにコードを書き、 できます。長期的に見ると管理がはるかに容易です そして数か月後に、この blob を上に移動できるかどうかを突き止めようとしています。 ライブラリ セクションに移動できます。

新しい 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 からダウンロードした場合、 使用する APK は、次の 2 つのシンプルなルールに従って選択します。

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

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

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

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

標準 特大

さらに、赤の APK には他の 2 つにない要件があると仮定します。「 Android の [Google Play のフィルタ] ページ デベロッパー ガイドに、考えられる原因の一覧が記載されています。ここでは例として、 赤には前面カメラが必要です。実際、赤色の APK のポイントは、 使用可能な画面スペースを確保して 前面カメラでエンターテイメントを楽しみましょうしかし 結局のところ すべての特大デバイスに前面カメラがあるわけではありません。その場合はどうなるでしょうか?

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

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

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

  • すべての APK は同じパッケージ名を持つ必要があります
  • すべての APK は同じ証明書で署名する必要があります
  • APK がサポートするすべての画面サイズをマニフェストで true に設定し、あらゆる画面サイズ 避けるようにするには、false に設定します。
  • マニフェスト フィルタで、競合する情報( XLARGE 画面でカップケーキが表示されると、誰にも表示されません)。
  • 各 APK のマニフェストは、サポートされている画面、OpenGL テクスチャ、または プラットフォームのバージョン
  • 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 の機能要件が暗黙的に追加されたことにあります。大部分の xlarge デバイスはテレフォニー ハードウェアを搭載していないタブレットであるため、Google Play はこのような場合にこの APK を除外します。これは、xlarge の画面サイズとして報告するのに十分な大きさであり、テレフォニー ハードウェアを搭載したデバイスが今後登場するまでです。

幸い、この問題は、次のコードを 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 のサポート