外部で開発してもらったapkファイルをGooglePlayにアップロードしようと思ったら弾かれたのでその対処法をメモ。
納品されたapkは署名無しだったのでそのあたりから。環境はWindows7です。
※署名無しのapkは端末側で提供元不明アプリのインストールが許可されていてもインストールできません。
1.証明書(キーストア)を作る
2.apkファイルに署名する
3.zipalignなるものを行う
手順はここに書いてあったものを参考にしました。
http://developer.android.com/intl/ja/tools/publishing/app-signing.html#signing-manually
>>Signing Your App Manually
1.証明書(キーストア)を作る
証明書(.keystoreというファイル)を作るにはjavaのkeytool.exeで行うので、JavaJDKをインストールします。
(以下Pathは通っているものとします)
コマンドラインから
keytool -genkey -v -keystore c:\myapp.keystore -alias myapp -keyalg RSA -keysize 2048 -validity 10000
-alias 部分で入力した myapp(エイリアス名) は後で使うので忘れないように。
コマンドを実行すると何度か入力を求められるので埋めます。
キーストアのパスワードを入力してください:
新規パスワードを再入力してください:
姓名を入力してください。
[Unknown]:myname
組織単位名を入力してください。
[Unknown]:hogehoge-bu fugafuga-ka
組織名を入力してください。
[Unknown]:hogehoge.Inc
都市名または地域名を入力してください。
[Unknown]:sibuyaku
都道府県名を入力してください。
[Unknown]:tokyo
この単位に該当する2文字の国コードを入力してください。
[Unknown]: JP
CN=myname, OU=hogehoge-bu fugafuga-ka, O=hogehoge.Inc, L=sibuyaku, ST
=tokyo, C=JPでよろしいですか。
[いいえ]: はい
ちなみに自分は日本語の環境だったせいか、最後の「yes」の部分を「はい」と入力しループに陥りました。
問題なければ -keystore で指定したキーストアが生成されます。
【重要】このキーストアはアプリをアップデートする際に必要になります。絶対に無くさないようにしましょう。
2.apkファイルに署名する
署名は jarsigner.exe を使います。
jarsigner -sigalg SHA1withRSA -digestalg SHA1 -keystore myapp.keystore -verbose myapp.apk myapp
一番最後の myapp は keytool の -alias で指定した名前を入力します。
これで apkファイルに署名が行われます(上書き)
3.zipalignなるものを行う
zipalign は AndroidSDK に含まれるのですが、どうやら新しいSDKには入っていない様です。
※zipalign を追加する作業でハマりました。詳しくはこちら
zipalign -v 4 myapp.apk myapp_aligned.apk
これでapkの中身がファイルサイズの小さい順に並べ替えられて誰かが(メモリが?)得をするみたい。
ソフトウェア技術ドキュメントを勝手に翻訳 – zipalign
ストアへの登録も上手くいきました。