はじめまして、趣味でウィジェットやゲームを作っているTAMAと申します。
開発環境をAndroid Studio 2.1へ更新したところGooglePlayからのインストールが失敗する端末があり、土日で原因を探ったのですが謎が深まるばかりで月曜の朝を迎えてしまいました。
開発中にエラーや警告が無く特定の端末で発生する非常に怖い不具合なので原因を知りたいのですが、この状況について情報をお持ちでないでしょうか?
発生条件
(1) AndroidStudio2.1で署名付きビルド
(2) 数年前に作成したkeystore (DSA)を使用
(3) minSdkVersion 19 (minSdkVersion 7では問題が発生しない)
(4) Android 4.4.2の端末
GooglePlayからのインストール時に以下のメッセージが表示されます
------------
アプリをインストールできない
「<アプリ名>」 をインストールできません。 もう一度お試しいただいても問題が発生する場合は、トラブルシューティングをご覧ください (エラーコード:-103)。
------------
AndroidStudioから署名付きのインストールを行うと以下のログが残ります
------------
Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
Installation failed since the APK was either not signed, or signed incorrectly.
If this is a Gradle-based project, then make sure the signing configuration is specified in the Gradle build script.
Error while Installing APK
------------
テスト結果
[OK] AndroidStudio1.5 / API19 / RSA
[OK] AndroidStudio1.5 / API19 / DSA
[OK] AndroidStudio2.1 / API7 / RSA
[OK] AndroidStudio2.1 / API7 / DSA
[OK] AndroidStudio2.1 / API19 / RSA
[NG] AndroidStudio2.1 / API19 / DSA
[OK] AndroidStudio2.1 / API19 / DSA jarsignerにて手動署名
・不具合が発生する端末 F-01F(4.4.2), SO-02F(4.4.2)
・問題なかった端末 Nexus 7 2013(6.0.1), Nexus 9(6.0.1), SO-02G(5.0.2)
・Android Studio 1.5.1 (gradle:1.3.0/JDK1.7.0_79), Android Studio 2.1(gradle:2.1.0/jdk1.8.0_91)
・新規にEmptyActivityで作成したプロジェクトで検証
備考
以下の手順で署名しなおすと正常にインストールできました
zip -d test.apk META-INF/*
jarsigner -keystore test.keystore -storepass <passwd> -signedjar test2.apk test.apk test
zipalign -v 4 test2.apk test3.apk