各種の GL テクスチャ用の APK を複数作成する

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

Android アプリを開発して Google Play の複数の APK を利用する場合、 最初から適切な手法を取り入れて 不要な頭痛の種を防ぐことが重要 詳しく見ていきます。このレッスンでは、アプリの複数の APK を、 OpenGL テクスチャ形式のサブセットをサポートしています。また、次のことを行うために必要なツールも 複数 APK のコードベースをできる限り簡単に維持できるようになります。

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

利用可能なすべての Android デバイスで動作するアプリを作成するとき 当然ながら、使用するデバイスに関係なく、個々のデバイスでアプリが最適に見えるようにする必要があります。 それらがすべて同じ GL テクスチャのセットをサポートしているわけではありません。最初は 複数 APK をサポートすることが最善の解決策ですが、多くの場合、そうではありません。単一 APK の使用 複数 APK のデベロッパー ガイドのセクションに、 これについては、サポートされているテクスチャを検出する方法を含め、単一の APK で実現できます。 使用できます。状況によっては、すべてのフォーマットをバンドルしたほうが 実行時に使用するものを選択するだけで済みます。

管理できる場合、アプリを単一の APK に制限することには、いくつかの利点があります。 含まれます。

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

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

要件を図示する

Android デベロッパー ガイドには、Android デバイスで使用可能な一般的なテクスチャの便利なリファレンスが掲載されています。 supports-gl-texture ページをご覧ください。このページには、どのスマートフォン(または電話ファミリー)がサポートされているかに関するヒントも記載されています。 適用できます。通常は、いずれかの APK で ETC1 を使用します。このテクスチャ形式は、OpenGL ES をサポートするすべての Android 搭載デバイスでサポートされています。 2.0 仕様。

ほとんどの Android 搭載デバイスは複数のテクスチャ形式をサポートしているため、 優先順位を付けます。アプリケーションが変換するすべての形式を含むグラフを作成する サポート。一番左のセルが優先度が最も低いセルです(通常は ETC1、 (パフォーマンスと互換性の点で、堅実なデフォルト)次に、グラフに色を付けます。 cell は APK を表します。

ETC1 ATI PowerVR

図で色を付けることで、このガイドの単色が薄くなるだけでなく、 チーム内コミュニケーションが簡単になります。各 APK を「blue」、「green」、または 「ETC1 テクスチャ形式をサポートしているもの」ではなく「赤」などにします。

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

既存の 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 は、いくつかの簡単なルールに従って選択します。

  • マニフェストで特定の APK が適格であることが示されている必要がある
  • 適格な APK のうち、バージョン番号が最も大きいものが優先される
  • APK にリストされているテクスチャ形式のいずれかが市販のデバイスでサポートされていれば、 そのデバイスが対象とみなされます

GL テクスチャに関しては、最後のルールが重要です。つまり たとえば、同じアプリで異なる GL 形式を使用する場合は十分に注意してください。もし PowerVR の使用率は 99% ですが、スプラッシュ画面などには ETC1 を使用しています...マニフェスト ファイルでは、 必ず両方の形式がサポートされていることを示しますETC1 のみに対応したデバイス アプリがダウンロードされて、ユーザーは予期せぬクラッシュをします。 ブロックすることもできます。よくあるのは、特定のアプリを対象に複数の APK を 各種のデバイスに対応している場合、APK ごとに 1 つのテクスチャ形式になります。

このため、テクスチャのサポートは他の 2 つのマルチ APK とは若干異なります API レベルと画面サイズですどのデバイスにも、1 つの API レベルと 1 つの画面しかない APK によってサイズが決まります。テクスチャを使用すると、通常、APK は デバイスは 1 つのテクスチャをサポートし、デバイスは多数のテクスチャをサポートします。多くの場合、1 つのカテゴリと 多くの APK をサポートするデバイスだが、解決策は同じ(バージョン コード)

例として、数台のデバイスについて、以前に定義した APK のうち、それぞれのデバイスに適合する件数を確認します。 ダウンロードします

FooPhone Nexus S Evo
ETC1 ETC1 ETC1
PowerVR ATI TC

PowerVR 形式と ATI 形式の両方が利用可能であれば ETC1 よりも優先されると仮定すると、 「最も大きいバージョン番号が優先」各 APK で versionCode 属性を設定した場合に、 赤 ≥ 緑 ≥ 青の場合、常に青ではなく赤と緑の両方が選択されます。 サポートしているデバイスがあり 赤と緑の両方に対応しているデバイスが 選択されます。

すべての APK を個別の「トラック」に保持するには、適切なバージョン コードを用意することが重要です。 できます。デベロッパー ガイドのバージョン コード セクションに記載されているスキームの使用をおすすめします。以降 サンプル APK セットが 3 つの可能なディメンションのうちの 1 つしか扱っていない場合、次のように記述すれば十分です。 を 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-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />
    ...

緑:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="2001" android:versionName="1.0" package="com.example.foo">
    <supports-gl-texture android:name="GL_AMD_compressed_ATC_texture" />
    ...

赤:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="3001" android:versionName="1.0" package="com.example.foo">
    <supports-gl-texture android:name="GL_IMG_texture_compression_pvrtc" />
    ...

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

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

  • すべての APK は同じパッケージ名を持つ必要があります
  • すべての APK は同じ証明書で署名する必要があります
  • マニフェスト フィルタで、競合する情報( 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 の画面サイズとして報告するのに十分な大きさであり、テレフォニー ハードウェアを搭載したデバイスが今後登場するまでです。

幸いにも、上記の問題は、マニフェストに次の行を追加すれば簡単に解決できます。

<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" />

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