この記事ではWindowsとCordovaの組み合わせを例にして、一連の流れを解説しています。
証明書の発行
keytoolというJavaの開発環境に付属しているツールを使います。
JDKのインストール(Windwsなら環境変数の書き換えも)を終わらせて、パスが通っているなら、コマンドライン上でkeytoolと入力するだけで呼び出せます。
1 2 3 4 5 |
■ テンプレ keytool -genkey -v -keystore {ファイル名}.keystore -alias {キーストアで使う別名(エイリアス)} -validity {証明が有効な日数} -keyalg RSA -keysize 2048 ■ 例 keytool -genkey -v -keystore yakiniku.keystore -alias nikuyaku -validity 5000 -keyalg RSA -keysize 2048 |
一番後ろの「-keyalg RSA -keysize 2048」は、暗号化形式の規格を指定している記述なので、そのまま入力してください。
入力が終わると、いろいろと「これに答えんね!」と質問してくるので答えます。
この時に入力するパスワードは後で必要なので、ちゃんと覚えておきます。
最後にこれで良いか聞かれるので、yを押してEnterで作成。
インターネットで使っている証明書と同じなら日本語で書いても構わない気がしましたが、マルチバイト文字を使う事自体が余計なトラブルの元のような気がするので、自分は念のためローマ字で記入しました。
apkに発行した証明書を署名する
cordovaのプロジェクトディレクトリ内でリリース用の書き出しコマンドを入力するとapkが出力されます。
1 |
cordova build android --release |
このコマンドを入力すると、
{プロジェクトのトップ}\platforms\android\build\outputs\apk
という、深すぎる場所にandroid-release-unsigned.apkが作成されます。
これからの作業の主戦場(?)となりますので、特に指定していない場合はここでコマンドを入力します。
ファイル名を間違わないようにしてください。
そういう訳でjarsignerというツールで署名します。
これもkeytoolと同じくJava開発環境に付属するツールなので、正しく準備できていればコマンドラインの好きな場所から呼べます。
1 2 3 4 5 |
■ テンプレ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore {作成した証明書ファイルの位置} android-release-unsigned.apk {キーストアで使う別名(エイリアス)} ■ 例 jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore C:\cordova\test01\yakiniku.keystore android-release-unsigned.apk nikuyaku |
「そろそろ勘弁してください」感が満載っすね。
この辺りはもっと楽にできるっぽいですが、一度うまくいくと体が慣れてそれでよくなるものです・3・;
君の証明書は不親切だな的な警告が出ますが、私は特に問題なくGooglePlayで公開できています。
apkのファイル名がそのままなのでわかりにくいですが、「jarは署名されました」と無事に表示されれば終了です。
圧縮処理
apkの圧縮にはzipalign.exeというツールを使います。
これだけはAndroid Studioのツールです。
この作業をしていないと、例え署名の終わったapkであってもGooglePlayで登録できません。
(未圧縮でアップすると、圧縮しろと怒られる)
もし存在しない場合は、Android StudioのSDK ManagerからインストールすればOKです。
バージョンがいっぱいありますが、好きなのを1つ落とせば十分です。
1 2 3 4 5 |
■ テンプレ {zipalign.exeのパス} -v 4 android-release-unsigned.apk {任意のファイル名}.apk ■ 例(ユーザー変数部分とツールのバージョンは環境に応じて書き換える) %ANDROID_HOME%\build-tools\22.0.1\zipalign.exe -v 4 android-release-unsigned.apk yakiniku.apk |
これでやっとGoogle Playに登録できるapkになりました。
1 2 3 |
adb install android-release-unsigned.apk <!-- もしくは --> adb install {作成したファイル名}.apk |
のコマンドを使って、apkを実機にインストールできるか試してみると良いです。
Androdのapkに署名する段階でつまずいています。jarは署名されましたとは出ずに、次のjarファイルを開く事ができませんと表示されます。フォルダーを確認したところapkはきちんと作成されています。署名できず困っています。お忙しいと思いますが助言をお願いします。
ちょっと調べてみたところ、jarsignerがapkを見つけられない場合や、データを書き換えられない場合に表示されるメッセージのようです。
同じ状況になった事が無いので推測でしか答えられませんが、下記の点を確認し直してみてください。
・コマンドプロンプトを管理者として実行しているか(もしくは管理者権限のあるアカウントでOSにログインしているか)
・コマンドを入力するカレントディレクトリはandroid-release-unsigned.apkのある場所になっているか
・コマンドのファイル名や記号、スペース(半角)、keystore関連の情報に抜けや間違いが無いか
アカウント側の権限に関しては盲点だったので、時間があるときに調べて影響がありそうなら関連する記事にも書き足しておきます。
ご丁寧にありがとうございます。私は、ちなみにMacで作業をしているのですが、iphonの方は問題なくツクールMVが動く状態です。しかし、Androidに関してはApkに署名できないという状態です。
・コマンドプロンプトを管理者として実行しているか(もしくは管理者権限のあるアカウントでOSにログインしているか)
・コマンドを入力するカレントディレクトリはandroid-release-unsigned.apkのある場所になっているか
・コマンドのファイル名や記号、スペース(半角)、keystore関連の情報に抜けや間違いが無いか
を助言して頂き試してみたのですがうまくいきませんでした。あと時間があるときにでもまた挑戦してみたいと思います。わざわざご丁寧に本当にありがとうございます。他にも有益な情報があるので度々サイトの方に訪れようと思います^^
なるほど。Macでそういった状況になる場合があると心に留めておきますね。
役に立つ記事とアホ記事が混在しているサイトですが、たまに様子を見に来て楽しんでもらえたらと思います。
あ、言い方が紛らわしかったです。キーストアのフルパスとapkのフルパス入れたら署名できました。なんども本当すいません。さっき投稿したコメント消しておいてください。間違った情報書き込んでました。