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からアップロードして完了です。

    GooglePlayAPK画面