Różnica między wersjami podpisu - V1 (Jar Signature) i V2 (Full APK Signature) podczas generowania podpisanego APK w Android Studio?

234

Wybierz przynajmniej jedną z wersji podpisu do użycia w Android Studio 2.3

Teraz podczas generowania podpisanego pliku APK w Android Studio pokazuje dwie opcje (CheckBox), a mianowicie 1. V1 (Jar Signature)i 2. V2 (Full APK Signature)jako Wersje podpisu w ostatnim kroku procesu generowania podpisanego pliku APK.

** Wersje podpisu ** opcje

Jaka jest różnica między wersją V1 (sygnatura jar) a wersją V2 (sygnatura pełnego APK) w nowej aktualizacji Android Studio?

I którego powinienem użyć (lub obu) do podpisania APK do wydania w sklepie Play?

Dostaję też błąd Instalacja nie powiodła się Brak certyfikatów podczas instalowania APK, gdy korzystam z drugiej opcji.

Shirish Herwade
źródło

Odpowiedzi:

219

Jest to nowy mechanizm podpisywania wprowadzony w Androidzie 7.0, z dodatkowymi funkcjami mającymi na celu zwiększenie bezpieczeństwa podpisu APK.

To nie jest obowiązkowe. Jeśli to możliwe, zaznacz OBIEK z tych pól wyboru, ale jeśli nowy mechanizm podpisywania V2 powoduje problemy, możesz je pominąć.

Możesz więc zostawić niezaznaczone V2, jeśli napotkasz problemy, ale w miarę możliwości powinieneś to sprawdzić.

Booger
źródło
Powinieneś jednak ponownie sformułować swoje pytanie, wygląda na to, że nawet nie przeczytałeś dokumentacji, do której dowiązano ... warto wiedzieć, że możesz pozostawić to pole wyboru niezaznaczone. Być może, jeśli dodasz „komunikat o błędzie i napotkany problem”, to pytanie stanie się bardziej wartościowe na przyszłość
Booger
Przesłałem aplikację za pomocą podpisanej aplikacji przy użyciu wersji V1 i V2. Następnie pobieram aplikację z Google Play i uruchamiam tę samą wersję z Android Studio, pokazuje mi okno dialogowe „Instalacja nie powiodła się, ponieważ urządzenie ma aplikację z tym samym pakietem, ale z innym podpisem ...”. Czy możesz mi zasugerować robię źle, potrzebuję zaktualizować build.gradle?
Usman Afzal,
@ UsmanAfzal, jest to oczekiwane zachowanie, ponieważ podpisałeś aplikację w sklepie playstore z wydaniem, a teraz chcesz debugować lub uruchomić ją za pomocą Android Studio z debugowaniem. Zwróć uwagę, że wydanie i debugowanie to inna sygnatura
Parama Dharmika,
44

Czy powinienem używać (lub obu) do podpisywania APK do wydania w sklepie Play? Odpowiedź brzmi TAK .

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

W systemie Android 7.0 pakiety APK można weryfikować zgodnie ze schematem podpisu APK v2 (schemat v2) lub podpisywaniem JAR (schemat v1). Starsze platformy ignorują podpisy v2 i weryfikują tylko podpisy v1.

Próbowałem wygenerować kompilację z zaznaczeniem opcji V2 (Full Apk Signature) . Następnie, gdy próbowałem zainstalować kompilację wersji na urządzeniu poniżej 7.0 i nie mogę zainstalować kompilacji na urządzeniu.

Następnie próbowałem kompilować, zaznaczając pole wyboru obu wersji i generując kompilację wersji. Następnie można zainstalować kompilację.

PARAnIA
źródło
24

Jest tu napisane , że „Domyślnie Android Studio 2.2 i wtyczka Android dla Gradle 2.2 podpisują twoją aplikację przy użyciu zarówno schematu podpisu APK v2, jak i tradycyjnego schematu podpisywania, który wykorzystuje podpisywanie JAR”.

Ponieważ wydaje się, że te nowe pola wyboru pojawiły się w Androidzie 2.3, rozumiem, że moje poprzednie wersje Android Studio (przynajmniej 2.2) podpisywały się za pomocą obu podpisów. Tak więc, aby kontynuować tak jak poprzednio, myślę, że lepiej zaznaczyć oba pola wyboru.

EDYCJA 31 marca 2017 r .: przesłano kilka aplikacji z oboma podpisami => bez problemu :)

Regis_AG
źródło
7

Myślę, że to dobra odpowiedź.

