Publishing an Application

Xamarin.Android のアプリケーションを APK にしてリリース

素晴らしいアプリケーションを作成後は、他の人にも使ってもらいましょう。 本ガイドでは、E-mail や個人の Web サーバー、Google Play、Amazon App Store for Android などといったチャンネルから Xamarin.Android で作成したアプリケーションを配布するための手順について説明します。

概要

Xamarin.Android アプリケーション開発における最終ステップは、アプリケーションの公開です。 公開は、Xamarin.Android アプリケーションのコンパイルのプロセスで、ユーザーがデバイスにインストールするための準備として、以下の 2つの重要なタスクが含まれます:

  • 公開準備 - アプリケーションのリリース バージョンを作成し、Android が搭載されたデバイスに配布できるようにします。
  • 配布 - 複数のディストリビューションのチャンネルからアプリケーションのリリース バージョンを提供します。
以下の図では、Xamarin.Android アプリケーションの公開までの流れを表しています:

上の図から分かるように、使用する配布方法に関わらず、公開の準備は同じです。 アンドロイド アプリケーションをユーザーに配布するまでには、以下の複数の方法があります:

  • Web サイト経由 - Xamarin.Android アプリケーションを Web サイトからダウンロードできるように設定し、ユーザーはリンクをクリックしてアプリケーションをインストールできます。
  • E-mail 経由 - Xamarin.Android アプリケーションを E-mail からインストールすることもできます。Android を搭載してデバイスで添付を開いてアプリケーションをインストールします。
  • マーケット経由 - Google Play や Amazon App Store for Android など、アプリケーションを配布するためのマーケットプレイスがあります。
確立したマーケットプレイスを使用することが、アプリケーションを配布する最も一般的な方法で、マーケットプレイスでは、アプリケーションを幅広いマーケットに展開し、配布をコントロールする優れた機能を提供しています。ただし、マーケットプレイスにアプリケーションを公開するには、いくつか追加の手順を踏む必要があります。

複数のチャンネルで Xamarin.Android アプリケーションを同時に配布することができます。 例えば、アプリケーションを Google Play や Amazon App Store for Android などに公開し、Web サーバーからもダウンロードできるようにします。

他の 2つの配信方法 (ダウンロードと E-mail 経由) は、ユーザーのサブセットのコントロールには最も効果的で、エンタープライズ環境や小規模または特定のユーザー向けのためのアプリケーションの配布に最も適しています。 サーバーや E-mail での配布は、アプリケーションを公開するのに必要な準備が少ないより簡単な方法です。

Amazon Mobile App Distribution Program では、モバイル アプリの開発者が Amazon でアプリケーションを配布、販売できます。 ユーザーは、Amazon App Store アプリケーションを使用して、Android を搭載しているデバイスでアプリケーションの検索や購入ができます。

Google Play は、間違いなく Android のアプリケーションのマーケットプレイスとして最も包括的で人気があります。 Google Play では、ユーザーは、デバイスやコンピュータから 1つのアイコンをクリックするだけで、アプリケーションを検索からダウンロード、評価、購入ができます。 また、Google Play では、セールスとマーケットのトレンドの分析に役立つツール、どのデバイス、どのユーザーがアプリケーションをダウンロードできるかをコントロールするツールなどを提供しています。 以下、Android デバイスで Google Play を起動したスクリーンショットです:

アプリケーションをリリースするための準備

アプリケーションのコーディングとテストが完了したら、配布するためにパッケージを準備する必要があります。 パッケージの準備は下記のステップで構成されています:

  • リリース向けにコンパイル - このステップでは、アプリケーションの属性の設定を行います。
  • プライベート キーの作成 - このステップは、一度だけ実行する必要があります。 プライベート キーは、APK にデジタル署名するのに必要になります。 プライベート キーを準備した後は、以降のリリース予定のビルドではこのステップをスキップすることができます。
  • APK への署名 - このステップでは、前のステップで作成したプライベート キーを使って APK へ署名します。
  • APK を Zipalign - Zipalign とは、アプリケーションで実行する最適化プロセスです。
    これにより実行時に Android と APK をより効率的に相互作用させることができます。Xamarin.Android は実行時にチェックを行い、APK を Zipalign していない場合には、アプリケーションを実行させないようにします。
最後の二つのアプリケーションのリリースの準備の手順は、Xamarin.Studio と Visual Studio では異なります。これらの手順の違いは、以下で詳しく説明します。

