¿Diferencia entre las versiones de firma: V1 (Jar Signature) y V2 (Full APK Signature) al generar un APK firmado en Android Studio?

234

Seleccione al menos una de las versiones de firma para usar en Android Studio 2.3

Ahora, mientras genera un APK firmado en Android Studio, muestra dos opciones (CheckBox), a saber, 1. V1 (Jar Signature)y 2. V2 (Full APK Signature)como versiones de firma en el último paso del proceso de generación de APK firmado.

** Versiones exclusivas ** opciones

Entonces, ¿cuál es la diferencia entre V1 (Jar Signature) y V2 (Full APK Signature) en la nueva actualización de Android Studio?

¿Y qué debo usar (o ambos) para firmar apk para el lanzamiento de Play Store?

Además, recibo el error Instalar Parse no falló sin certificados al instalar APK cuando uso la segunda opción.

Shirish Herwade
fuente

Respuestas:

219

Es un nuevo mecanismo de firma introducido en Android 7.0, con características adicionales diseñadas para hacer que la firma APK sea más segura.

No es obligatorio. Debería marcar AMBAS de esas casillas de verificación si es posible, pero si el nuevo mecanismo de firma V2 le da problemas, puede omitirlo.

Por lo tanto, puede dejar V2 sin marcar si encuentra problemas, pero debería tenerlo marcado si es posible.

Moco
fuente
Sin embargo, debe volver a redactar su pregunta, parece que ni siquiera ha leído la documentación que se vinculó ... es útil saber que puede dejar esa marca de verificación sin marcar. Quizás si agrega el "mensaje de error y el problema que encontró), entonces esta pregunta será más valiosa para el futuro
Booger
He subido la aplicación por aplicación firmada usando V1 y V2. Después de eso descargué la aplicación de Google Play y ejecuté la misma versión de Android Studio, me muestra el cuadro de diálogo "La instalación falló ya que el dispositivo tiene una aplicación con el mismo paquete pero con una firma diferente ..." ¿Puede sugerirme qué estoy haciendo mal necesito actualizar el build.gradle?
Usman Afzal
@UsmanAfzal, es un comportamiento esperado ya que firmó la aplicación en la tienda de juegos con el lanzamiento, y ahora desea depurarla o ejecutarla a través de Android Studio con depuración. Tenga en cuenta que la liberación y la depuración son firmas diferentes
Parama Dharmika el
44

¿Debo usar (o ambos) para firmar apk para el lanzamiento de Play Store? Una respuesta es .

Según https://source.android.com/security/apksigning/v2.html#verification :

En Android 7.0, los APK se pueden verificar de acuerdo con el esquema de firma APK v2 (esquema v2) o la firma JAR (esquema v1). Las plataformas más antiguas ignoran las firmas v2 y solo verifican las firmas v1.

Traté de generar compilación con la opción de comprobación V2 (Firma Apk completa) . Luego, cuando traté de instalar una versión de lanzamiento en un dispositivo inferior a 7.0 y no puedo instalarla en el dispositivo.

Después de eso intenté compilar marcando la casilla de verificación de ambas versiones y generar la compilación de lanzamiento. Luego puede instalar build.

PRENSA
fuente
24

Está escrito aquí que "De forma predeterminada, Android Studio 2.2 y el complemento de Android para Gradle 2.2 firman su aplicación utilizando el APK Signature Scheme v2 y el esquema de firma tradicional, que utiliza la firma JAR".

Como parece que estas nuevas casillas de verificación aparecieron con Android 2.3, entiendo que mis versiones anteriores de Android Studio (al menos la 2.2) firmaron con ambas firmas. Entonces, para continuar como lo hice antes, creo que es mejor marcar ambas casillas de verificación.

EDITAR 31 de marzo de 2017: se presentaron varias aplicaciones con ambas firmas => no hay problema :)

Regis_AG
fuente
7

Creo que esto representa una buena respuesta.

