Diferença entre versões de assinatura - V1 (Jar Signature) e V2 (assinatura completa do APK) ao gerar um APK assinado no Android Studio?

234

Selecione pelo menos uma das versões de assinatura para usar no Android Studio 2.3

Agora, ao gerar um APK assinado no Android Studio, ele mostra duas opções (CheckBox), a saber 1. V1 (Jar Signature)e 2. V2 (Full APK Signature)como versões de assinatura na última etapa do processo de geração de APK assinado.

** Versões de assinatura ** opções

Então, qual é a diferença entre V1 (Jar Signature) e V2 (Full APK Signature) na nova atualização do Android Studio?

E qual devo usar (ou ambos) para assinar o apk para o lançamento da play store?

Além disso, estou recebendo o erro Instalar falha na análise sem certificados durante a instalação do APK quando uso a segunda opção.

Shirish Herwade
fonte

Respostas:

219

É um novo mecanismo de assinatura introduzido no Android 7.0, com recursos adicionais projetados para tornar a assinatura do APK mais segura.

Não é obrigatório. Você deve marcar AMBAS dessas caixas de seleção, se possível, mas se o novo mecanismo de assinatura da V2 apresentar problemas, você poderá omitir.

Portanto, você pode deixar a V2 desmarcada se encontrar problemas, mas deve verificar se possível.

Booger
fonte
Você deve redigitar sua pergunta, parece que você nem leu a documentação que estava vinculada ... é útil saber que você pode deixar essa marca de seleção desmarcada. Talvez se você adicionar a mensagem "erro e problema encontrado), então essa questão se tornará mais valioso para o futuro
Booger
Fiz upload do aplicativo por aplicativo assinado usando V1 e V2. Depois disso, baixo o aplicativo do google play e executo a mesma versão do Android Studio. Ele me mostra a caixa de diálogo "Falha na instalação, pois o dispositivo possui um aplicativo com o mesmo pacote, mas com uma assinatura diferente ...". Você pode me sugerir o que eu estou fazendo errado precisa atualizar o build.gradle?
Usman Afzal
@UsmanAfzal, é esperado um comportamento desde que você assinou o aplicativo no playstore com o lançamento e agora deseja depurar ou executá-lo no Android Studio com depuração. Observe que liberação e depuração são assinatura diferente
Parama Dharmika
44

Devo usar (ou ambos) para assinar o apk para o lançamento da play store? Uma resposta é SIM .

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

No Android 7.0, os APKs podem ser verificados de acordo com o Esquema de assinatura do APK v2 (esquema v2) ou assinatura JAR (esquema v1). Plataformas mais antigas ignoram assinaturas v2 e verificam apenas assinaturas v1.

Eu tentei gerar build marcando a opção V2 (Full Apk Signature) . Então, quando tentei instalar uma versão compilada abaixo do dispositivo 7.0 e não consigo instalar a versão compilada no dispositivo.

Depois disso, tentei criar marcando a caixa de seleção da versão e gerar a versão. Então capaz de instalar o build.

pRaNaY
fonte
24

Está escrito aqui que "Por padrão, o Android Studio 2.2 e o Plug-in do Android para Gradle 2.2 assinam seu aplicativo usando o APK Signature Scheme v2 e o esquema de assinatura tradicional, que usa assinatura JAR."

Como parece que essas novas caixas de seleção apareceram no Android 2.3, entendo que minhas versões anteriores do Android Studio (pelo menos a 2.2) assinaram com as duas assinaturas. Portanto, para continuar como antes, acho melhor marcar as duas caixas de seleção.

EDITAR 31 de março de 2017: enviou vários aplicativos com ambas as assinaturas => sem problemas :)

Regis_AG
fonte
7

Eu acho que isso representa uma boa resposta.

