Разница между версиями подписи - V1 (подпись Jar) и V2 (полная подпись APK) при создании подписанного APK в Android Studio?

234

Пожалуйста, выберите хотя бы одну из версий подписи для использования в Android Studio 2.3

Теперь, создавая подписанный APK в Android Studio, он показывает две опции (CheckBox), а именно 1. V1 (Jar Signature)и 2. V2 (Full APK Signature)как Версии подписи на последнем шаге процесса создания подписанного APK.

** Варианты подписи ** варианты

Итак, в чем разница между V1 (Jar Signature) и V2 (Full APK Signature) в новом обновлении Android Studio?

И что я должен использовать (или оба) для подписания apk для выпуска Play Store?

Кроме того, я получаю сообщение об ошибке Установить Parse Failed No Certificates при установке APK, когда я использую второй вариант.

Шириш Хервейд
источник

Ответы:

219

Это новый механизм подписи, представленный в Android 7.0, с дополнительными функциями, разработанными для повышения безопасности подписи APK.

Это не обязательно. Вы должны установить ОБА из этих флажков, если это возможно, но если новый механизм подписи V2 создает проблемы, вы можете его опустить

Таким образом, вы можете просто оставить V2 без контроля, если у вас возникнут проблемы, но по возможности следует проверить его.

козявка
источник
Вы должны перефразировать ваш вопрос, хотя, похоже, что вы даже не читали документацию, которая была связана ... полезно знать, что вы можете оставить эту галочку не отмеченной. Возможно, если вы добавите «сообщение об ошибке и
Booger
Я загрузил приложение подписанным приложением, используя V1 и V2. После этого я загружаю приложение из google play и запускаю ту же версию из Android Studio, где отображается диалоговое окно «Установка не удалась, поскольку на устройстве установлено приложение с тем же пакетом, но с другой подписью ...». Можете ли вы подсказать, что я я делаю неправильно, нужно обновить build.gradle?
Усман Афзал
@UsmanAfzal, это ожидаемое поведение, так как вы подписали приложение в PlayStore с выпуском, и теперь вы хотите отладить или запустить его через Android Studio с отладкой. Обратите внимание, что релиз и отладка - это разные подписи
Parama Dharmika
44

Должен ли я использовать (или оба) для подписания apk для выпуска Play Store? Ответ ДА .

Согласно https://source.android.com/security/apksigning/v2.html#verification :

В Android 7.0 APK могут быть проверены в соответствии со схемой подписи APK v2 (схема v2) или подписью JAR (схема v1). Старые платформы игнорируют подписи v2 и проверяют только подписи v1.

Я попытался сгенерировать сборку с проверкой опции V2 (Full Apk Signature) . Затем, когда я попытался установить сборку релиза на устройстве ниже 7.0, и я не смог установить сборку на устройстве.

После этого я попытался выполнить сборку, установив оба флажка версии и сгенерировав выпуск сборки. Затем можно установить сборку.

pRaNaY
источник
24

Это написано здесь , что «по умолчанию Android Studio 2.2 и Android плагин для Gradle 2.2 подписать приложение , используя как APK Signature Scheme v2 и традиционную схему подписи, которая использует подписание JAR.»

Поскольку кажется, что эти новые флажки появились в Android 2.3, я понимаю, что мои предыдущие версии Android Studio (по крайней мере, 2.2) подписывали обеими сигнатурами. Итак, чтобы продолжить, как я делал раньше, я думаю, что лучше установить оба флажка.

РЕДАКТИРОВАТЬ 31 марта 2017: отправлено несколько приложений с обеими подписями => без проблем :)

Regis_AG
источник
7

Я думаю, что это хороший ответ.

