kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

Androidの署名の作り方を理解していなかったみたい

Androidアプリには署名をつけてアプリが正しいことを証明する必要があります。

GooglePlayから落とせるアプリは必ず同じ署名がされたものがアップされています。

されていなかった場合は、インストールはできるけどアップデートができないなどの現象が発生します。

エラーメッセージは
「パッケージファイルに正しく署名されていません」

致命的すぎてインストールができなくなりますので、出会いたくはないエラーメッセージですが、出会ってしまったのでしょうがない。

テストはどうしたのか

アプリ自体に署名がされていて、署名が同じでない場合インストールができないことは承知していました。

そのため試験は徹底的にやったつもりです。

  • adb install -r によるアプリアップデート
  • ベータ版の機能によるアプリアップデート
  • 端末としてOS4.2~4.4まで確認

ここまでやってもエラーがでるって。。。もう凹みますね。

どうやってリリース用apkファイルを作成したか

今回コマンドラインで実施しました。

Eclipseで作っていた時は、裏でどういう動きをしているかわからなかったのですが、コマンドが裏で動いているだろうと思っていました。

実際にコマンドでやるために参考にしたサイトです。

システム開発おぼえがき: Cordova(Phonegap)のコマンドラインで署名付きapkを作成する

こういう流れで出来ているのは知らなかったので勉強になりました。

ただここを参考にしてビルドをしましたが、ちょっと色々変わっていたみたい。

キーワードとしてはJDK7と署名の暗号化方式

Signing Your Applications | Android Developers

JDK7では署名アルゴリズムが変更になっているためINSTALL_PARSE_FAILED_NO_CERTIFICATE エラーが発生してapkがインストールできない: 発火後忘失

環境とコマンドが影響しているみたいです。

ただこの現象は、一部端末で発生するみたいで、個人的に使っていた端末では一切でなかったので、大変です。

一度出る端末を見つけてしまえば、それにインストールができるかどうかになります。

コマンドでインストールする際に
「INSTALL_PARSE_FAILED_NO_CERTIFICATE」
のエラーがでます。

かなり古い端末が出るみたいですね。条件はわかりませんが、開発者サービスがはいらない機種とか、Javaのバージョンが対応していない端末じゃないかと思っています。

以前はjava6ですから。そのあたりに原因がありそうではありますが、しっかりとはわかりません。

jdk7で署名の指定を変更しているみたいなので、原因はちかいかと。

結果として

対応した結果のapkファイルで問題が起きていないみたいなので、大丈夫だと思います。

Eclipseでやってくれている部分なため、あまり理解していなかったのが今回の失敗につながっていますね。

ブラックボックスであっていい部分と、だめな部分はありますよね。

Eclipseを使いたくなかったためにいろいろ調べた結果なため、ちょっと凹みましたが、次回から問題はないようにします。

いまはEclipseのやっている内容をどうやってLogに出力するかを探しています。

裏でやっている動作をみれるようにしたいです。

アプリを作ろう!  Android入門 第2版

アプリを作ろう! Android入門 第2版