Differenza tra le versioni della firma: V1 (Jar Signature) e V2 (Firma APK completa) durante la generazione di un APK firmato in Android Studio?


234

Seleziona almeno una delle versioni della firma da utilizzare in Android Studio 2.3

Ora, durante la generazione di un APK firmato in Android Studio, vengono mostrate due opzioni (CheckBox), vale a dire 1. V1 (Jar Signature)e 2. V2 (Full APK Signature)come versioni della firma nell'ultima fase del processo di generazione dell'APK firmato.

** Versioni della firma ** opzioni

Quindi, qual è la differenza tra V1 (Jar Signature) e V2 (Firma APK completa) nel nuovo aggiornamento di Android Studio?

E quale dovrei usare (o entrambi) per firmare l'apk per la versione Play Store?

Inoltre, viene visualizzato l'errore Installa analisi non riuscite senza certificati durante l'installazione dell'APK quando utilizzo la seconda opzione.

Risposte:


219

È un nuovo meccanismo di firma introdotto in Android 7.0, con funzionalità aggiuntive progettate per rendere più sicura la firma APK.

Non è obbligatorio Dovresti selezionare ENTRAMBI queste caselle se possibile, ma se il nuovo meccanismo di firma V2 ti dà problemi, puoi ometterlo.

Quindi puoi semplicemente lasciare V2 deselezionato se riscontri problemi, ma dovresti farlo controllare se possibile.


Tuttavia, dovresti riformulare la tua domanda, sembra che tu non abbia nemmeno letto la documentazione che è stata collegata ... è utile sapere che puoi lasciare quel segno di spunta deselezionato. Forse se aggiungi il "messaggio di errore e problema che hai riscontrato), questa domanda diventerà più preziosa per il futuro
Booger

Ho caricato un'app dall'applicazione firmata usando V1 e V2. Dopo di che scarico l'applicazione da Google Play ed eseguo la stessa versione da Android Studio, mi mostra la finestra di dialogo "Installazione non riuscita poiché il dispositivo ha un'applicazione con lo stesso pacchetto ma una firma diversa ..." Puoi suggerirmi cosa sto sbagliando bisogno di aggiornare build.gradle?
Usman Afzal,

@UsmanAfzal, è previsto un comportamento da quando hai firmato l'app sul Playstore con rilascio e ora vuoi eseguire il debug o eseguirlo tramite Android Studio con debug. Si noti che il rilascio e il debug sono firma diversa
Parama Dharmika,

44

Dovrei usare (o entrambi) per firmare l'apk per la versione Play Store? Una risposta è .

Secondo https://source.android.com/security/apksigning/v2.html#verification :

In Android 7.0, gli APK possono essere verificati secondo lo schema di firma APK v2 (schema v2) o la firma JAR (schema v1). Le piattaforme precedenti ignorano le firme v2 e verificano solo le firme v1.

Ho provato a generare build controllando l' opzione V2 (firma APK completa) . Quindi, quando ho provato a installare una build di rilascio nel dispositivo 7.0 inferiore e non sono in grado di installare build nel dispositivo.

Successivamente ho provato a compilare selezionando entrambe le caselle di controllo della versione e generando build di rilascio. Quindi in grado di installare build.


24

Qui è scritto che "Per impostazione predefinita, Android Studio 2.2 e il plug-in Android per Gradle 2.2 firmano la tua app utilizzando sia APK Signature Scheme v2 che lo schema di firma tradizionale, che utilizza la firma JAR".

Dato che queste nuove caselle di controllo sono apparse con Android 2.3, capisco che le mie versioni precedenti di Android Studio (almeno la 2.2) firmassero con entrambe le firme. Quindi, per continuare come ho fatto prima, penso che sia meglio selezionare entrambe le caselle.

MODIFICA 31 marzo 2017: ha inviato diverse app con entrambe le firme => nessun problema :)


7

Penso che questo rappresenti una buona risposta.