アプリケーションのリリース向けにコンパイル

配布の最初のステップは、Xamarin.Android アプリケーションをリリース向けにコンパイルします。 リリース向けにコンパイルには以下が含まれます:

  • デバックモードの無効 - ユーザーが ADB や他のツールを使用してアプリケーションをデバックできないようにします。
  • アプリケーションのアイコンの指定 - 各 Xamarin.Android アプリケーションは、アプリケーションのアイコンを指定する必要があります。技術的に必要というわけではないですが、Google Play などのマーケットプレイスでは必要です。
  • アプリケーションのバージョン管理 - このステップには、バージョン情報の初期化とアップデートが含まれます。このステップは、将来、アプリケーションをアップデートした際に、ユーザーがどのバージョンをインストールしているのか確認するのに重要になります。
  • リンカーの設定 - リンカは、Xamarin.Android 固有のステップであり、不要なコードを取り除くことで APK の最終的なサイズを大幅に縮小できます。
  • コンパイル - このステップは、コードとアセットを APK にコンパイルし、署名の準備をします。
これらの各ステップを以下で詳しく説明します。


デバックモードの無効

Android アプリケーションの開発中、JDWP (Java Debug Wire Protocol) を使用してデバッグします。 これは、ADB などのツールでデバッグの目的で JVM との通信を可能とするテクノロジーです。 JDWP は、Xamarin.Andorid のアプリケーションをデバックモードでビルドするようにデフォルトで設定されています。 開発中、JDWP は重要ですが、一方でアプリケーションのリリース向けには、セキュリティの問題が発生します。

注意:

リリース バージョンのアプリケーションでは、常にデバッグモードを無効にしてください。デバッグモードを無効にしない場合、JDWP を通して Java のプロセスへのフルアクセスが可能となり、アプリケーションのコンテキストの生成物のコードを実行してしまいます。 Android のマニフェスト内には、android:debuggable の属性があり、アプリケーションをデバッグ可能かどうかコントロールします。一般的には、android:debuggable を false に設定してください。

一番簡単な方法として、以下のように、AssemblyInfo.cs に条件付きコンパイルのコードを追加します:

#if DEBUG
[assembly: Application(Debuggable=true)]
#else
[assembly: Application(Debuggable=false)]
#endif

アプリケーションのアイコンの指定

Xamarin.Android アプリケーションにアプリケーションのアイコンを指定することを強く推奨します。 アイコンの指定がない場合、Android アプリケーションの公開ができないアプリケーションのマーケットプレイスもあります。

ApplicationAttribute の Icon プロパティを使用して、Xamarin.Android プロジェクト用にアプリケーションのアイコンを指定します。 以下のサンプル コードのように、Properties\AssemblyInfo.cs ファイルで属性を宣言することができます:

[assembly: Application(Icon = "@drawable/ic_launcher")]

Xamarin Studio の場合、以下のスクリーンショットのように Xamarin.Android アプリケーション以下にある Project Options ダイアログからアプリケーションのアイコンを指定することができます:

Visual Studio 2010 向けの Xamarin.Android プラグインでは、この設定がないので、アプリケーションのアイコンを ApplicationAttribute を使用して指定する必要があります。

バージョン管理

バージョン管理は、Android アプリケーションのメンテナンスや配布に重要です。 バージョン番号を付けない場合、アプリケーションをアップデートする場面で不便になることがあります。

バージョン管理を支援するために、Android は 2種類の異なる情報を認識します。 一つ目は、バージョン コードです。Android とアプリケーションの内部でバージョン コードを使用します。 二つ目は、バージョン名です。ユーザーが使用している特定のデバイスにインストールしたアプリケーションのバージョンに関して、ユーザーが確認できるためのみにバージョン名を使用します。

バージョン情報を提供するために使用可能な 2つの属性があります:

  • android:versionCode - アプリケーションのバージョンを表す整数値です。殆どのアプリケーションは、1 から開始し、ビルドする度に値を上げます。この値は、android:versionName 属性とは関連性はありません。アプリケーションおよび公開サービスでは、ユーザーはこの値を見ることはできません。
  • android:versionName - ユーザーや Google Play で確認できる文字列の値です。Android 内部では、この値を使用しません。ユーザーがデバイスにインストールしたビルドを確認しやすくするために、任意の文字列値を指定することができます。

