generator-graybullet-cordova で事後署名 (Android)

Apache Cordova を使っていて不便なのが署名です。もちろん、自分の端末でビルドする分にはそれほど問題がありません。しかし、CI 上で署名するとなると署名用の秘密鍵の扱いに大変困ります。

CI でビルドし未署名の apk ファイルをダウンロードし後から署名することになりますが、generator-graybullet-cordova で作成したプロジェクトではこの機能がはじめから備わっており、細かいことを考える必要がありません。

この事後署名の機能を試します。

まずは署名をするための秘密鍵を作成します。

$ keytool -genkey -v -keystore ~/app.keystore -alias app -keyalg RSA -keysize 2048 -validity 10000
...
$ chmod 600 ~/app.keystore

詳しくは Signing Your App Manually をご覧ください。

そしてプロジェクトを作成します。

$ mkdir project1
$ cd project1
$ yo graybullet-cordova
...
? What is the name of Apache Cordova App? HelloCordova
? What is the ID of Apache Cordova App? io.cordova.hellocordova
? What app of the platform to be created? android
? Are you sure you want to add any plugins? Cordova Console Plugin, Cordova Device Plugin
...
Out of the box I include HTML5 Boilerplate, jQuery, and a Gruntfile.js to build your app.
? What more would you like? Bootstrap
...

リリースビルドを行いリリース用の未署名の apk ファイルを作成します。

$ grunt --cordova-build=release
...
Running "cordova:package-files" (cordova) task
Copy to dist/android/CordovaApp-release-unsigned.apk.

dist/android ディレクトリに未署名の apk ファイルが作られました。

ここで事後署名スクリプトを使います。

$ ./dist/android/distribute
キーストアのパスワードを入力してください: 
   追加中: META-INF/MANIFEST.MF
   追加中: META-INF/APP.SF
   追加中: META-INF/APP.RSA
  署名中: AndroidManifest.xml
  署名中: assets/_where-is-<a href="http://www.txt
">www.txt
</a>  署名中: assets/www/6df2b309.favicon.ico
...
$ ls ./dist/android
CordovaApp-release-unaligned.apk  CordovaApp-release.apk  distribute
CordovaApp-release-unsigned.apk   config

署名済みの apk ファイル、CordovaApp-release.apk ファイルが作られました。

これによって、CI でリリースビルドを行い、成果物をダウンロードして後から署名ができるようになります。また、請負開発において署名用の秘密鍵は取り扱いにかなり注意を要します。ビルドを CI で行い、署名は署名専用端末で行ったり、そのまま発注元で署名をしたりすることができます。

ところで、署名用のキーストアの設定はどこで行うのでしょうか? プロジェクトに resoures ディレクトリがありますが、この中の android/config ファイルがそれになります。

$ cat resources/android/config
#KEYSTORE=~/app.keystore
#KEYALIAS=app

コメントを外して、キーストアファイルへのパスやエイリアス名を設定してください。このファイルはビルド時に dist/android ディレクトリにコピーされます。dist/android/config ファイルを修正すると、ビルド時に上書きされてしまうのでご注意ください。

Apache Cordova での apk ファイルの署名が面倒だなあという方はぜひお試しください。

なお、この機能は grunt-cordova-ng プラグインで提供していますので、既存のプロジェクトで利用することもできます。

コメントを追加

Filtered HTML

  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 使用できるHTMLタグ: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <img>
  • 次のタグを使用してソースコード構文をハイライトすることができます。: <code>, <blockcode>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <python>, <ruby> The supported tag styles are: <foo>, [foo].
  • 行と段落は自動的に折り返されます。

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。
CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
イメージ CAPTCHA
Enter the characters shown in the image.