Ошибка «Файл пакета не был правильно подписан» – обнаружит, произойдет ли это с приложением Google Play app apk

У меня возникают проблемы с ошибкой, описанной в следующих вопросах:

Опубликованный Android apk дает ошибку «Файл пакета не был подписан правильно»
Некоторые (но не все) пользователи получают «файл пакета не был правильно подписан» при загрузке моего приложения из Google Play

В частности, когда некоторые пользователи пытаются загрузить мое приложение Google Play, они получают ошибку, другие – нет.

Мой вопрос: как обнаружить перед представлением, будет ли проблема возникать или нет?

Для чего это стоит, когда я бегу

jarsigner -verify -verbose -certs myapk.apk 

Я вижу следующее:

86226 Вс Ноя 09 10:34:54 EET 2014 META-INF / MANIFEST.MF X.509, // [личный материал опущен] [сертификат действителен с 8/20/14 8:04 AM по 1/5/42 7 : 04 AM] [CertPath не проверяется: путь не связан с каким-либо из якоря доверия] // несколько сотен записей, как указано выше, а затем: jar verified.

Предупреждение. В этой банке содержатся записи, цепочка сертификатов которых не проверена. Эта банка содержит подписи, которые не содержат отметки времени. Без отметки времени пользователи могут не подтвердить эту банку после истечения срока действия сертификата подписчика (2042-01-05) или после любой даты отзыва в будущем.

Solutions Collecting From Web of "Ошибка «Файл пакета не был правильно подписан» – обнаружит, произойдет ли это с приложением Google Play app apk"

На самом деле это обычная проблема, и я предполагаю, что вы должны использовать Java 7 или новее.

Решение

Запустить jarsigner:

 jarsigner -verbose -verify -keystore ${KEYSTORE_PATH} ${YOU_JAR_FILE} 

Посмотрите здесь

На самом деле не тест, чтобы проверить, подписаны ли apk, но я считаю, что это полезно:

Я получил эту проблему некоторое время назад, мое решение: подписать вручную.
Вот сценарий:

 #!/bin/bash storepass="your store pass" keypass="your key pass" alias="alias" if [ $# -lt 1 ]; then echo "$0 <apk file>" exit 1; fi filename=$(basename "$1") extension="${filename##*.}" filename="${filename%.*}" if [ $extension != "apk" ]; then echo "Inputfile is no apk!" exit 1; fi cp $filename.apk $filename-tmp.apk zip -d $filename-tmp.apk "META-INF*" rm -rf $filename-signed.apk jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore $keystore -storepass $storepass -keypass $keypass $filename-tmp.apk $alias /Developer/android-sdk-macosx/build-tools/20.0.0/zipalign -f -v 4 $filename-tmp.apk $filename-signed.apk rm -rf $filename-tmp.apk 

Возможно, вам потребуется обновить настройки. Я тестировал его с помощью нескольких устройств (Galaxy Note 10.5, Samsung Galaxy S3, S5, Nexus 4, вкладка Lenovo)
Кажется, работает до сих пор.

(Подпись на Mac OSX)

Кордоба построить андроид – освободить

Перед тем, как настроить его: Создайте файл ant.properties в платформах / android / с помощью пути хранилища ключей и псевдонима:

Key.store = / path / to / keystore / release_key_name.keystore key.alias = alias_name

Вам будет предложено ввести пароль.

APK будет создан на платформах / android / ant-build / app_name-release.apk.

Источник http://ilee.co.uk/Sign-Releases-with-Cordova-Android/

Как обнаружить перед отправкой вопрос о том, произойдет ли проблема или нет

Если вы запускаете jarsigner -verify -verbose -certs myapk.apk прежде чем отправлять свою сборку, и вы не получите никаких предупреждений, как вы видите, тогда проблема не произойдет.

Для чего это стоит, OSX я избегаю этой проблемы, временно перейдя на Java 6 только для сборки релиза:

 sudo cp -R /System/Library/Java/JavaVirtualMachines/1.6.0.jdk /Library/Java/JavaVirtualMachines/1.6.0.jdk sudo mv /Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk ~/Desktop/jdk1.8.0_31.jdk java -version // shows java version "1.6.0_65" yay!! 

Делайте мою сборку без сертификата и временных ошибок. И вернемся к Java 8:

 sudo mv ~/Desktop/jdk1.8.0_31.jdk /Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk 

Воспользуйтесь программой eclipse proguard и замените содержимое proguard.cfg следующим: (учтите, что если вы используете студию Android, вы можете импортировать проект для затмения с помощью импорта)

 -optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers -dontpreverify -dontshrink -verbose -injars bin/classes -injars libs -outjars bin/classes-processed.jar -dontwarn org.apache.** -dontwarn org.slf4j.** -dontwarn org.json.* -dontwarn org.mortbay.** -dontwarn org.apache.log4j.** -dontwarn org.apache.commons.logging.** -dontwarn org.apache.commons.logging.** -dontwarn org.apache.commons.codec.binary.** -dontwarn javax.xml.** -dontwarn javax.management.** -dontwarn java.lang.management.** -dontwarn android.support.** -dontwarn com.google.code.** -dontwarn oauth.signpost.** -dontwarn twitter4j.** -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -keep public class * extends android.app.Activity -keep public class * extends android.app.Application -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider -keep public class * extends android.app.backup.BackupAgentHelper -keep public class * extends android.preference.Preference -keep public class com.android.vending.licensing.ILicensingService -keep public class com.google.code.linkedinapi.** -keep class javax.** { *; } -keep class org.** { *; } -keep class java.lang.management.** { *; } # use the keep command in that format for your third party libraries -keepclassmembers public class com.google.code.linkedinapi.client.impl.LinkedInApiXppClient { public <init>(java.lang.String, java.lang.String); } -keepclasseswithmembernames class * { native <methods>; } -keepclasseswithmembernames class * { public <init>(android.content.Context, android.util.AttributeSet); } -keepclasseswithmembernames class * { public <init>(android.content.Context, android.util.AttributeSet, int); } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } 

Это проблема с инструментами JAVA. Это часто происходит при смешивании инструментов JDK и JRE в системе. Вы не используете инструменты Java 7. Используйте только инструменты JDK 6.

По желанию мы можем перестать тратить больше времени, вставив результат из следующего, чтобы мы оба почувствовали, что на самом деле что-то сделали:

 which jar signer jarsigner -verify -verbose -certs yourJar.jar 

Пожалуйста, перейдите к этому для более подробной информации.