Verifica dell'APK Signature Scheme v2

  1. Individua APK Signing Blocke verifica che:
    1. Due campi di dimensioni di APK Signing Blockcontengono lo stesso valore.
    2. ZIP Central Directoryè immediatamente seguito da ZIP End of Central Directoryrecord.
    3. ZIP End of Central Directory non è seguito da più dati.
  2. Individua il primo APK Signature Scheme v2 Blockall'interno di APK Signing Block. Se il blocco v2, se presente, procedere al passaggio 3. In caso contrario, tornare alla verifica dell'APK utilizzando lo schema v1.
  3. Per ogni firmatario in APK Signature Scheme v2 Block:
    1. Scegli l'ID dell'algoritmo di firma supportato più forte tra le firme. L'ordinamento della forza dipende da ogni versione di implementazione / piattaforma.
    2. Verificare la firma corrispondente dalle firme rispetto ai dati firmati utilizzando la chiave pubblica. (Ora è sicuro analizzare i dati firmati.)
    3. Verificare che l'elenco ordinato di ID algoritmo di firma nei digest e nelle firme sia identico. (Questo serve a prevenire lo stripping / aggiunta della firma.)
    4. Calcola il digest dei contenuti APK usando lo stesso algoritmo digest dell'algoritmo digest usato dall'algoritmo di firma.
    5. Verificare che il digest calcolato sia identico al digest corrispondente dai digest.
    6. Verificare che SubjectPublicKeyInfoil primo certificato di certificati sia identico alla chiave pubblica.
  4. La verifica ha esito positivo se viene trovato almeno un firmatario e il passaggio 3 ha avuto esito positivo per ciascun firmatario trovato.

Nota: l'APK non deve essere verificato utilizzando lo schema v1 se si verifica un errore nel passaggio 3 o 4.

Verifica APK firmata JAR (schema v1)

L'APK con firma JAR è un JAR con firma standard, che deve contenere esattamente le voci elencate META-INF/MANIFEST.MFe in cui tutte le voci devono essere firmate dallo stesso set di firmatari. La sua integrità è verificata come segue:

  1. Ogni firmatario è rappresentato da una voce META-INF/<signer>.SFe META-INF/<signer>.(RSA|DSA|EC)JAR.
  2. <signer>.(RSA|DSA|EC)è una PKCS #7 CMS ContentInfostruttura con SignedData la cui firma è verificata sul <signer>.SFfile.
  3. <signer>.SFIl file contiene un digest dell'intero file dei digest META-INF/MANIFEST.MFe di ciascuna sezione di META-INF/MANIFEST.MF. Il digest dell'intero file del MANIFEST.MFè verificato. In caso MANIFEST.MFcontrario, viene verificato il digest di ciascuna sezione.
  4. META-INF/MANIFEST.MFcontiene, per ciascuna voce JAR protetta da integrità, una sezione con nome corrispondente contenente il digest dei contenuti non compressi della voce. Tutti questi digest sono verificati.
  5. La verifica APK ha esito negativo se l'APK contiene voci JAR che non sono elencate nella MANIFEST.MFfirma JAR e che non fanno parte della stessa. La catena di protezione è quindi <signer>.(RSA|DSA|EC)<signer>.SFMANIFEST.MF→ contenuto di ciascuna voce JAR protetta da integrità.

dove si dice "Nota: APK non deve essere verificato utilizzando lo schema v1 se si verifica un errore nel passaggio 3 o 4", passaggio 3 o 4 nello schema 2 o schema 1? anche se si verifica un errore nel passaggio 3 o 4 in v2 e quindi si dice che non può essere verificato utilizzando lo schema v1, allora non verrà verificato in v1 o v2 come verrà verificato?
isJulian00

7

Secondo questo link: aiuto per la firma

L'APK Signature Scheme v2 offre:

  1. Tempi di installazione delle app più rapidi
  2. Maggiore protezione contro le modifiche non autorizzate ai file APK.

Android 7.0 introduce APK Signature Scheme v2, un nuovo schema di firma delle app che offre tempi di installazione delle app più rapidi e una maggiore protezione contro le modifiche non autorizzate ai file APK. Per impostazione predefinita, Android Studio 2.2 e il plug-in Android per Gradle 2.2 firmano la tua app utilizzando sia APK Signature Scheme v2 che lo schema di firma tradizionale, che utilizza la firma JAR.

Si consiglia di utilizzare APK Signature Scheme v2 ma non è obbligatorio .

Sebbene consigliamo di applicare APK Signature Scheme v2 alla tua app, questo nuovo schema non è obbligatorio. Se l'app non viene compilata correttamente quando si utilizza APK Signature Scheme v2, è possibile disabilitare il nuovo schema.


Ciao @Shirish, possiamo creare build v2 da eclipse?
Arjun T Raj,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.