M7350v1_en_gpl

This commit is contained in:
T
2024-09-09 08:52:07 +00:00
commit f9cc65cfda
65988 changed files with 26357421 additions and 0 deletions

View File

@ -0,0 +1,336 @@
page.title=アプリケーションへの署名
@jd:body
<div id="qv-wrapper">
<div id="qv">
<h2>署名の概略</h2>
<ul>
<li>Android アプリケーションはすべて<em>署名する必要がある</em></a></li>
<li>自己署名キーで署名可能</li>
<li>アプリケーションの署名方法は重要です。このドキュメントをよくお読みください</li>
<li>開発プロセスの初期段階で署名戦略を決定します</li>
</ul>
<h2>このドキュメントの内容</h2>
<ol>
<li><a href="#overview">概要</a></li>
<li><a href="#strategies">署名戦略</a></li>
<li><a href="#setup">署名の基本設定</a></li>
<li><a href="#debugmode">デバッグ モードでの署名</a></li>
<li><a href="#releasemode">公開リリースへの署名</a>
<ol>
<li><a href="#releasecompile">リリース向けのコンパイル</a></li>
<li><a href="#cert">適切な秘密鍵の取得</a></li>
<li><a href="#signapp">アプリケーションの署名</a></li>
<li><a href="#ExportWizard">Eclipse ADT によるコンパイルと署名</a></li>
</ol>
</li>
<li><a href="#secure-key">秘密鍵のセキュリティ設定</a></li>
</ol>
<h2>関連項目</h2>
<ol>
<li><a href="{@docRoot}guide/publishing/versioning.html">アプリケーションのバージョニング</a></li>
<li><a href="{@docRoot}guide/publishing/preparing.html">公開の準備</a></li>
</ol>
</div>
</div>
<p>このドキュメントでは、Android アプリケーションを携帯端末ユーザーに公開する前に署名する方法について説明します。</p>
<h2 id="overview">概要</h2>
<p>Android システムでは、インストールするすべてのアプリケーションに対してデジタル署名されて証明書を必要とします。この証明書の秘密鍵は、アプリケーションのデベロッパーが所持するものです。Android システムは証明書をアプリケーションの作成者の識別手段、およびアプリケーション間の信頼関係の確立手段として使用します。証明書は、ユーザーがどのアプリケーションをインストールできるかを制御するものではありません。証明書は認証機関によって署名される必要はありません。通常の Android アプリケーションは自己署名証明書を使用して正常に機能します。</p>
<p>Android アプリケーションの署名について、次の点を理解することが重要です:</p>
<ul>
<li>すべてのアプリケーションは<em>署名される必要があります</em>。署名されていないアプリケーションはシステムにインストールされません。</li>
<li>アプリケーションの署名に、自己署名証明書を使用できます。認証機関は不要です。</li>
<li>アプリケーションをエンド ユーザーにリリースする準備ができたら、適切な秘密鍵を使用してアプリケーションに署名する必要があります。SDK ツールで生成されたデバッグ キーで署名されたアプリケーションは、公開できません。
</li>
<li>システムが署名証明書の有効期限を確認するのは、インストール時のみです。アプリケーションのインストール後に署名者証明書が期限切れになった場合、アプリケーションは正常な動作を継続します。</li>
<li>標準ツールである Keytool と Jarsigner を使用してキーを生成し、アプリケーションの .apk ファイルに署名できます。</li>
</ul>
<p>Android システムは、適切に署名されていないアプリケーションをインストールせず、実行もしません。この規則は、実際のデバイスでもエミュレータでも、Android システムが実行されるすべての状況で適用されます。このため、エミュレータまたはデバイス上で実行またはデバッグする前に、アプリケーションの署名を設定する必要があります。</p>
<p>Android SDK ツールは、デバッグ時のアプリケーション署名を支援します。「ADT Plugin for Eclipse」と「Ant ビルド ツール」では両方とも、<em>デバッグ モード</em>と<em>リリース モード</em>の 2 種類の署名モードを利用できます。
<ul>
<li>開発およびテスト中は、デバッグ モードでコンパイルできます。デバッグ モードでは、ビルド ツールは JDK に付属の Keytool ユーティリティを使用して、キーストアとキーを既知のエイリアスとパスワードで作成します。コンパイルのたびに、ツールはデバッグ キーを使用してアプリケーションの .apk ファイルに署名します。パスワードは既知のものなので、コンパイルのたびにツールにキーストア/キー パスワードを入力する必要はありません。</li>
<li>アプリケーションをリリースする準備ができたら、リリース モードでコンパイルして、.apk に<span style="color:red">秘密鍵</span>で署名する必要があります。次の 2 通りの方法があります:
<ul>
<li>Keytool と Jarsigner をコマンド ラインで使用する方法。このアプローチでは、まずアプリケーションを<em>署名されていない</em> .apk にコンパイルします。次に、Jarsignerまたは類似のツールを使用して秘密鍵で .apk に手動で署名します。適切な秘密鍵を所持していない場合は、Keytool を手動で実行して独自のキーストア/キーを生成し、Jarsigner でアプリケーションに署名できます。</li>
<li>ADT Export Wizard を使用する方法。ADT プラグイン搭載の Eclipse を使用して開発している場合、Export Wizard を使用してアプリケーションをコンパイルし、秘密鍵を生成して(必要な場合)、.apk に署名できます。この作業をすべて Export Wizard を使用して 1 つのプロセスで実行できます。
</li>
</ul>
</li>
</ul>
<h2 id="strategies">署名戦略</h2>
<p>アプリケーションの署名は、開発アプローチに一部影響します。特に、複数のアプリケーションをリリースする予定の場合、高い影響を与えます。 </p>
<p>一般に、すべてのデベロッパーに推奨される戦略は、アプリケーションの予期される使用期間を通じて同じ証明書ですべてのアプリケーションに署名することです。このようにするには、複数の理由があります: </p>
<ul>
<li>アプリケーションのアップグレード - アプリケーションのアップグレードをリリースするとき、ユーザーが新バージョンにシームレスにアップグレードできるように、アップグレードされたアプリケーションにも同じ証明書で署名します。システムがアプリケーションのアップデートをインストールする際は、新バージョンの証明書のいずれかが旧バージョンの証明書と一致する場合、システムがアップデートを許可します。一致する証明書を使用せずに署名する場合は、アプリケーションに別のパッケージ名を割り当てる必要があります。この場合、新しいバージョンがまったく新しいアプリケーションとしてインストールされます。 </li>
<li>アプリケーションのモジュール性 - Android システムでは、アプリケーションが要求する場合、同じ証明書で署名されたアプリケーションを同じプロセスで実行できます。これにより、システムはこれらを単一のアプリケーションとして取り扱います。このようにすればアプリケーションをモジュールとして配備でき、ユーザーは必要に応じて各モジュールを個別に更新できます。</li>
<li>許可によるコード/データ共有 - Android システムでは、署名ベースの権限付与を実施しているため、アプリケーションは指定された証明書で署名されている別のアプリケーションに機能を提供できます。同じ証明書で複数のアプリケーションに署名し、署名に基づいた権限のチェックを行うことで、アプリケーションはコードとデータを安全な方法で共有できます。 </li>
</ul>
<p>署名戦略を決定する際のもう 1 つの重要な検討事項として、アプリケーションの署名に使用するキーの有効期間の設定方法があります。</p>
<ul>
<li>アプリケーションのアップグレードをサポートするには、キーの有効期間は、アプリケーションの予定される試用期間以上である必要があります。有効期間は、25年以上であることが推奨されます。キーの有効期間が切れた場合、ユーザーはアプリケーションの新バージョンにシームレスにアップグレードできなくなります。</li>
<li>同じキーで複数の異なるアプリケーションに署名する場合、キーの有効期間が、今後のアプリケーション スイートに追加される依存アプリケーションを含め、<em>すべてのアプリケーションのすべてのバージョンの</em>予定される使用期間を超えることを確認してください。 </li>
<li>アプリケーションを Android マーケットに公開する予定の場合、アプリケーションの署名に使用するキーの有効期間を、2033 年 10 月 22 日以降の期限に設定する必要があります。マーケット サーバーは、新バージョンが公開されたときにユーザーがマーケット アプリケーションをシームレスにアップグレードできるよう、この要件を義務付けています。 </li>
</ul>
<p>アプリケーションの設計時にこれらの点を考慮し、アプリケーションの署名に<a href="#cert">適切な証明書</a>を使用してください。 </p>
<h2 id="setup">署名の基本設定</h2>
<p>キーストアとデバッグ キーの生成をサポートするため、SDK ビルド ツールで Keytool を使用できることを初めに確認してください。たいていの場合、「JAVA_HOME」環境変数を設定して適切な JDK を参照させることで、SDK ビルド ツールで Keytool を認識できます。または、JDK バージョンの Keytool を PATH 変数に追加しても認識できます。</p>
<p>Linux バージョンに付属されている GNU Java コンパイラで開発している場合は、gcj バージョンではなく、JDK バージョンの Keytool を使用していることを確認してください。Keytool が既に PATH に指定されている場合は、<code>/usr/bin/keytool</code> の symlink を指していることがあります。この場合は、symlink ターゲットが JDK の Keytool を指していることを確認してください。</p>
<p>アプリケーションを公開する場合は、Jarsigner ツールをコンピュータで使用できるようにする必要があります。Jarsigner と Keytool の両方が JDK によって提供されます。 </p>
<h2 id="debugmode">デバッグ モードでの署名</h2>
<p>Android ビルド ツールにはデバッグ署名モードがあり、アプリケーションの開発とデバッグがスムーズに行えます。また、.apk をエミュレータまたはデバイスにインストールする際の、署名に対する Android システム要件を満たします。デバッグモードでは、SDK ツールは Keytool を呼び出してデバッグ キーストアとキーを作成します。</p>
<p>SDK ツールは事前に指定された名前とパスワードを使用してデバッグ キーストア/キーを作成します。</p>
<ul>
<li>キーストア名 「debug.keystore」</li>
<li>キーストアのパスワード 「android」</li>
<li>キーのエイリアス 「androiddebugkey」</li>
<li>キーのパスワード 「android」</li>
<li>CN 「CN=Android Debug,O=Android,C=US」</li>
</ul></p>
<p>必要に応じて、デバッグ キーストア/キーの場所および名前を変更できます。また、自分で作成したデバッグ キーストア/キーを指定することもできます。Eclipse/ADT で、[[]<strong>ウィンドウWindows</strong>] &gt; [[]<strong>設定Prefs</strong>] &gt; [[]<strong>Android</strong>] &gt; [[]<strong>ビルドBuild</strong>] を選択します。ただし、自分で作成したデバッグ キーストア/キーは、デフォルトのデバッグ キー(上述)と同じキーストア/キー名とパスワードを使用する必要があります。</p>
<p class="note"><strong>注:</strong> デバッグ証明書で署名した場合は、アプリケーションを<em>公開できません</em>。</p>
<h3>Eclipse ユーザー</h3>
<p>Eclipse/ADT で開発し、Keytool を上記のように設定してある場合は、デバッグモードにおける署名はデフォルトで有効になっています。アプリケーションを実行またはデバッグするときに、ADT は .apk にデバッグ証明書で署名し、エミュレータにインストールします。ADT が Keytool にアクセスできる場合は、ユーザーは特に操作する必要はありません。</p>
<h3>Ant ユーザー</h3>
<p>Ant を使用して .apk ファイルを構築する場合、デバッグ署名モードは <code>debug</code> オプションを使用することで有効になります(<code>android</code> ツールで生成された <code>build.xml</code> ファイルを使用していることが前提となります)。<code>ant debug</code> を実行してアプリケーションをコンパイルする際、ビルド スクリプトはキーストア/キーを生成し、.apk に署名します。ユーザーは操作する必要はありません。詳細は、<a href="{@docRoot}guide/developing/other-ide.html#DebugMode">その他の統合開発環境での開発: デバッグモードにおけるビルド </a> をお読みください。</p>
<h3 id="debugexpiry">デバッグ証明書の有効期限</h3>
<p>デバッグ モードEclipse/ADT と Ant ビルドのデフォルト)でのアプリケーション署名に使用した自己署名証明書には、作成日から 365 日の有効期限が設定されます。</p>
<p>証明書の期限が切れると、ビルド エラーが発生します。Ant ビルドでは、エラーは次のようになります:</p>
<pre>debug:
[echo] Packaging bin/samples-debug.apk, and signing it with a debug key...
[exec] Debug Certificate expired on 8/4/08 3:43 PM</pre>
<p>Eclipse/ADT では、Android コンソールに同様のエラーが表示されます。</p>
<p>この問題を解決するには、<code>debug.keystore</code> ファイルを削除します。AVD のデフォルトの格納場所は、OS X と Linux の場合は <code>~/.android/avd</code>、Windows XP の場合は <code>C:\Documents and Settings\<user>\.android\</code>、Windows Vista の場合は <code>C:\Users\<user>\.android\</code> です。</p>
<p>次にビルドを行うと、ビルド ツールは新しいキーストアとデバッグ キーを再度生成します。</p>
<p>開発コンピュータがグレゴリオ暦以外のロケールを使用している場合、ビルド ツールが誤って期限切れのデバッグ証明書を生成することがあります。このため、アプリケーションをコンパイルしようとするとエラーが発生します。解決策については、トラブルシューティング トピックの <a href="{@docRoot}resources/faq/troubleshooting.html#signingcalendar">ビルド ツールが期限切れのデバッグ証明書を生成するため、アプリケーションがコンパイルできない</a> をご覧ください。 </p>
<h2 id="releasemode">公開リリースへの署名</h2>
<p>アプリケーションを他のユーザーに公開する準備ができたら、次のことを行う必要があります:</p>
<ol>
<li>アプリケーションをリリース モードでコンパイルする</li>
<li>適切な秘密鍵を取得する</li>
<li>アプリケーションに秘密鍵で署名する</li>
</ol>
<p>以下のセクションでは、これらの手順を実行する方法について説明します。</p>
<p>ADT プラグイン搭載の Eclipse を使用している場合、これらの手順を実行する代わりに Export Wizard を使用して .apk をコンパイルして秘密鍵で署名できます。Export Wizard では、処理過程で新しいキーストアと秘密鍵の生成も可能です。<a href="#ExportWizard">Eclipse ADT によるコンパイルと署名</a>を参考にコンパイルを行ってください。</p>
<h3 id="releasecompile">リリース向けのコンパイル</h3>
<p>アプリケーションのリリースを準備するには、リリース モードでコンパイルする必要があります。リリース モードでは、Android ビルド ツールはアプリケーションを通常どおりにコンパイルしますが、デバッグ キーで署名しません。</p>
<p class="warning"><strong>注:</strong> 署名されていないアプリケーション、またはデバッグ キーで署名されたアプリケーションはリリースできません。</p>
<h4>Eclipse ユーザー</h4>
<p><em>署名されていない</em> .apk ファイルを Eclipse からエクスポートするには、パッケージ エクスプローラーPackage Explorerでプロジェクトを右クリックして、[[]<strong>Android ツールAndroid Tools</strong>] &gt; [[]<strong>署名されていないアプリケーション パッケージのエクスポートExport Unsigned Application Package</strong>] を選択します。次に、署名されていない .apk ファイルの場所を指定します(または、<code>AndroidManifest.xml</code> ファイルを Eclipse で開き、[[]<em>概要Overview</em>] タブを開いて [[]<strong>署名されていない .apk のエクスポートExport an unsigned .apk</strong>] をクリックします)。</p>
<p>Export Wizard では、コンパイルと署名の手順を一緒に処理できます。<a href="#ExportWizard">Eclipse ADT によるコンパイルと署名</a>をご覧ください。</p>
<h4>Ant ユーザー</h4>
<p>Ant を使用している場合は、必要な作業は Ant コマンドでビルド ターゲットとして「release」を指定するだけです。たとえば、Ant を build.xml ファイルがあるディレクトリから実行している場合、コマンドは次のようになります:</p>
<pre>$ ant release</pre>
<p>ビルド スクリプトは、アプリケーション .apk を署名せずにコンパイルします。</p>
<h3 id="cert">適切な秘密鍵の取得</h3>
<p>アプリケーションの署名を準備するには、まず署名に使用する適切な秘密鍵があることを確認することが必要です。適切な秘密鍵とは、次の条件を満たすものです:</p>
<ul>
<li>自分が所有している。</li>
<li>アプリケーションで識別される、個人、法人、または組織の実体を表す。</li>
<li>アプリケーションまたはアプリケーション スイートの予期される使用期間を超える有効期間を持っている。有効期間として、25 年以上を推奨します。
<p>アプリケーションを Android マーケットに公開する予定の場合、2033 年 10 月 22 日までの有効期間が必要です。有効期間がこの日付以前に期限切れになるキーで署名されたアプリケーションは、アップロードできません。
</p></li>
<li>Android SDK ツールで生成されたデバッグ キーではない。 </li>
</ul>
<p>自己署名されたキーを使用できます。適切なキーがない場合、Keytool を使用して生成する必要があります。<a href="#setup">基本設定</a>で説明した手順に従って、Keytool を使用できるようにしてください。</p>
<p>Keytool で自己署名キーを生成するには、<code>keytool</code> コマンドを使用して以下に示すオプション(および、必要に応じてその他のオプション)を渡します。 </p>
<p class="warning"><strong>注:</strong> Keytool を実行する前に、<a href="#secure-key">秘密鍵のセキュリティ設定</a>を読んで、キーのセキュリティを確保する方法と、自分とユーザーにとってセキュリティ確保が重要な理由を理解してください。特に、自分のキーを生成する場合、キーストアとキーの両方に強力なパスワードを選択する必要があります。</p>
<table>
<tr>
<th>Keytool のオプション</th>
<th>説明</th>
</tr>
<tr>
<td><code>-genkey</code></td><td>キー ペアを生成します(公開キーと秘密鍵)。</td>
</tr>
<tr>
<td><code>-v</code></td><td>詳しいメッセージを出力する。</td>
</tr>
<tr>
<td><code>-keystore&nbsp;&lt;keystore-name&gt;.keystore</code></td><td>秘密鍵を含むキーストアの名前。</td>
</tr>
<tr>
<td><code>-storepass &lt;password&gt;</code></td><td><p>キーストアのパスワード。</p><p>セキュリティ上の注意として、安全なコンピュータで作業している場合を除き、このオプションをコマンド ラインに指定しないでください。指定しなかった場合、Keytool からパスワードの入力が求められます。このため、パスワードはシェルの履歴に記録されません。</p></td>
</tr>
<tr>
<td><code>-alias &lt;alias_name&gt;</code></td><td>キーのエイリアス。</td>
</tr>
<tr>
<td><code>-keyalg &lt;alg&gt;</code></td><td>キーの生成時に使用する暗号化アルゴリズム。DSA と RSA の 2 つをサポートしています。</td>
</tr>
<tr>
<td><code>-dname &lt;name&gt;</code></td><td><p>キーの作成者を識別する、識別名。値は、自己署名証明書の発行者およびサブジェクト フィールドとして使用されます。 </p><p>このオプションはコマンド ラインで指定する必要はありません。指定しなかった場合、Jarsigner からそれぞれの識別名フィールドCN、OU など)の入力が求められます。</p></td>
</tr>
<tr>
<td><code>-validity &lt;valdays&gt;</code></td><td><p>キーの有効期間(日数)。 </p><p><strong>注:</strong> 10000 以上の値を推奨します。</p></td>
</tr>
<tr>
<td><code>-keypass &lt;password&gt;</code></td><td><p>キーのパスワード。</p>
<p>セキュリティ上の注意として、安全なコンピュータで作業している場合を除き、このオプションをコマンド ラインに指定しないでください。指定しなかった場合、Keytool からパスワードの入力が求められます。このため、パスワードはシェルの履歴に記録されません。</p></td>
</tr>
</table>
<p>秘密鍵を生成する Keytool コマンドの例を示します。</p>
<pre>$ keytool -genkey -v -keystore my-release-key.keystore
-alias alias_name -keyalg RSA -validity 10000</pre>
<p>上記のコマンド例を実行すると、Keytool からキーストアとキーのパスワードと、キーの識別名フィールドの指定が求められます。キーストアが <code>my-release-key.keystore</code> というファイルとして生成されます。キーストアとキーは、入力したパスワードで保護されます。キーストアには 1 つのキーが含まれ、10000 日間有効です。エイリアスは、後で使用する名前で、アプリケーションに署名するときにこのキーストアを参照する名前です。 </p>
<p>Keytool の詳細は <a
href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/#security">http://java.sun.com/j2se/1.5.0/docs/tooldocs/#security</a> のドキュメント(英語のみ)をご覧ください。</p>
<h3 id="signapp">アプリケーションの署名</h3>
<p>リリースする .apk に実際に署名する準備ができたら、Jarsigner ツールを使用して署名できます。<a href="#setup">基本設定</a>で説明したように、Jarsigner をコンピュータで使用できることを確認してください。また、秘密鍵を含むキーストアがあることも確認してください。</p>
<p>アプリケーションに署名するには、Jarsigner を実行して、アプリケーションの .apk と、.apk の署名に使用する秘密鍵を含むキーストアの両方を参照します。以下の表では、使用できるオプションを示します。 <p>
<table>
<tr>
<th>Jarsigner のオプション</th>
<th>説明</th>
</tr>
<tr>
<td><code>-keystore&nbsp;&lt;keystore-name&gt;.keystore</code></td><td>秘密鍵を含むキーストアの名前。</td>
</tr>
<tr>
<td><code>-verbose</code></td><td>詳しいメッセージを出力する。</td>
</tr>
<tr>
<td><code>-storepass &lt;password&gt;</code></td><td><p>キーストアのパスワード。 </p><p>セキュリティ上の注意として、安全なコンピュータで作業している場合を除き、このオプションをコマンド ラインに指定しないでください。指定しなかった場合、Jarsigner からパスワードの入力が求められます。このため、パスワードはシェルの履歴に記録されません。</p></td>
</tr>
<tr>
<td><code>-keypass &lt;password&gt;</code></td><td><p>秘密鍵のパスワード。 </p><p>セキュリティ上の注意として、安全なコンピュータで作業している場合を除き、このオプションをコマンド ラインに指定しないでください。指定しなかった場合、Jarsigner からパスワードの入力が求められます。このため、パスワードはシェルの履歴に記録されません。</p></td>
</tr>
</table>
<p>Jarsigner を使用して <code>my_application.apk</code> というアプリケーション パッケージに署名する例を、上記で作成したキーストアを使用して示します。
</p>
<pre>$ jarsigner -verbose -keystore my-release-key.keystore
my_application.apk alias_name</pre>
<p>上記のコマンドを実行すると、Jarsigner からキーストアとキーのパスワードの入力が求められます。.apk がその場で変更され、.apk は署名されます。.apk に別のキーで複数回署名できます。</p>
<p>.apk が署名されたことを確認するには、次のようなコマンドを使用できます:</p>
<pre>$ jarsigner -verify my_signed.apk</pre>
<p>.apk が適切に署名されると、Jarsigner から「jar verified」と出力されます。詳細情報が必要な場合は、次のコマンドを使用できます。</p>
<pre>$ jarsigner -verify -verbose my_application.apk</pre>
<p>または、次のコマンドを使用します。</p>
<pre>$ jarsigner -verify -verbose -certs my_application.apk</pre>
<p>上記の <code>-certs</code> オプションが付加されたコマンドでは、「CN=」行が出力され、キーの作成者が示されます。</p>
<p class="note"><strong>注:</strong> 「CN=Android Debug」と出力される場合、.apk が Android SDK によって生成されたデバッグ キーで署名されたことを示しています。アプリケーションをリリースする予定の場合は、デバッグ キーではなく秘密鍵で署名する必要があります。</p>
<p>Jarsigner の詳細は <a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/#security">http://java.sun.com/j2se/1.5.0/docs/tooldocs/#security</a> のドキュメント(英語のみ)をご覧ください。</p>
<h3 id="ExportWizard">Eclipse ADT によるコンパイルと署名</h3>
<p>ADT 搭載 Eclipse を使用している場合、Export Wizard を使用して<em>署名済み</em> .apk をエクスポートできます必要に応じて、新しいキーストアを作成することもできます。Export Wizard は、Keytool と Jarsigner のすべての処理を、コマンド ラインを使用せず、グラフィカル ユーザー インターフェースで署名を実行できます。Export Wizard は Keytool と Jarsigner の両方を使用するため、上記の<a href=#setup">署名の基本設定</a>の条件を満たすコンピュータで使用できます。</p>
<p>署名された .apk を作成するには、パッケージ エクスプローラーPackage Explorerでプロジェクトを右クリックして、<strong>[[]Android ツールAndroid Tools] &gt; [[]署名済みアプリケーション パッケージのエクスポートExport Signed Application Package]</strong> を選択します(または、<code>AndroidManifest.xml</code> ファイルを Eclipse で開き、[[]<em>概要Overview</em>] タブを開いて [[]<strong>Export Wizard を使用するUse the Export Wizard</strong>] をクリックします)。表示されたウィンドウには、アプリケーションのエクスポート中に見つかったエラーが表示されます。エラーが見つからなかった場合は Export Wizard で処理を続行します。.apk に署名する秘密鍵の選択や、新しいキーストアと秘密鍵の作成など、アプリケーション署名のプロセスを手順を追って実行できます。</p>
<p>Export Wizard が完了すると、配布可能な署名済み .apk が作成されています。</p>
<h2 id="secure-key">秘密鍵のセキュリティ設定</h2>
<p>秘密鍵のセキュリティ設定は、作成者とユーザーの両者にとって重要です。他人にキーを使用させたり、第三者が見つけて使用できるような安全ではない場所にキーストアとキーを放置したりすると、作成者とユーザー間の信頼が損なわれます。 </p>
<p>他者が許可を得ずにキーを取得した場合、その人物はアプリケーションに署名して配布し、本物のアプリケーションを故意に置き換えたり破損させたりすることができます。このような人物は、身元を詐称してアプリケーションに署名して配布し、その他のアプリケーションまたはシステム自体を攻撃したり、ユーザー データを破損させたり盗み出したりすることもあります。 </p>
<p>キーの有効期限が切れるまで、秘密鍵のセキュリティを常に適切に維持できるかは、デベロッパーとしての評価を左右します。キーを安全に保つためのヒントをいくつか紹介します。 </p>
<ul>
<li>キーストアとキーに強力なパスワードを選択します。</li>
<li>Keytool でキーを生成するとき、<em></em>コマンド ラインで <code>-storepass</code> および <code>-keypass</code> オプションを指定しないようにします。指定すると、パスワードがシェル履歴に記録され、コンピュータのすべてのユーザーがアクセスできるようになります。</li>
<li>同様に、Jarsigner でアプリケーションに署名するとき、<em></em>コマンド ラインで <code>-storepass</code> と <code>-keypass</code> オプションを指定しないようにします。 </li>
<li>秘密鍵を誰にも与えたり貸したりせず、不正なユーザーにキーストアとキーのパスワードを知られないようにします。</li>
</ul>
<p>一般的には、キーの生成、使用、保管に関して常識的な注意を払っていれば、セキュリティを確保することができます。 </p>