Проверка схемы подписи APK v2

  1. Найдите APK Signing Blockи убедитесь, что:
    1. Два поля размера APK Signing Blockсодержат одинаковое значение.
    2. ZIP Central Directoryнемедленно сопровождается ZIP End of Central Directoryзаписью.
    3. ZIP End of Central Directory не сопровождается большим количеством данных.
  2. Найдите первый APK Signature Scheme v2 Blockвнутри APK Signing Block. Если блок v2, если имеется, перейдите к шагу 3. В противном случае вернитесь к проверке APK по схеме v1.
  3. Для каждого подписавшего в APK Signature Scheme v2 Block:
    1. Выберите самый сильный поддерживаемый идентификатор алгоритма подписи из подписей. Сила упорядочения зависит от каждой версии реализации / платформы.
    2. Проверьте соответствующую подпись из подписей против подписанных данных, используя открытый ключ. (Теперь безопасно анализировать подписанные данные.)
    3. Убедитесь, что упорядоченный список идентификаторов алгоритма подписи в дайджестах и ​​подписях идентичен. (Это предотвращает удаление / добавление подписи.)
    4. Вычислить дайджест содержимого APK, используя тот же алгоритм дайджеста, что и алгоритм дайджеста, используемый алгоритмом подписи.
    5. Убедитесь, что вычисленный дайджест идентичен соответствующему дайджесту из дайджестов.
    6. Убедитесь, что SubjectPublicKeyInfoпервый сертификат сертификатов идентичен открытому ключу.
  4. Проверка успешна, если был найден хотя бы один подписант, и для каждого найденного подписчика был выполнен шаг 3.

Примечание: APK не должен проверяться по схеме v1, если сбой происходит на шаге 3 или 4.

JAR-подписанная проверка APK (схема v1)

APK-файл, подписанный JAR, является стандартным JAR-подписью, который должен содержать именно те записи, которые указаны в списке, META-INF/MANIFEST.MFи где все записи должны быть подписаны одним и тем же набором подписантов. Его целостность проверяется следующим образом:

  1. Каждый подписавший представлен записью JAR META-INF/<signer>.SFи META-INF/<signer>.(RSA|DSA|EC).
  2. <signer>.(RSA|DSA|EC)является структурой PKCS #7 CMS ContentInfoс SignedData, чья подпись проверяется в <signer>.SFфайле.
  3. <signer>.SFфайл содержит дайджест всего файла META-INF/MANIFEST.MFи дайджесты каждого раздела META-INF/MANIFEST.MF. Дайджест всего файла MANIFEST.MFпроверен. Если это не удается, MANIFEST.MFвместо этого проверяется дайджест каждого раздела.
  4. META-INF/MANIFEST.MFсодержит для каждой защищенной целостностью записи JAR раздел с соответствующим именем, содержащий дайджест несжатого содержимого записи. Все эти дайджесты проверены.
  5. Проверка APK не выполняется, если APK содержит записи JAR, которые не указаны в MANIFEST.MFи не являются частью подписи JAR. Таким образом, защитная цепочка представляет собой <signer>.(RSA|DSA|EC)<signer>.SFMANIFEST.MF→ содержимое каждой записи JAR с защитой целостности.
Zonda
источник
где написано «Примечание: APK не должен проверяться с использованием схемы v1, если сбой происходит на шаге 3 или 4», шаге 3 или 4 на схеме 2 или схеме 1? также, если сбой происходит в шаге 3 или 4 в v2, а затем говорится, что его нельзя проверить с помощью схемы v1, то он не будет проверен в v1 или v2, как он будет проверен?
isJulian00
7

По этой ссылке: подпись справки

APK Signature Scheme v2 предлагает:

  1. Более быстрое время установки приложения
  2. Больше защиты от несанкционированного изменения файлов APK.

Android 7.0 представляет APK Signature Scheme v2, новую схему подписи приложений, которая обеспечивает более быструю установку приложений и более надежную защиту от несанкционированного изменения файлов APK. По умолчанию Android Studio 2.2 и плагин Android для Gradle 2.2 подписывают ваше приложение, используя APK Signature Scheme v2 и традиционную схему подписи, которая использует JAR-подпись.

Он рекомендуется использовать APK Signature Scheme v2 , но не является обязательным .

Хотя мы рекомендуем применять APK Signature Scheme v2 для вашего приложения, эта новая схема не является обязательной. Если ваше приложение не работает должным образом при использовании APK Signature Scheme v2, вы можете отключить новую схему.

Шириш Хервейд
источник
Привет @Shirish, мы можем сделать сборку v2 из затмения?
Арджун Т Радж