Androidアプリケーションにはデジタル署名が必須
Androidアプリケーションは、デジタル署名を行わないとデバイス(またはエミュレータ)に配置できません。他のモバイルプラットフォームとは異なり、認証機関(CA)からデジタル証明書を購入する必要はありません。自ら生成した証明書で署名できます。
EclipseでAndroidアプリケーションを開発する場合、F11キーを押してエミュレータに配置するときに、署名が自動的に行われます。これを確認するには、Eclipseの[ウィンドウ]メニューの[設定]を開き、[Android]の項目を展開して、[Build]を選択します(図2を参照)。署名にはデフォルトのデバッグ用キーストア(debug.keystore)が使用されます。
手動での署名
Androidアプリケーションを発行するには、自らの証明書で署名する必要があります。デバッグ用の証明書で署名したアプリケーションは発行できません。アプリケーションに手動で署名するには、以下の手順に従います。
- アプリケーションをリリース用の署名モードでコンパイルします。それには、Eclipseでパッケージ名を右クリックし、[Android Tools]の[Export Unsigned Application Package]を選択します(図3を参照)。
- 次に、アプリケーションのエクスポート先のディレクトリを選択します(Androidのパッケージの拡張子は.apkです)。処理を簡便にするために、私はAndroidパッケージを「C:\Program Files\Java\jdk1.6.0_10\bin\」にエクスポートしました(図4を参照)。その理由はこの後すぐにわかります(私が使用しているのはJDK 1.6.10です。実際に使用するバージョンによって、フォルダ名は多少異なる可能性があります)。
- デバッグ用のキーストアを使用してアプリケーションに署名する場合は、Debug.keystoreファイルを「C:\Documents and Settings\<username>\Local Settings\Application Data\Android\」から「C:\Program Files\Java\jdk1.6.0_10\bin\」にコピーします。
- JDKに付属のjarsigner.exe(場所は「C:\Program Files\Java\jdk1.6.0_10\bin\」)を次のように使用して、指定のキーストアで.apkファイルに署名します。
jarsigner -verbose -keystore debug.keystore MyKillerApp.apk androiddebugkey
- キーストアのパスワードの入力を求められたときには、デフォルトのパスワードである「android」を指定します。
jarsigner.exeでは次のオプションを指定できます。
-keystore― 秘密鍵を格納しているキーストアの名前です。-verbose― 出力する情報を増やすことができます。
debug.keystoreファイルの別名は「androiddebugkey」です。図5は、デフォルトのキーストアであるdebug.keystoreでアプリケーションに署名したときの例です。
アプリケーションが正しく署名されたかどうかを検証するには、-verifyオプションを付けてjarsigner.exeを実行します。また、-certsオプションを指定して、署名に使用した証明書の詳細を確認することもできます(図6を参照)。
独自の鍵の生成
前述のとおり、他のユーザー向けにアプリケーションを発行するためには、自分独自の証明書を使ってアプリケーションに署名する必要があります。独自の証明書を生成するには、同じくJDKに付属のkeytool.exeを使用します。
独自の証明書を生成するには、次のようなコマンドを実行します。
keytool -genkey -v -keystore learn2develop.keystore -alias learn2develop -keyalg RSA -validity 10000
上記のコマンドでは、「learn2develop.keystore」という名前の証明書が生成されます。鍵の別名は「learn2develop」、生成に使用するアルゴリズムはRSA、有効期間は10000日(推奨される最少の日数)です。
このとき、いくつかの情報の入力を求められます(図7を参照)。たとえば、キーストアのパスワードや、秘密鍵のパスワードなどです。Android Market向けにアプリケーションを発行する場合、キーストアの有効期間の終了日が2033年10月22日以降となるように設定する必要があります。
これら2つのパスワードは秘密にしておき、アプリケーションの署名を行う人以外には漏らさないようにしなくてはなりません。
learn2develop.keystoreファイルを生成したら、それを使ってアプリケーションに署名できます(図8を参照)。







