ラベル apk署名 の投稿を表示しています。 すべての投稿を表示
ラベル apk署名 の投稿を表示しています。 すべての投稿を表示

2015年1月30日金曜日

「パッケージファイルに正しく署名されていません」にハマった

署名したapkをPlayストアにアップしたら、一部の端末で
「パッケージファイルに正しく署名されていません」が表示され、インストール不可の状態になった。


開発環境

Android Studio : 1.0.1
Ubuntu : 14.04
Java : OpenJDK1.7.0_65

原因

jarsignerの署名方式のデフォルト値がJDK6までとJDK7以降で変更されているようです。
そのため、コマンド実行でJDK7を使用して署名を行ったため「パッケージファイルに正しく署名されていません」と表示される端末が発生しました。

参考:
JDK7でAndroidアプリをリリースビルドする方法
Androidアプリをリリースしたら「パッケージファイルに正しく署名されていません」と表示されて焦ったでござる

解決方法

build.gradleに署名用の記述追加(OpenJDK1.7.0_65のままで大丈夫でした)
参考:AndroidStudio で APK の署名の設定を gradle.properties に記述する

gradle.propertiesに署名関連の設定を記述することで、
gitignoreでgradle.propertiesをgit管理の対象外にすると、署名ファイルのパスワードなどをアップせずに済むので、とても良いです。

gradle.propertiesに記述する
storeFile=/path/to/your.keystore

は、キーストアファイルのある場所が、/home/ysakaguchi/android/release/android.keystoreなら
storeFile=/android/release/android.keystore
となります。

確認方法

deploygateに修正したapkをアップして、JDK7のデフォルト署名方式だとうまくインストールできなかった端末で、再度インストールを試みたところうまくいくことも、先に確認できました。
「パッケージファイルに正しく署名されていません」が発生する端末は、どれなのかまでは絞れてないですが、SHARP端末はなるっぽい?かもです。
手元にIS05があったので、本件の現象が再現できました。
Xperiaは署名方式が違ってもダウンロードできていました。


ちなみに今回の件が分かったアプリはこちらになります↓

2014年10月5日日曜日

apkへの署名で、「-tsaまたは-tsacertが指定されていないため、このjarにはタイムスタンプが付加されていません。」という警告が出た

署名付きapkファイル作成で警告が発生


ここ→http://techbooster.org/android/environment/1445/
を参考に、コマンドでapkファイルに署名を行うと、以下の警告文が表示された。



jarは署名されました。

警告: 
-tsaまたは-tsacertが指定されていないため、このjarにはタイムスタンプが付加されていません。タイムスタンプがないと、署名者証明書の有効期限(2042-02-19)後または将来の失効日後に、ユーザーはこのjarを検証できない可能性があります。

  • 警告は出るが、署名付きファイルは無事生成される
  • 警告は気にしなくていい、と書いているサイトもある


原因と解決方法


原因

JDKのバージョンが1.7 u51以降だったため


JDKのバージョン確認は"java -version"コマンド実行


解決方法

解決方法は3種類あります。

  1. JDK1.7 u51以前のバージョンのJDK7をインストール ※1
  2. JDK6をインストール
  3. 署名時に使うjarsignerコマンドのオプションに"-tsa http://timestamp.digicert.com"を追加
今回は3を行いました。(なので、1と2は未確認になります。)


署名用コマンドは下記のとおりです。

jarsigner -verbose -tsa http://timestamp.digicert.com -keystore hogehoge.keystore android_app.apk hogehoge


(2015/01/30 追記)
※1 jarsignerの署名方式のデフォルト値がJDK6までとJDK7以降で変更されているようなので、これにハマったので注意。→「パッケージファイルに正しく署名されていません」にハマった