View File

@ -0,0 +1,158 @@
page.title=公開の準備
@jd:body
<!--
<div id="qv-wrapper">
<div id="qv">
<h2>In this document</h2>
<ol>
<li><a href=""></a></li>
</ol>
</div>
</div>
-->
<p>アプリケーションの公開とは、アプリケーションをテストして適切にパッケージし、Android 搭載の携帯端末のユーザーが利用できる状態にすることです。</p>
<p>アプリケーションを公開して Android 搭載デバイスにインストールするには、いくつかの作業を行ってアプリケーションの準備を整える必要があります。このドキュメントでは、アプリケーションのリリースを成功させるための準備における、重要なチェックポイントを説明しています。
</p>
<p>アプリケーションを Android マーケットに公開する場合は、アプリケーションの具体的な準備要件について <a
href="{@docRoot}guide/publishing/publishing.html#market">Android マーケットでの公開</a> もご覧ください。 </p>
<p>アプリケーションを公開する方法の一般的な情報については、<a href="{@docRoot}guide/publishing/publishing.html">Publishing Your Applications</a> のドキュメントをご覧ください。 </p>
<div class="special">
<p>アプリケーションのリリースを準備する前の作業:</p>
<ol>
<li>アプリケーションを実際のデバイスで徹底的にテストする </li>
<li>アプリケーションへのエンド ユーザー ライセンス契約の追加を検討する</li>
<li>アプリケーションのマニフェストにアイコンとラベルを指定する</li>
<li>ロギングとデバッグを無効にして、データとファイルをクリーンアップする</li>
</ol>
<p>アプリケーションの最終コンパイルを実行する前の作業:</p>
<ol start="5">
<li>アプリケーションでバージョン管理を行う</li>
<li>適切な暗号化キーを取得する</li>
<li>アプリケーションが MapView 要素を使用している場合は、Maps API キーに登録する</li>
</ol>
<p><em>アプリケーションのコンパイル</em></p>
<p>アプリケーションをコンパイルした後の作業:</p>
<ol start="8">
<li>アプリケーションに署名する</li>
<li>コンパイルしたアプリケーションをテストする</li>
</ol>
</div>
<h2 id="releaseready">アプリケーションのリリースを準備する前の作業</h2>
<h3 id="test">1. アプリケーションを実際のデバイスで徹底的にテストする</h3>
<p>アプリケーションをできる限り広範に徹底的にテストすることが重要です。この作業を支援するため、Android では多数のテスト用クラスとツールを用意しています。{@link android.app.Instrumentation Instrumentation} を使用して JUnit およびその他のテスト ケースを実行できます。また、<a href="{@docRoot}guide/developing/tools/monkey.html">UI/Application Exerciser Monkey</a> などのテスティング ツールを使用できます。 </p>
<ul>
<li>ユーザーがアプリケーションを正常に実行できるようにするため、アプリケーションが実行されると予想されるタイプの携帯端末の実機を入手してください。実際のデバイスで、実際のネットワーク条件の下でアプリケーションをテストします。アプリケーションを実際のデバイスでテストすることは非常に重要です。これによって、作成したユーザー インターフェース要素のサイズが正しく(特にタッチスクリーン UI の場合)、アプリケーションのパフォーマンスと電池効率が適正であることを確認できるからです。</li>
<li>アプリケーションの対象とするタイプの携帯端末が手に入らない場合は、<code>-dpi</code>、<code>-device</code>、<code>-scale</code>、<code>-netspeed</code>、<code>-netdelay</code>、<code>-cpu-delay</code> などのエミュレータ オプションを使用して、エミュレータの画面、ネットワーク パフォーマンス、その他の属性をモデル化して可能な限り対象デバイスに適応させることができます。このようにして、アプリケーションの UI とパフォーマンスをテストできます。ただし、公開する前にアプリケーションを実際の対象デバイスでテストすることを強く推奨します。 </li>
<li>アプリケーションが <a href="http://www.t-mobileg1.com/">T-Mobile G1</a> デバイスを対象としている場合、UI が画面の向き変更に対応しているか確認してください。 </li>
</ul>
<h3 id="eula">2. アプリケーションへのエンドユーザー ライセンス契約の追加を検討する</h3>
<p>個人、組織、知的財産を保護するため、アプリケーションのエンドユーザー ライセンス契約EULAを付加することを推奨します。
<h3 id="iconlabel">3. アプリケーションのマニフェストにアイコンとラベルを指定する</h3>
<p>アプリケーションのマニフェストに指定するアイコンとラベルは、アプリケーションのアイコンと名前としてユーザーに表示されるため、重要な要素です。アイコンとラベルは、デバイスの [[]ホーム] 画面や、[[]アプリケーションの管理]、[[]マイダウンロード] などに表示されます。また、公開サービスによってアイコンとラベルがユーザーに表示される可能性もあります。 </p>
<p>アイコンとラベルを指定するには、<code>android:icon</code> と <code>android:label</code> 属性をマニフェストの <code>&lt;application&gt;</code> 要素に定義します。 </p>
<p>アイコンのデザインについては、組み込みの Android アプリケーションのスタイルとできるだけ統一感を持たせてください。</p>
<h3 id="logging">4. ロギングとデバッグを無効にして、データとファイルをクリーンアップする</h3>
<p>リリース時にはデバッグ機能を無効にし、デバッグおよびその他の不要なデータ/ファイルをアプリケーション プロジェクトから削除してください。</p>
<ul>
<li><code>android:debuggable="true"</code> 属性をマニフェストの <code>&lt;application&gt;</code> 要素から削除します。</li>
<li>ログ ファイル、バックアップ ファイル、およびその他の不要なファイルをアプリケーション プロジェクトから削除します。</li>
<li>個人的または自分専用のデータがないか確認し、必要に応じて削除します。</li>
<li>ソース コード内に {@link android.util.Log} メソッドへの呼び出しがある場合は、無効にします。</li>
</ul>
<h2 id="finalcompile">アプリケーションの最終コンパイルを実行する前の作業</h2>
<h3 id="versionapp">5. アプリケーションでバージョン管理を行う</h3>
<p>アプリケーションをコンパイルする前に、アプリケーションにバージョン番号を定義しておく必要があります。定義するには、アプリケーションのマニフェスト ファイルの <code>&lt;manifest&gt;</code> 要素の <code>android:versionCode</code> と <code>android:versionName</code> 属性の両方に適切な値を指定します。バージョン番号の設定は、全体的なアプリケーションアップグレードの計画を考慮して、慎重に検討してください。 </p>
<p>これまでにリリースしたバージョンがある場合、最新のアプリケーションのバージョン番号を旧バージョンから増加させる必要があります。アプリケーションのマニフェスト ファイルの <code>&lt;manifest&gt;</code> 要素の <code>android:versionCode</code> と <code>android:versionName</code> 属性の両方を適切な値を使用して増加する必要があります。 </p>
<p>アプリケーションのバージョン情報を定義する方法は、<a href="{@docRoot}guide/publishing/versioning.html">Versioning Your Applications</a>をご覧ください。</p>
<h3 id="cryptokey">6. 適切な暗号化キーを取得する</h3>
<p>ここまで準備作業をすべて読んで実行していれば、アプリケーションはコンパイルされ、署名の準備ができています。.apk の内部では、アプリケーションは適切にバージョン管理されており、上記のように余分なファイルや非公開データは削除されています。 </p>
<p>アプリケーションに署名する前に、適切な非公開キーがあることを確認する必要があります。非公開キーを取得(または生成)する方法については、<a href="{@docRoot}guide/publishing/app-signing.html#cert">適切な非公開キーの取得</a>をご覧ください。</p>
<p>適切な非公開キーを取得(または生成)したら、キーを使用して次の手順を実行します:</p>
<ul>
<li>アプリケーションが MapView 要素を使用している場合は、Maps API キー(以下をご覧ください)に登録します。</li>
<li>以降の準備プロセスで、リリースするアプリケーションに署名します。</li>
</ul>
<h3 id="mapsApiKey">7. アプリケーションが MapView 要素を使用している場合は、Maps API キーに登録する</h3>
<div class="sidebox-wrapper">
<div class="sidebox"><p>
Maps API キーを取得する方法は、<a
href="http://code.google.com/android/add-ons/google-apis/mapkey.html">Maps API キーの取得(英語のみ)</a>
をご覧ください。</p>
</div>
</div>
<p>アプリケーションが Mapview 要素を使用する場合、アプリケーションを Google Maps サービスで登録し、Maps API キーを取得する必要があります。その後、MapView で Google Maps からデータを取得できるようになります。この処理を行うため、Maps サービスに署名証明書の MD5 フィンガープリントを提出します。 </p>
<p>開発中は、SDK ツールが生成したデバッグ キーを登録して一時的な Maps API キーを取得できます。ただし、アプリケーションを公開する前には、非公開キーに基づく新しい Maps API キーで登録する必要があります。 </p>
<p>アプリケーションが MapView 要素を使用する場合、次の点を理解することが重要です:</p>
<ol>
<li>アプリケーションをリリース用にコンパイルする前に、Maps API キーを取得する必要があります。<em></em>このキーを、アプリケーションのレイアウト ファイルにある各 MapView 要素の、<code>android:apiKey</code> という特殊な属性に追加する必要があるからです。MapView オブジェクトをコードから直接インスタンス化している場合は、Maps API キーをコンストラクタのパラメータとして渡す必要があります。
</li>
<li>アプリケーションの MapView 要素が参照する Maps API キーは Google Maps 内で登録され、アプリケーションの署名に使用される証明書に登録される必要があります。これはアプリケーションを公開する際に特に重要です。MapView 要素は、アプリケーションの署名に使用されるリリース証明書に登録されるキーを参照する必要があります。 </li>
<li>SDK ツールが生成したデバッグ証明書を登録して一時的な Maps API キーを取得している場合、リリース証明書を登録して新しい Maps API キーを取得する<em>必要があります</em>。また、MapView 要素を変更して、デバッグ証明書と関連付けられたキーではなく、新しいキーを参照させることも忘れないでください。このようにしないと、MapView 要素には Maps データをダウンロードする許可が与えられません。 </li>
<li>アプリケーションの署名に使用する非公開キーを変更するには、Google Maps サービスから新しい Maps API キーを取得する<em>必要があります</em>。新しい Maps API キーを取得してすべての MapView 要素に適用してください。以前のキーを参照する MapView 要素には、Maps データをダウンロードする許可が与えられません。 </li>
</ol>
<p>署名と非公開キーについては、<a
href="{@docRoot}guide/publishing/app-signing.html">アプリケーションへの署名</a>をご覧ください。</p>
<h2 id="compile">アプリケーションのコンパイル</h2>
<p>前述のセクションで説明したアプリケーションの準備ができたら、アプリケーションをリリース用にコンパイルできます。 </p>
<h2 id="post-compile">アプリケーションをコンパイルした後の作業</h2>
<h3 id="signapp">8. アプリケーションに署名する</h3>
<p>非公開キーを使用してアプリケーションに署名します。アプリケーションに正しく署名することは、非常に重要です。詳細は、<a href="{@docRoot}guide/publishing/app-signing.html">アプリケーションへの署名</a>をご覧ください。 </p>
<h3 id="testapp">9. コンパイルして署名したアプリケーションのテスト</h3>
<p>コンパイルしたアプリケーションをリリースする前に、対象とする携帯端末および可能ならば対象ネットワーク上で徹底的にテストする必要があります。特に、UI 部分の MapView 要素がマップ データを正常に受信していることを確認してください。正常に受信していない場合、<a href="#mapsApiKey">Maps API キーに登録する</a>に戻って問題を解決してください。アプリケーションがサーバー側サービスを正しく利用できること、指定データまたは使用データを正しく処理できること、そして認証要件を正常に処理できることも確認してください。 </p>
<p>これらのテストが完了したら、アプリケーションを携帯端末ユーザーに公開する準備が整ったと言えるでしょう。</p>