Verificação do APK Signature Scheme v2

  1. Localize APK Signing Blocke verifique se:
    1. Dois campos de tamanho APK Signing Blockcontêm o mesmo valor.
    2. ZIP Central Directoryé seguido imediatamente pelo ZIP End of Central Directoryregistro.
    3. ZIP End of Central Directory não é seguido por mais dados.
  2. Localize o primeiro APK Signature Scheme v2 Blockdentro do APK Signing Block. Se o bloco v2, se houver, prossiga para a etapa 3. Caso contrário, volte a verificar o APK usando o esquema v1.
  3. Para cada assinante no APK Signature Scheme v2 Block:
    1. Escolha o ID do algoritmo de assinatura suportado mais forte entre assinaturas. A ordem de força depende de cada versão de implementação / plataforma.
    2. Verifique a assinatura correspondente de assinaturas e dados assinados usando chave pública. (Agora é seguro analisar dados assinados.)
    3. Verifique se a lista ordenada de IDs do algoritmo de assinatura nos resumos e assinaturas é idêntica. (Isso evita a remoção / adição de assinatura.)
    4. Calcule a compilação do conteúdo do APK usando o mesmo algoritmo de compactação que o algoritmo de compactação usado pelo algoritmo de assinatura.
    5. Verifique se o resumo computado é idêntico ao resumo correspondente dos resumos.
    6. Verifique se SubjectPublicKeyInfoo primeiro certificado de certificados é idêntico à chave pública.
  4. A verificação é bem-sucedida se pelo menos um assinante for encontrado e a etapa 3 for bem-sucedida para cada assinante encontrado.

Nota: o APK não deve ser verificado usando o esquema v1 se ocorrer uma falha na etapa 3 ou 4.

Verificação do APK assinado por JAR (esquema v1)

O APK assinado por JAR é um JAR assinado padrão, que deve conter exatamente as entradas listadas META-INF/MANIFEST.MFe onde todas as entradas devem ser assinadas pelo mesmo conjunto de assinantes. Sua integridade é verificada da seguinte forma:

  1. Cada assinante é representado por uma entrada META-INF/<signer>.SFe META-INF/<signer>.(RSA|DSA|EC)JAR.
  2. <signer>.(RSA|DSA|EC)é uma PKCS #7 CMS ContentInfoestrutura com SignedData cuja assinatura é verificada sobre o <signer>.SFarquivo.
  3. <signer>.SFO arquivo contém um resumo de todo o arquivo META-INF/MANIFEST.MFe os resumos de cada seção de META-INF/MANIFEST.MF. O resumo do arquivo inteiro MANIFEST.MFé verificado. Se isso falhar, o resumo de cada MANIFEST.MFseção é verificado.
  4. META-INF/MANIFEST.MFcontém, para cada entrada JAR protegida por integridade, uma seção com nome correspondente que contém o resumo do conteúdo não compactado da entrada. Todos esses resumos são verificados.
  5. A verificação do APK falhará se o APK contiver entradas JAR que não estão listadas na MANIFEST.MFe não fazem parte da assinatura JAR. A cadeia de proteção é, portanto, <signer>.(RSA|DSA|EC)<signer>.SFMANIFEST.MF→ o conteúdo de cada entrada JAR protegida por integridade.
zonda
fonte
em que diz "Nota: o APK não deve ser verificado usando o esquema v1 se ocorrer uma falha na etapa 3 ou 4", nas etapas 3 ou 4 no esquema 2 ou no esquema 1? Além disso, se ocorrer uma falha na etapa 3 ou 4 na v2 e, em seguida, estiver dizendo que não pode ser verificada usando o esquema v1, ela não será verificada na v1 ou v2 como será verificada?
isJulian00
7

De acordo com este link: ajuda de assinatura

O APK Signature Scheme v2 oferece:

  1. Tempos de instalação de aplicativos mais rápidos
  2. Mais proteção contra alterações não autorizadas nos arquivos APK.

O Android 7.0 apresenta o APK Signature Scheme v2, um novo esquema de assinatura de aplicativos que oferece tempos de instalação mais rápidos e mais proteção contra alterações não autorizadas nos arquivos APK. Por padrão, o Android Studio 2.2 e o Android Plugin for Gradle 2.2 assinam seu aplicativo usando o APK Signature Scheme v2 e o esquema de assinatura tradicional, que usa assinatura JAR.

É recomendável usar o APK Signature Scheme v2, mas não é obrigatório .

Embora seja recomendável aplicar o APK Signature Scheme v2 ao seu aplicativo, esse novo esquema não é obrigatório. Se o seu aplicativo não criar corretamente ao usar o APK Signature Scheme v2, você poderá desativar o novo esquema.

Shirish Herwade
fonte
Oi @Shirish, podemos fazer builds v2 a partir do eclipse?
Arjun T Raj