Google Play からのお達し
2/9に「Google Play warning: You are using a vulnerable version of Apache Cordova」というタイトルでGoogleからメールが来ました。バージョン4.1.1以前のApacheCordovaにセキュリティ上の脆弱性が見つかったので、公開しているCordova製のアプリを更新しろという内容です。
Please migrate your app(s) to Apache Cordova v.4.1.1 or higher as soon as possible and increment the version number of the upgraded APK.
と書いてあり、更新しなければ2016年5月9日以降は公開を停止するとも書いてありました。備忘録のつもりで作業内容を記事に残しておきます。
それにしても、メールのタイトルをGoogleやTwitterで検索してもほとんどヒットしなかったのでCordova(PhoneGap)製のアプリって少ないんでしょうねぇ。それとも皆さんマメに更新しているからこんなメール来ないってことでしょうか?
Cordova開発環境の更新
$ cordova platform ls
Installed platforms: android 3.7.1, ios 3.8.0
Available platforms: amazon-fireos, blackberry10, browser, firefoxos, osx, webos
$ cordova -v
6.0.0
$ cordova platform update android
Updating android project...
Android project updated with cordova-android@5.1.0
$ cordova platform ls
Installed platforms: android 5.1.0, ios 3.8.0
Available platforms: amazon-fireos, blackberry10, browser, firefoxos, osx, webos
$ cordova platform update ios
Updating ios project...
iOS project updated with cordova-ios@4.0.1
$ cordova platform ls
Installed platforms: android 5.1.0, ios 4.0.1
Available platforms: amazon-fireos, blackberry10, browser, firefoxos, osx, webos
$ cordova -v
6.0.0
android 3.7.1から5.1.0に無事更新されました。配布するビルドパッケージを作成する前に、cordovaが生成するファイルもいろいろ変わっているだろうと思ってプロジェクトを新規に作ることにしました。
#使用しているプラグイン一覧をconfig.xmlに出力
$cordova plugin save
$cordova plugin list
android.support.v4 1.0.0 "Android Support v4"
com.admob.google 2.0.14 "AdMob Google Ads + Tappx"
com.connectivity.monitor 1.1.0 "Connectivity Monitoring"
com.google.play.services 22.0.0 "Google Play Services for Android"
com.ios.libgoogleadmobads 1.1.1 "iOS Google AdMob Ads library"
org.apache.cordova.device 0.3.0 "Device"
org.apache.cordova.dialogs 0.3.0 "Notification"
#プロジェクトの新規作成
$cordova create Tictactoe com.herokuapp.tictactoe_cf Tictactoe -d
$cd Tictactoe
$cordova platform add android
$cordova platform add ios
予めファイルに出力したプラグインをcordova plugin add
コマンドで順番にインストール。プラグインの名前はcordova plugin search
で確認出来る。
$cordova plugin list
cordova-android-support-v4 4.0.0 "Android Support v4"
cordova-admob 4.1.6 "AdMob Google Ads + Tappx"
cordova-connectivity-monitor 1.2.2 "Connectivity Monitoring"
cordova-google-play-services 25.0.0 "Google Play Services for Android"
cordova-libgoogleadmobads 7.3.1 "iOS Google AdMob Ads library"
cordova-plugin-device 1.1.1 "Device"
cordova-plugin-dialogs 1.2.0 "Notification"
cordova-plugin-whitelist 1.2.1 "Whitelist"
cordova-plugin-whitelistプラグインが勝手に追加されていました、デフォルトで組み込まれる?ようです。こういう知らないうちに変わっていることがあるので、新規プロジェクトで作り直す方がいいと思います。
パッケージファイル(APK)を更新
開発環境の更新はできたのであとはビルドするだけですが、その前にAndroidManifest.xml内のバージョンNo.(android:versionCodeとandroid:versionName)をインクリメントしました。
$cd platforms/android/
$ant release
Buildfile: build.xml does not exist!
Build failed
今までant release
コマンドでビルドしていたのですが、バージョンアップで変更になったのか、エラーになりました。
エラーメッセージはbuild.xmlが無いと言ってるだけなので、旧プロジェクトからbuild.xmlを持って来れば出来そうですが、新しいやり方に従って以下のようにビルド
$ cordova build android --release
Built the following apk(s):
/Users/xxxx/workspace/Tictactoe45/platforms/android/build/outputs/apk/android-release-unsigned.apk
私はその気はありませんが、GUI環境に移行すればもっと分かりやすいメニューがあるのかもしれません。
その後、私有鍵は以前作成したものを使い、デジタル署名も以前のバージョンと同様に出来ました。
$jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore ~/mine/myAndroidKey.keystore ./platforms/android/build/outputs/apk/android-release-unsigned.apk myAndroidKeyAlias
$mkdir -p Release/android
$~/Library/Android/sdk/build-tools/23.0.1/zipalign -v 4 ./platforms/android/build/outputs/apk/android-release-unsigned.apk ./Release/android/Tictactoe-release1-3-2.apk
$adb install -r ./Release/android/Tictactoe-release1-3-2.apk
実機での動作確認が済めば、Google Play Developer Consoleからアップロードして完了です。