2014年4月4日金曜日

apkファイルの作成

そろそろアプリでも公開したいな~と思い、apkファイルの配布手順を調べてみました(ΦωΦ)フフフ…
アプリを公開するに当たり、アプリに署名をつける必要があるそうです(´・∀・`)ヘー

なので署名の作成を試してみたいと思います。

■署名の作成
署名の作成には、コマンドプロンプトを利用する方法と、eclipseを利用する方法があるそうです
まずは、コマンドプロンプトから作成する方法!( ̄ー ̄)ニヤリ

コマンドプロンプトを開いて、jdkのインストールディレクトリ先のbinディレクトリまで移動してから、
jdkのkeytoolを利用して署名の作成を行います。

コマンドは次のような形式になります。

keytool -genkey -v -keystore キーストア名 -alias 鍵アルゴリズム名 -keyalg 署名アルゴリズム名 -validity 妥当性日数
keytool -genkey -v -keystore C:\temp\test.keystore -alias testaliase -keyalg RSA -validity 10000
各オプションの説明
-genkey
 非公開鍵&証明連鎖(キーストア)の作成
-v (verbose)
 詳細を表示するオプション
-keystore 
 キーストアの保存先を指定する
-alias 
 証明書の別名を指定する(何でも良さげ?)
-keyalg
 署名アルゴリズム名(RSAを指定する)
-validity [days]
 鍵の有効期限を日数で指定する。
 推奨値は25年以上の10000だそうです。

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\nakajima>cd C:\Program Files\Java\jdk1.7.0_51\bin

C:\Program Files\Java\jdk1.7.0_51\bin>keytool -genkey -v -keystore C:\temp\test.keystore -alias testaliase -keyalg RSA -validity 10000
キーストアのパスワードを入力してください:
新規パスワードを再入力してください:
姓名を入力してください。
  [Unknown]:  test
組織単位名を入力してください。
  [Unknown]:  personal
組織名を入力してください。
  [Unknown]:  personal
都市名または地域名を入力してください。
  [Unknown]:  sinjuku
都道府県名を入力してください。
  [Unknown]:  tokyo
この単位に該当する2文字の国コードを入力してください。
  [Unknown]:  JP
CN=test, OU=personal, O=personal, L=sinjuku, ST=tokyo, C=JPでよろしいですか。
  [いいえ]:  はい

10,000日間有効な2,048ビットのRSAの鍵ペアと自己署名型証明書(SHA256withRSA)を生成しています
        ディレクトリ名: CN=test, OU=personal, O=personal, L=sinjuku, ST=tokyo, C=JP
<testaliase>の鍵パスワードを入力してください
        (キーストアのパスワードと同じ場合はRETURNを押してください):
新規パスワードを再入力してください:
[C:\temp\test.keystoreを格納中]

C:\Program Files\Java\jdk1.7.0_51\bin>



この署名は、アプリをアップデートする際にも必要となるため、
無くさないように大切に保管しておきましょう!( ´∀`)bグッ!

■Eclipseからapkファイルへに署名を付ける

こちらの記事に注意点として次のようなことが書かれていました。
よく分かる!Android アプリのリリース手順のまとめ | アドカレ2013 : SP #20
Build Automatically をオフにしていないとリリースビルドしたアプリを実行すると
BuildConfig.DEBUG が false にならないというバグがあるようです。
もともと、Build Automaticallyは必要な場合、自動的にコンパイルを実行する設定らしいです。とりあえずOFFにしておく方が良いかも?

プロジェクト名を右クリックして「プロパティ」→「Android Tools」→「Export Signed Application Package...」をクリックします。



■プロジェクトの確認
プロジェクト名を確認し、そのまま次へをクリックします。



■キーストアの選択

Use existing keystoreを選択して、
ロケーション名に、先ほど作成した署名ファイル(***.keystore)を選択します。
キーストアのパスワードを入力し、次へをクリックします。



■キーエイリアスの選択

「Use existing keystore」を選択します。
エイリアスは署名ファイル作成時に設定した「鍵アルゴリズム名」を選択します。
その鍵のパスワードを入力し、次へをクリックします。




■デスティネーションと証明書/鍵の確認

「Destination APK fine」に、署名付きのapkファイルの出力先を指定し、完了をクリックします。
(Certificate fingerprintsに記載されている、MD5の値と、SHA1の値をメモっておく。Google Mapなどを利用している場合に、Google Consoleに登録する必要がある)




■ダウンロードしてインストールする

apkファイルを置く場所の注意点として、次の点があるそうです。

・端末によっては、MIMEタイプを追加しておかないと、正しく認識されない。
apacheもしくは、.htaccessにAddType application/vnd.android.package-archive .apkを追加する。

・端末によっては、ベーシック認証がかかっているとダウンロードが出来ない。
ベーシック認証を解除する。

実際に試したときには、ベーシック認証があると正しく行えなかったので、
はずしてやったら正常にダウンロードされました( ´∀`)bグッ!

後は、インストールして完了かと思ったら、
Google Mapの部分が正しく動作せず・・・(´;ω;`)ウッ…

ググってみると、apkの署名で作ったフィンガプリントを
Google ConsoleのGoogle Map APIに登録する必要があるそうです・・・orz

開発中に利用していたものは、
SDKが生成している証明書のフィンガプリントを使って、
Google ConsoleのGoogle Map APIに設定していたと思いますが、
この証明書はデバッグ用らしいです。
(C:\Documents and Settings\ユーザフォルダ\.android\debug.keystoreなどにある)

なので、Eclipseからエミュレーターや、実機に直接インストールしていた場合には動作するけど、
apkファイルとして配布した場合には動作しなくなってしまうとの事です。

■作成したapkのフィンガプリントを確認する
C:\Program Files\Java\jdk1.7.0_51\bin>keytool -list -keystore C:\temp\test.keystore
キーストアのパスワードを入力してください:

*****************  WARNING WARNING WARNING  *****************
*キーストアに保存された情報の整合性は*
*検証されていません。整合性を検証するには*
*キーストアのパスワードを入力する必要があります。*
*****************  WARNING WARNING WARNING  *****************

キーストアのタイプ: JKS
キーストア・プロバイダ: SUN

キーストアには1エントリが含まれます

testaliase,2014/04/04, PrivateKeyEntry,
証明書のフィンガプリント(SHA1): ●●●●●●●●●●●●●●●●●●●●●

C:\Program Files\Java\jdk1.7.0_51\bin>

以上です(`・ω・´)ゞビシッ!!

参考URL

0 件のコメント:

コメントを投稿