Xamarin Studio の場合、以下の図のように、Build... Android Application タブ以下の Project Option からこれらの値を指定することができます:

Visual Studio 2013 の場合、以下の図のように、Project Properties の Android Manifest セクションからこれらの値を指定することができます:

リリース向けのアプリケーションのコンパイル

一般的に、デフォルトでは Debug モードを使用してアプリケーションを開発します。これを Release モードに変更する必要があります。 Release モードでは、共通ランタイムを無効にし、リンクを有効にすることで、Xamarin.Android が必要とするランタイムの部分のみをとりだします。 Xamarin.Android のリンカーは、static analysis (静的アナリシス) を使用すいて、Xamarin.Android のアプリケーションが使用または参照するアセンブリやタイプ、タイプ メンバーを決定します。 その後、リンカーは不要なアセンブリやタイプ、使用していない、または参照していないメンバーをすべて削除します。 その結果、パッケージのサイズを大幅に減少させることができます。例えば、HelloWorld のサンプルの場合、以下のように、APK の最終的なサイズを 83% 削減させることができました:

Configuration

Xamarin.Android 4.2.5 Size

None

17.4 MB

SDK Assemblies Only

3.0 MB

Visual Studio 2013 の場合、以下の図のように、プロジェクトのプロパティからリンカーのオプションを設定します: Android Options 以下で、Linker タブをクリックします:

Linking のプルダウンメニューには、リンカーのコントロール用に以下のオプションがあります:

  • None - リンカーを無効にします。リンクを実行しません。
  • Sdk Assemblies Only - Xamarin.Android が必要とするアセンブリのみをリンクします。その他のアセンブリはリンクされません。
  • Sdk and User Assemblies - Xamarin.Android が必要とするアセンブリだけではなく、アプリケーションが必要とするすべてのアセンブリをリンクします。
Xamarin Studio の場合、以下の図のように、Xamarin.Android Build セクションのプロジェクト プロパティの Linker タブからリンカーのオプションを設定します:

リンカーのコントロール用に以下のオプションがあります:

  • Don't link - リンカーを無効にします。リンクを実行しません。
  • Link SDK assemblies only - Xamarin.Android が必要とするアセンブリのみをリンクします。その他のアセンブリはリンクされません。
  • Link all assemblies - Xamarin.Android が必要とするアセンブリだけではなく、アプリケーションが必要とするすべてのアセンブリをリンクします。
リンクすることで、意図しない副作用があるので、Release モードでアプリケーションをテストすることはとても重要です。 物理デバイス上でテストすることも重要です。

リンカーの設定後に、アプリケーションをコンパイルします。 次に、プライベート キーストアと連動している署名付き APK を作成します。Xamarin Studio と Visual Studio 2010 では、異なるワークフローでキーストアに署名します; これらのワークフローは、次のセクションにて説明します。

プライベート キーストアの生成

キーストアとは、セキュリティ証明書のデータベースで Jave SDK の keytool プログラムを使用して生成します。 キーストアは、Xamarin.Android アプリケーションの公開には重要で、Android ではデジタル署名されていないアプリケーションは実行しません。

開発中、Xamarin.Android は、デバック用のキーストアを使用してアプリケーションを署名することで、アプリケーションを直接エミュレーターに配布したり、デバッグ可能なアプリケーションを使えるように設定したデバイスに配布できます。 しかし、このキーストアは、アプリケーションの配布目的では、有効なキーストアとしては使用できません。

従って、アプリケーションの署名用にプライベート キーストアを生成し使用する必要があります。 このステップは、一度実行するだけで、プログラムの更新の公開や他のアプリケーションを署名する時に同じキーを使用することができます。

また、キーストアは大切に保管してください。 キーストアを紛失した場合、Google Play では、アプリケーションのアップデートを公開することができなくなります。 キーストアを紛失した場合の解決策として、新しくキーストアを生成し、新しいキーで APK に再度署名を行い、新しいアプリケーションとして申請します。 その後、古いアプリケーションは、Google Play から削除する必要があります。 同様に、新しく生成したキーストアが侵害または一般に公開されてしまった場合、非公式または悪意のあるバージョンのアプリケーションを配布することが可能になってしまいます。

新しいキーストアの生成

新しいキーストアを生成するには、Java SDK のコマンドライン ツールである keytool が必要になります。 以下のコマンドは、keytool を利用する方法の一例です (<my-filename> をキーストアのファイル名に置き換え、<key-name> をキーストア内のキーの名前に置き換えます):