View File

@ -0,0 +1,100 @@
page.title=アプリケーションのバージョニング
@jd:body
<div id="qv-wrapper">
<div id="qv">
<h2>バージョン管理の概略</h2>
<ul>
<li>アプリケーションにはバージョンを設定する必要がある<em></em></a></li>
<li>バージョンは、アプリケーションのマニフェスト ファイルで設定する</li>
<li>アプリケーションのバージョン管理方法は、ユーザーのアップグレード方法に影響 </li>
<li>開発プロセスの初期段階で、今後のリリースの検討事項を含めて、バージョン管理戦略を決定します</li>
</ul>
<h2>このドキュメントの内容</h2>
<ol>
<li><a href="#appversion">アプリケーションのバージョンの設定</a></li>
<li><a href="#minsdkversion">最小システム API バージョンの指定</a>
</ol>
<h2>関連項目</h2>
<ol>
<li><a href="{@docRoot}guide/publishing/preparing.html">公開の準備</a></li>
<li><a href="{@docRoot}guide/publishing/publishing.html#market">Android マーケットでの公開</a></li>
<li><a href="{@docRoot}guide/topics/manifest/manifest-intro.html">The AndroidManifest.xml File</a></li>
</ol>
</div>
</div>
<p>バージョン管理のコンポーネントは、アプリケーションのアップグレード及びメンテナンスの計画を立てるのに重要です。 </p>
<ul>
<li>ユーザーは、デバイスにインストールされたアプリケーション バージョンと、インストールが可能なアップグレード バージョンについて、特定の情報が必要です。 </li>
<li>スイートとして公開されたその他のアプリケーションなどでは、アプリケーションのバージョンをシステムに問い合わせて、互換性と依存関係を確認する必要があります。</li>
<li>アプリケーションを公開するサービスでは、アプリケーションにバージョンを問い合わせて、バージョンをユーザーに表示できるようにする必要があります。公開サービスでは、互換性を確認してアップグレードとダウングレードの関係を確立するために、アプリケーション バージョンを確認する必要があります。</li>
</ul>
<p>Android システム自体は、アップグレードや互換性の制約の実施などのために、アプリケーション バージョン情報をアプリケーションに対して<em>確認することはありません</em>。代わりに、アプリケーションにおけるバージョン制約はユーザーまたはアプリケーション自体によって完全に実施されます。 </p>
<p>Android システムが確認を行うのは、アプリケーションによってマニフェストの <code>minSdkVersion</code> 属性に指定されたシステム バージョン互換性です。<em></em>この属性によりアプリケーションは互換性を持つ最小システム API を指定できます。詳細は、<a href="#minsdkversion">最小システム API バージョンの指定</a>をご覧ください。
<h2 id="appversioning">アプリケーションのバージョンの設定</h2>
<p>アプリケーションのバージョン情報を定義するには、アプリケーションのマニフェスト ファイルで属性を設定します。2 つの属性を使用でき、常にこの両方に値を定義することが推奨されています: </p>
<ul>
<li><code>android:versionCode</code> - アプリケーション コードのバージョンを他のバージョンと相対的に示す整数値。
<p>この値は整数なので、その他のアプリケーションはプログラムでバージョンの値を評価して関係を確認できます(たとえば、このバージョンがアップグレードかダウングレードなのか、など)。任意の整数値を設定できますが、アプリケーションの後続のリリースでは、現在より大きな値を使用するようにしてください。システムではこのバージョン管理の基準を強制しませんが、後継リリースの値を増加させることは標準的です。 </p>
<p>通常、アプリケーションの最初のバージョンの versionCode を 1 に設定してリリースし、その後は各リリースについて、リリースがメジャー リリースであってもマイナー リリースであっても、値を単調増加させます。これは、<code>android:versionCode</code> の値は、ユーザーに表示されるアプリケーション リリース バージョンと類似している必要性はないことを意味します。以下の <code>android:versionName</code> をご覧ください。アプリケーションと公開サービスでは、このバージョンの値はユーザーには表示されません。</p>
</li>
<li><code>android:versionName</code> - アプリケーション コードのリリース バージョンを表す文字列値で、ユーザーに表示される値です。
<p>値は文字列なので、アプリケーション バージョンを「&lt;major&gt;.&lt;minor&gt;.&lt;point&gt;」といった文字列や、その他のタイプの絶対的または相対的バージョン ID として記述できます。 </p>
<p><code>android:versionCode</code> の場合と同様に、システムではこの値をアプリケーションでユーザーに表示する以外の目的で内部的に利用することはありません。公開サービスでは、ユーザーに表示するために <code>android:versionName</code> 値を取り出す可能性もあります。</p>
</li>
</ul>
<p>これらのバージョン属性の両方をマニフェスト ファイルの <code>&lt;manifest&gt;</code> 要素で定義します。 </p>
<p>ここに、<code>&lt;manifest&gt;</code> 要素の <code>android:versionCode</code> と <code>android:versionName</code> 属性を示すマニフェストの例を示します。 </p>
<pre>
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.package.name"
android:versionCode="2"
android:versionName="1.1"&gt;
&lt;application android:icon="@drawable/icon" android:label="@string/app_name"&gt;
...
&lt;/application&gt;
&lt;/manifest&gt;
</pre>
<p>この例では、<code>android:versionCode</code> 値は現在の .apk がこのアプリケーション コードの 2 番目のリリースを含んでいることを表し、これは <code>android:codeName</code> 文字列が示すようにマイナー後継リリースであることを示します。 </p>
<p>Android フレームワークには、アプリケーションがシステムに別のアプリケーションのバージョン情報を問い合わせる API が用意されています。バージョン情報を取得するため、アプリケーションは {@link android.content.pm.PackageManager#getPackageInfo(java.lang.String, int)}
method of {@link android.content.pm.PackageManager PackageManager}. </p> を使用します。
<h2 id="minsdkversion">最小システム API バージョンの指定</h2>
<p>アプリケーションが最低でも Android プラットフォームの特定のバージョンを必要とする場合、このバージョンを API レベルの ID としてアプリケーションのマニフェスト ファイルに指定できます。このようにすると、互換性のあるバージョンの Android システムを実行しているデバイスにのみアプリケーションをインストールできるようになります。 </p>
<p>最小システム バージョンをマニフェストに指定するには、次の属性を使用します: </p>
<ul>
<li><code>android:minSdkVersion</code> - Android プラットフォームのコード バージョンに対応する整数値。
<p>アプリケーションのインストールを準備する際に、システムはこの属性の値を確認して、システム バージョンと比較します。<code>android:minSdkVersion</code> 値がシステム バージョンよりも大きい場合、システムはアプリケーションのインストールを中止します。 </p>
<p>この属性をマニフェストに指定しない場合、システムではアプリケーションがすべてのプラットフォーム バージョンと互換性があると仮定します。</p></li>
</ul>
<p>アプリケーションに最小プラットフォーム バージョンを指定するには、<code>&lt;uses-sdk&gt;</code> 要素を <code>&lt;manifest&gt;</code> の子として追加し、<code>android:minSdkVersion</code> を属性として定義します。 </p>
<p>詳細は、<a href="{@docRoot}sdk/android-1.1.html">Android System Image 1.1 Version Notes</a> もご覧ください。</p>