Verificación de APK Signature Scheme v2

  1. Localice APK Signing Blocky verifique que:
    1. Dos campos de tamaño APK Signing Blockcontienen el mismo valor.
    2. ZIP Central Directoryes seguido inmediatamente por el ZIP End of Central Directoryregistro.
    3. ZIP End of Central Directory no es seguido por más datos.
  2. Ubique el primero APK Signature Scheme v2 Blockdentro del APK Signing Block. Si el Bloque v2 está presente, continúe con el paso 3. De lo contrario, vuelva a verificar el APK utilizando el esquema v1.
  3. Para cada firmante en el APK Signature Scheme v2 Block:
    1. Elija la ID de algoritmo de firma compatible más fuerte de las firmas. El orden de fuerza depende de cada versión de implementación / plataforma.
    2. Verifique la firma correspondiente de las firmas contra los datos firmados utilizando la clave pública. (Ahora es seguro analizar los datos firmados).
    3. Verifique que la lista ordenada de ID de algoritmos de firma en resúmenes y firmas sea idéntica. (Esto es para evitar la eliminación / adición de firmas).
    4. Calcule el resumen del contenido de APK utilizando el mismo algoritmo de resumen que el algoritmo de resumen utilizado por el algoritmo de firma.
    5. Verifique que el resumen calculado sea idéntico al resumen correspondiente de los resúmenes.
    6. Verifique que SubjectPublicKeyInfoel primer certificado de certificados sea idéntico a la clave pública.
  4. La verificación tiene éxito si se encontró al menos un firmante y el paso 3 tuvo éxito para cada firmante encontrado.

Nota: APK no debe verificarse usando el esquema v1 si ocurre una falla en el paso 3 o 4.

Verificación de APK firmada por JAR (esquema v1)

El APK firmado con JAR es un JAR firmado estándar, que debe contener exactamente las entradas enumeradas META-INF/MANIFEST.MFy donde todas las entradas deben estar firmadas por el mismo conjunto de firmantes. Su integridad se verifica de la siguiente manera:

  1. Cada firmante está representado por una META-INF/<signer>.SFy META-INF/<signer>.(RSA|DSA|EC)la entrada JAR.
  2. <signer>.(RSA|DSA|EC)es una PKCS #7 CMS ContentInfoestructura con SignedData cuya firma se verifica sobre el <signer>.SFarchivo.
  3. <signer>.SFEl archivo contiene un resumen de todo el archivo de los META-INF/MANIFEST.MFresúmenes y de cada sección de META-INF/MANIFEST.MF. Se MANIFEST.MFverifica el resumen de todo el archivo . Si eso falla, MANIFEST.MFse verifica el resumen de cada sección.
  4. META-INF/MANIFEST.MFcontiene, para cada entrada JAR protegida con integridad, una sección con el nombre correspondiente que contiene el resumen de los contenidos sin comprimir de la entrada. Todos estos resúmenes se verifican.
  5. La verificación del APK falla si el APK contiene entradas JAR que no figuran en la MANIFEST.MFy no son parte de la firma JAR. La cadena de protección es, por lo tanto, <signer>.(RSA|DSA|EC)<signer>.SFMANIFEST.MF→ el contenido de cada entrada JAR protegida con integridad.
zonda
fuente
donde dice "Nota: APK no debe verificarse utilizando el esquema v1 si se produce un error en el paso 3 o 4", el paso 3 o 4 en el esquema 2 o el esquema 1? Además, si ocurre una falla en el paso 3 o 4 en v2 y luego dice que no se puede verificar usando el esquema v1, entonces no se verificará en v1 o v2 ¿cómo se verificará?
isJulian00
7

De acuerdo con este enlace: ayuda de la firma

APK Signature Scheme v2 ofrece:

  1. Tiempos de instalación de aplicaciones más rápidos
  2. Más protección contra alteraciones no autorizadas a archivos APK.

Android 7.0 presenta APK Signature Scheme v2, un nuevo esquema de firma de aplicaciones que ofrece tiempos de instalación de aplicaciones más rápidos y más protección contra alteraciones no autorizadas de archivos APK. De forma predeterminada, Android Studio 2.2 y el complemento de Android para Gradle 2.2 firman su aplicación utilizando tanto el APK Signature Scheme v2 como el esquema de firma tradicional, que utiliza la firma JAR.

Se recomienda utilizar APK Signature Scheme v2, pero no es obligatorio .

Aunque recomendamos aplicar APK Signature Scheme v2 a su aplicación, este nuevo esquema no es obligatorio. Si su aplicación no se compila correctamente al usar APK Signature Scheme v2, puede deshabilitar el nuevo esquema.

Shirish Herwade
fuente
Hola @Shirish, ¿podemos hacer compilaciones v2 desde eclipse?
Arjun T Raj