$ keytool -genkey -v -keystore <filename>.keystore -alias <key-name> -keyalg RSA -keysize 2048 -validity 10000

まず初めに、keytool はキーストアのパスワードを要求します。 その後、キーを生成するためにいくつか情報を要求します。 以下のサンプルは、xample.keystore ファイルに格納する publishingdoc と呼ばれる新しいキーの作成の例です:

$ keytool -genkey -v -keystore xample.keystore -alias publishingdoc -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:  Ham Chimpanze
What is the name of your organizational unit?
  [Unknown]:  NASA
What is the name of your organization?
  [Unknown]:  NASA
What is the name of your City or Locality?
  [Unknown]:  Cape Canaveral
What is the name of your State or Province?
  [Unknown]:  Florida
What is the two-letter country code for this unit?
  [Unknown]:  US
Is CN=Ham Chimpanze, OU=NASA, O=NASA, L=Cape Canaveral, ST=Florida, C=US correct?
  [no]:  yes
Generating 2,048 bit RSA key pair and self-signed certificate (SHA1withRSA) with a validity of 10,000 days
        for: CN=Ham Chimpanze, OU=NASA, O=NASA, L=Cape Canaveral, ST=Florida, C=US
Enter key password for <publishingdoc>
        (RETURN if same as keystore password):
Re-enter new password:
[Storing xample.keystore]

キーストアに格納するキーをリストするには、-list オプションで keytool を使用します:

$ keytool -list -keystore xample.keystore

Xamarin Studio で APK を署名

bin/Release フォルダ内の APK は、Xamarin.Android で使用するデバック用のキーストアで署名されているので、この APK は配布しないでください。 デバイスにこの APK をインストールすることはできず、Google Play も許可いたしません。 署名付きの APK を作成するには、署名されていない APK とプライベート キーストアを組み合わせて使用する必要があります。

以下のように、Xamarin Studio で署名付き APK を作成するには、一連のダイアログを実行し、ビルドの設定を Release にし、[プロジェクト] > [Publish Android Application] メニューアイテムを選択します:

メニューアイテムを選択後、[Use the Keystore] 選択ダイアログを使用して、キーストアにあるキーを選択し、パスワードを入力します:

Forward をクリックした後、Select destination ダイアログが表示されます。 このダイアログを使用して、署名付き APK の名前を付け APK を作成するディレクトリの指定を行います:

Create ボタンをクリック後、Xamarin Studio は APK をコンパイルし、指定したキーで署名します。 その後、APK に対して zipalign ツールが実行され、これらは同時に処理されます。

この時点で Xamarin Studio は、配布用に準備した APK に Xamarin.Android アプリケーションのコンパイルが完了です。

Visual Studioで APK への署名 (Xamarin.Android 4.2.6 またはそれ以降)

Xamarin.Android 4.2.6 以降では、Publish Android Application helper 機能が追加されました (Xamarin Studio の helper プロセスに似ています)。 アプリケーションを公開するには、まずビルド モードを Release に変更します。 ビルド設定を変更後、以下の図のように [ツール] メニューから [Publish Android Application] を選択します:

メニューアイテムを選択後、[Use the Keystore] ダイアログを選択し、キーストアにあるキーを選び、パスワードを入力します:

Next をクリックした後、Select destination ダイアログが表示されます。 このダイアログでは、署名付き APK の名前を付け、APK を作成するディレクトリの指定を行います:

Publish ボタンをクリック後、Visual Studio は APK をコンパイルし、指定されたキーで署名します。その後、APK に対して zipalign ツールが実行され、これらは同時に処理されます。

この時点で Visual Studio は、配布用に準備した APK に Xamarin.Android アプリケーションのコンパイルが完了です。

 


Infragistics Infragistics
エンタープライズ向け統合 UI 開発コンポーネント。WinForms、モバイル、Web 用の UI コントロール。
CodeValue OzCode CodeValue OzCode
Visual Studio デバッガー用のヘッドアップ ディスプレイ。
SmartBear Software SmartBear
GUI テスト / プロファイラー / 負荷テスト / API テスト: ソフトウェア テストの自動化/工数削減/品質向上。
JetBrains
世界中で 100 万人以上の開発者が使用する総合開発環境 (IDE) とコーディング ツール。