Androidアプリケーションと署名

1.Androidのデジタル署名

AndroidアプリはAndroidプラットフォーム上で動かすために、アプリに対して必ずデジタル署名をする必要があります。このデジタル署名がされていないアプリはAndroidプラットフォームにインストールしたり、起動したりすることはできません。デジタル署名がないと、実機のみならず、エミュレーターでも実行することができません。

それではなぜEclipseでのAndroidアプリ開発時にエミュレーターでアプリを起動することができるのでしょうか。それは、ADT(Android Development Tools Plugin for the Eclipse IDE)が自動でデバッグ用の署名をしてくれているからです。

2.デバッグ用のキーストア

デバッグ用のキーストアは、Eclipseの設定>Android>ビルドで設定情報を確認できます。
(※キーストアとは、鍵と証明書を保管するためのデータベースファイル。ファイル全体がパスワードによって暗号化されています。 JDK 付属のキーストア管理ツール keytool を使用して鍵や証明書の作成、削除、インポート、エクスポート、自己署名証明書の作成が行えます。 )

キーストアの場所は、OSによって異なります。
Mac OS X、Linux:~/.android/
Windows XP:c:/Document and Settings/ユーザー名/.android
Windows Vista、7:c:/Users/ユーザー名/.android

※ちなみにADTは、上記の場所にキーストアが無い場合は、自動的にキーストアを生成してくれるので、何かキーストアに問題がある場合は、上記の場所のdebug.keystoreファイルを削除してからビルドすると、またキーストアを生成してくれます。ADTでの署名内容は以下の通りです。

キーストアの名称:debug.keystore
キーストアのパスワード:android
キーストアのエイリアス:androiddebugkey
キーのパスワード:android
所有者名:Android Debug
組織名:Android
国番号:US

上記のようにデバッグ用のキーストアに自動生成されたキーストアを使用せずに、開発者自身が生成したキーストアにすることもできます。しかし、署名が異なるとアプリケーション間のデータ共有やアプリケーションのアップデートができず、不便なことが多いため、複数のメンバで開発する際には開発者側で共有のキーストアファイルを利用したほうがいいでしょう。

3.JDKのkeytoolで自己署名を作成

Androidアプリが配布されるAndroid Marketでは署名に対して第三者の認証局(Certification Authority)による署名を求めていないため、自己署名(オレオレ署名)でよいということになっています。
JDKのkeytoolで自己署名を作成してみます。JDKをインストールしたディレクトリ/binにあるkeytoolにパスを通して行います。

<コマンド>
keytool -genkey -v -keyalg RSA -keystore releasekey.keystore -alias releasekey -validity 10000
※Mac OS Xでは文字化けするため、一時的にターミナルの「環境設定」を開き、設定タブの「文字エンコーディング」をプルダウンから「Shift JIS」に設定し、文字化けに対処します。keytool実行後は、設定は元に戻しておいてください。
(※文字化けするのはJava側で使用しているエンコードとMac OSで使用しているエンコードが違うためのようです。)

コマンドを実行すると、以下の入力を求められます。
(例)
$keytool -genkey -v -keyalg RSA -keystore releasekey.keystore -alias releasekey -validity 10000
キーストアのパスワードを入力してください:
新規パスワードを再入力してください:
姓名を入力してください。
[Unknown]:  Neko Hanako
組織単位名を入力してください。
[Unknown]:  Neko Team
組織名を入力してください。
[Unknown]:  Neko corp
都市名または地域名を入力してください。
[Unknown]:  Shinjuku
州名または地方名を入力してください。
[Unknown]:  Tokyo
この単位に該当する 2 文字の国番号を入力してください。
[Unknown]:  JP
CN=Neko Hanako, OU=Neko Team, O=Neko corp, L=Shinjuku, ST=Tokyo, C=JP でよろしいですか?
[no]:  yes

10,000 日間有効な 1,024 ビットの RSA の鍵ペアと自己署名型証明書 (SHA1withRSA) を生成しています
ディレクトリ名: CN=Neko Hanako, OU=Neko Team, O=Neko corp, L=Shinjuku, ST=Tokyo, C=JP
<releasekey> の鍵パスワードを入力してください。
(キーストアのパスワードと同じ場合は RETURN を押してください):

これで生成完了です。

※キーストアが生成された場所は、keytoolコマンドを実行したディレクトリです。

<コマンドオプション説明>
●-keyalgオプション:
キーを生成するときに利用する暗号化アルゴリズムを指定する。「DSA」か「RSA」のいずれかを指定。

●-keystoreオプション:
キーストアファイルの名称を指定する。

●-aliasオプション:
キーの別名を指定する。

●-validityオプション:
キーの有効期限を日単位で指定する。キーの有効期限が切れてしまうと、利用することができなくなってしまうため、10000日以上に指定することが推奨されている。

※なお、実際に配布するアプリケーションの署名する場合は、以下をご参照ください。
https://nekosoftware.wordpress.com/2011/10/23/android%E3%82%A2%E3%83%97%E3%83%AA%E3%81%B8%E7%BD%B2%E5%90%8D%E3%81%99%E3%82%8B/

広告

Androidアプリケーションと署名」への6件のフィードバック

  1. ピンバック: Androidアプリへ署名する « ねこブログ

  2. ピンバック: cohakim's blog » [Android] デバッグビルドでもアプリ内課金のテストがしたい

  3. ピンバック: Androidアプリの公開<KeyStore Keytool AndroidDebugKey> | android manifest configChanges

  4. ピンバック: Androidアプリの署名<KeyStore Keytool AndroidDebugKey> | android manifest configChanges

  5. ピンバック: EclipseでAndroidアプリのテスト用apkファイルを作る方法 | るーらいのメモ帳

  6. ピンバック: [Android] デバッグビルドでもアプリ内課金のテストがしたい | cohakim's blog

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中