Weryfikacja APK Signature Scheme v2

  1. Znajdź APK Signing Blocki sprawdź, czy:
    1. Dwa pola wielkości APK Signing Blockzawierają tę samą wartość.
    2. ZIP Central Directorynatychmiast następuje ZIP End of Central Directoryzapis.
    3. ZIP End of Central Directory nie następuje po nim więcej danych.
  2. Znajdź pierwszy APK Signature Scheme v2 Blockwewnątrz APK Signing Block. Jeśli blok v2, jeśli jest obecny, przejdź do kroku 3. W przeciwnym razie wróć do weryfikacji APK przy użyciu schematu v1.
  3. Dla każdego podpisującego w APK Signature Scheme v2 Block:
    1. Wybierz najsilniejszy obsługiwany identyfikator algorytmu podpisu z podpisów. Kolejność siły zależy od każdej wersji implementacji / platformy.
    2. Zweryfikuj odpowiedni podpis z podpisów w stosunku do podpisanych danych za pomocą klucza publicznego. (Teraz można bezpiecznie analizować podpisane dane).
    3. Sprawdź, czy uporządkowana lista identyfikatorów algorytmów podpisu w zestawieniach i podpisach jest identyczna. (Ma to zapobiec usuwaniu / dodawaniu podpisów).
    4. Obliczyć podsumowanie zawartości APK przy użyciu tego samego algorytmu skrótu, co algorytm skrótu używany przez algorytm podpisu.
    5. Sprawdź, czy obliczony skrót jest identyczny z odpowiadającym wyciągiem z wyciągów.
    6. Sprawdź, SubjectPublicKeyInfoczy pierwszy certyfikat certyfikatów jest identyczny z kluczem publicznym.
  4. Weryfikacja kończy się powodzeniem, jeśli znaleziono co najmniej jednego sygnatariusza i krok 3 dla każdego znalezionego podpisującego powiódł się.

Uwaga: APK nie może być zweryfikowany przy użyciu schematu v1, jeśli awaria wystąpi w kroku 3 lub 4.

Podpisana przez JAR weryfikacja APK (schemat v1)

APK ze znakiem JAR jest standardowym plikiem JAR ze znakiem, który musi zawierać dokładnie wpisy wymienione na liście META-INF/MANIFEST.MFi gdzie wszystkie wpisy muszą być podpisane przez ten sam zestaw sygnatariuszy. Jego integralność jest weryfikowana w następujący sposób:

  1. Każdy podpisujący jest reprezentowany przez wpis A META-INF/<signer>.SFi META-INF/<signer>.(RSA|DSA|EC)JAR.
  2. <signer>.(RSA|DSA|EC)jest PKCS #7 CMS ContentInfostrukturą SignedData, której podpis jest weryfikowany w <signer>.SFpliku.
  3. <signer>.SFplik zawiera podsumowanie całego pliku i podsumowania META-INF/MANIFEST.MFkażdej sekcji META-INF/MANIFEST.MF. Skrót całego pliku MANIFEST.MFjest weryfikowany. Jeśli to się nie powiedzie, MANIFEST.MFzamiast tego weryfikowany jest skrót każdej sekcji.
  4. META-INF/MANIFEST.MFzawiera, dla każdej chronionej integralności pozycji JAR, odpowiednio nazwaną sekcję zawierającą podsumowanie nieskompresowanej zawartości pozycji. Wszystkie te skróty są weryfikowane.
  5. Weryfikacja pakietu APK kończy się niepowodzeniem, jeśli plik APK zawiera wpisy JAR, które nie są wymienione w MANIFEST.MFsygnaturze JAR i nie stanowią jej części. Łańcuch ochrony to zatem <signer>.(RSA|DSA|EC)<signer>.SFMANIFEST.MF→ zawartość każdego wpisu JAR chronionego integralnością.
zonda
źródło
gdzie jest napisane „Uwaga: APK nie może być zweryfikowany przy użyciu schematu v1, jeśli awaria wystąpi w kroku 3 lub 4”, kroku 3 lub 4 na schemacie 2 lub schemacie 1? również jeśli awaria wystąpi w kroku 3 lub 4 w wersji 2, a następnie mówiąc, że nie można jej zweryfikować za pomocą schematu wersji 1, to nie zostanie zweryfikowana w wersji 1 lub 2 w jaki sposób zostanie zweryfikowana?
isJulian00
7

Według tego linku: pomoc dotycząca podpisu

Program APK Signature Scheme v2 oferuje:

  1. Szybsze czasy instalacji aplikacji
  2. Większa ochrona przed nieautoryzowanymi zmianami plików APK.

Android 7.0 wprowadza schemat podpisu APK v2, nowy schemat podpisywania aplikacji, który oferuje szybsze czasy instalacji aplikacji i lepszą ochronę przed nieautoryzowanymi zmianami plików APK. Domyślnie Android Studio 2.2 i wtyczka Android dla Gradle 2.2 podpisują Twoją aplikację przy użyciu zarówno schematu podpisu APK v2, jak i tradycyjnego schematu podpisywania, który wykorzystuje podpisywanie JAR.

Jest zalecane , aby użyć APK Signature Scheme v2 ale nie obowiązkowe .

Chociaż zalecamy stosowanie APK Signature Scheme v2 do aplikacji, ten nowy schemat nie jest obowiązkowy. Jeśli aplikacja nie buduje się poprawnie podczas korzystania z APK Signature Scheme v2, możesz wyłączyć nowy schemat.

Shirish Herwade
źródło
Cześć @Shirish, czy możemy tworzyć kompilacje v2 z zaćmienia?
Arjun T Raj