cordovaでコマンドを使ってビルドする際にハマったこと

ようやく広告を掲載してアプリの公開ができました。
今回は、visualstudioを使わずに、直接コマンドでCordovaを使ってリリースビルドして、公開しました。

元々visualstudioで作ってリリースビルドして公開したアプリなのですが、Windows10HOMEが入ったパソコンは、60GBのタブレットPCで空き容量が限界だったこともあり、Macで作ろうとしたのです。
でも、MacはvisualstudioがXamarinの環境のため、Cordovaがインストールできないようなのです。

今回は、Cordovaのテンプレートを最初に作り、そこにwww以下のファイルと、JavaScriptやCSS、onsen-UIなど関連ファイルをコピーしてセットしました。

このことが、リリースビルドする際の油断に繋がり、少しハマってしまいました。

Cordovaの環境作りは、私の先に公開した記事を読んでください。
リリースビルドのコマンドは、こちらの記事も参考になります。
https://qiita.com/hara_p/items/f9bbcced6882fcfede6f

##署名でハマりました。
私は、下記の記事を参考にしました。
http://phiary.me/cordova-android-release-build-apk-for-google-play/

ビルドしたapkファイルに署名をしないといけないのですが、記事の中の下記のコマンドをそのままコピペして、apkファイルとエイリアスを指定しました。
エラーになってしまったので、調べました。
```
$ jarsigner -verbose -keystore .keystore <apkファイル> <エイリアス名>
```

.keystoreの部分が、キーストアのファイル名だったのを忘れていたのです。

そのため、記事の通りに新しく作ってしまったり、余計なことをしてしまいました。
それにキーストアファイルを作るときに、正しくファイル名を指定していなかったので、ファイル名が空白のままできてしまいました。

キーストアの作り方は、こちらも参考になります。
https://qiita.com/nogson/items/abe1016f36c3b331db30

その形でも、署名はできました。
でも、googleストアにアップロードするときに、エラーになりました。

署名が不正という内容のエラーだったので、コマンドをよく読み、先に作っていたキーストアのファイルを、リリースビルドのapkファイルが生成されるフォルダに移動して準備しました。

そして、署名を紐づけました。

それでも、エラーが出ました。
調べたら、この記事のエラー対策が役立ちました。
https://algorithm.joho.info/programming/javascript/cordova-android-apply-keystore-apk/
記事のエラー対策のように、”このjarにはタイムスタンプが付加されていません。タイムスタンプがないと、署名者証明書の>有効期限(2047-12-15)後または将来の失効日後に、ユーザーはこのjarを検証できない可能性があります。”という内容だったのです。

##署名の確認と最適化
無事に署名できた確認するコマンドや、最適化のことは、こちらの記事が参考になります。
http://phiary.me/cordova-android-release-build-apk-for-google-play/

また、こちらの記事も参考になります。
http://lamp-oita.blogspot.jp/2014/04/cordovaphonegapapk.html

こちらも、最適化の必要性を知ることができます。
http://naosk8.hatenablog.com/entry/2016/03/07/004032

##リリースビルドして動作確認したら
リリースビルドできたので、念のため実機でもアプリを動かして見ました。
そしたら、アプリのアイコンやタイトルが設定されていないことに気が付いたのです。
私は、冒頭で書いた通り関連ファイルやフォルダを完成したアプリのものからコピーして使いました、。
これで油断したのです。
下記の記事を参考にして、アイコンの設定をconfig.xmlファイルに行いました。
https://cpoint-lab.co.jp/article/201803/%E3%80%90cordova%E3%80%91%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E3%81%AE%E8%A8%AD%E5%AE%9A%E6%96%B9%E6%B3%95%E3%81%A8android%E3%81%AE%E3%82%A2%E3%82%A4%E3%82%B3/
ただパスの位置が、visualstudioの時の構成と違うみたいです。

```xml
    <platform name="android">
        <icon density="ldpi" src="/res/icon/android/icon-36-ldpi.png" />
        <icon density="mdpi" src="/res/icon/android/icon-48-mdpi.png" />
        <icon density="hdpi" src="/res/icon/android/icon-72-hdpi.png" />
        <icon density="xhdpi" src="/res/icon/android/icon-96-xhdpi.png" />
        <icon density="xxhdpi" src="/res/icon/android/icon-xxhdpi.png" />
        <icon density="xxxhdpi" src="/res/icon/android/icon-xxxhdpi.png" />
    </platform>
```
パスは、環境に合わせて適時書き換えてください。

##アプリのAPI指定
androidがアプリが、どのバージョン以上で動くのかを指定しないと、ビルドできてもgoogleストアにアップロードするときにエラーになります。
config.xmlのファイルの修正箇所は、こちらの記事が参考になります。
http://cordovaandroid.saetl.net/process4_1.html

- アプリのパッケージ名
- アプリの表示名
- アプリの説明
- 画面の向きの固定が必要なら記載
- 製作者のメールアドレスと、ウェブサイトのURL
- アプリのAPI指定

こうした点を点検してから、ビルドしてください。
Android OSのAPIの指定は、こちらの記事が参考になります。
https://qiita.com/kondoakio/items/b78c1cf7d333eea3e5fd

config.xmlファイルの中身を見ると、cordovaのテンプレートの内容で雛形が書かれていますので、それを自分のアプリの内容に書き換えてることが必要です。

##まとめ
以上の点検箇所をチェックすれば、ビルドできてもストアにアップしたときにエラーになることを防ぐことができると思います。
AndroidのAPIつまりOSのバージョンの数字は、android SDKの一覧を見ると分かりやすいかもしれません。

ちなみに、先に紹介した記事の方法でキーストアを作ると、API16-18には対応していないという感じのエラーが出ます。
APIは、21が良いと思います。
私が21を選んだのは、自分のスマホのOSが5.0.1だからです。
以下は、APIの実装例です。

```xml
    <platform name="android">
        <preference name="android-minSdkVersion" value="21" />
    </platform>
```

自分が使っているスマホのOSのバージョンに合わせると、良いと思います。

##visualstudioは楽
cordovaでターミナルを使いコマンドでビルドをして見て、visualstudioでアプリを作るのは楽だと思いました。
プラグインやAPIの設定、画面の向きなどの設定は、visualstudioの方が楽なように思いました。