Posso usar o mesmo arquivo keystore para assinar dois aplicativos diferentes?

92

Tenho que fazer upload de um novo aplicativo, é apenas o design que é um pouco diferente. Ontem gerei o arquivo keystore para assinar o aplicativo. Posso usar o mesmo?

Raluca Lucaci
fonte
5
sim, você pode (também, você tentou antes de perguntar?)
njzk2

Respostas:

98

Você pode usar isso keystorepara qualquer número de aplicativos.

Não há necessidade de gerar um novo armazenamento de chaves.

Chirag
fonte
6
E para 'Alias', o que devo escrever?
Dr.jacky de
14
Um keystore CONTÉM os pares de chaves pública / privada que constituem um certificado de assinatura. Um keystore pode conter muitos pares de chaves. Um 'alias' é uma referência a um par de chaves específico no armazenamento de chaves. Um keystore pode conter todos os seus pares de chaves, mas você deve ter um par de chaves por aplicativo. Use o nome do aplicativo que você está assinando como o alias. Você pode ter senhas separadas para seu armazenamento de chaves e para cada par de chaves dentro dele. Você pode alterar essas senhas e importar / exportar pares de chaves do armazenamento de chaves ou adicionar novos pares de chaves ao armazenamento de chaves. Isso tudo é feito com o comando 'keytool' da linha de comando. Procure.
brycewjohnson
@brycewjohnson Podem novos pares ser adicionados ao keystore por meio de uma GUI?
CinCout de
44

Vou fazer um contra-argumento para a resposta de consenso até agora.

Concordo que, para a maioria dos autores de aplicativos, na maioria das vezes, compartilhar o mesmo armazenamento de chaves / certificado / senha entre seus aplicativos funcionará bem. O fundamental é usar " o mesmo certificado durante toda a vida útil esperada de seus aplicativos " para que o aplicativo possa se atualizar.

Mas posso pensar em um bom motivo para ter keystores separados para aplicativos ou famílias de aplicativos separados. Se você acha que pode querer vender um aplicativo para outra pessoa para publicar como uma atualização do original, você terá que compartilhar seu armazenamento de chaves e senha únicos com essa pessoa para fazer isso. Provavelmente não é um grande problema, mas um pouco preocupante para você e, talvez, um problema de devida diligência para um comprador grande o suficiente.

Além disso, eu realmente não leio a mesma linha na documentação da mesma forma que @ol_v_er. Acho que a linha atual:

Você deve assinar todos os seus aplicativos com o mesmo certificado ao longo da vida útil esperada de seus aplicativos.

(observe a falta de uma vírgula na versão atual) é simplesmente enfatizar que a recomendação 'vitalícia' se aplica a todos os aplicativos, não direcionando você a usar o mesmo certificado para todos os seus aplicativos.

Anne Gunn
fonte
6
Manter keystores separados para cada aplicativo deve ser o caminho a seguir!
Sufian
A recomendação é usar um arquivo diferente para cada aplicativo, certo? O que acontece se você usar o mesmo arquivo de armazenamento de chave para mais de um aplicativo? Parece causar alguns problemas com os serviços do Firebase / Google. Acho que é impossível usar um novo (um diferente para cada aplicativo) se já estiver feito, certo?
desenvolvedor Android
42

A documentação oficial nos diz:

Em geral, a estratégia recomendada para todos os desenvolvedores é assinar todos os seus aplicativos com o mesmo certificado, durante a vida útil esperada de seus aplicativos. Existem vários motivos pelos quais você deve fazer isso ...

https://developer.android.com/studio/publish/app-signing.html#considerations

Então, sim, tente assinar todos os seus aplicativos com o mesmo certificado.

ol_v_er
fonte
8
E para 'Alias', o que devo escrever?
Dr.jacky de
6
Para simplificar, use o mesmo para todos os seus aplicativos.
ol_v_er
19

Quero acrescentar alguns esclarecimentos aqui, porque essa pergunta e as respostas fornecidas me confundem. É crucial entender o que realmente é um armazenamento de chaves.

Um armazenamento de chaves é apenas um meio de armazenar com segurança o par de chaves pública / privada que é usado para assinar seus apks Android. Portanto, sim, você pode usar o mesmo armazenamento de chaves para assinar vários apks, sem problemas. Você também pode usar o mesmo alias (cada alias é um certificado) para assinar vários apks e funcionará. No entanto, isso tem implicações de segurança. Se seu único alias estiver comprometido, todos os seus aplicativos estarão comprometidos.

No entanto, se você pretende vender os direitos de seus aplicativos um dia, usar o mesmo alias para todos os seus aplicativos pode não ser uma boa ideia. No entanto, usar o mesmo keystore, desde que você use um alias diferente para cada apk, pode não ser necessariamente uma opção ruim. Tenho certeza de que existe uma maneira de mover um certificado de um armazenamento de chaves para outro, de modo que você possa fornecer com segurança as chaves necessárias apenas para aquele certificado ao seu comprador.

Para deixar bem claro, um armazenamento de chaves é apenas isso, um meio de armazenamento de chaves. Ele não desempenha nenhum papel real no processo de assinatura de um apk, mas serve apenas para armazenar as chaves que são realmente usadas para assinar o apk.

Referências:

Noções básicas sobre armazenamento de chaves, certificados e alias

https://www.digitalocean.com/community/tutorials/java-keytool-essentials-working-with-java-keystores

Anthony Stivers
fonte
1
Por favor, não poste respostas idênticas para várias perguntas. Poste uma boa resposta e, em seguida, vote / sinalize para fechar as outras questões como duplicatas. Se a pergunta não for uma duplicata, adapte suas respostas à pergunta.
Paul Roub de
Desculpas. Eu sou um novato para SO.
Anthony Stivers
1
Não tenho representante suficiente para votar em uma duplicata. Portanto, se você gostaria de votar as seguintes questões como duplicatas, acho que esta questão é a mais apropriada para não ser duplicada. É a primeira classificação no Google para as palavras-chave relevantes e tem as respostas mais relevantes. stackoverflow.com/questions/13023509/… stackoverflow.com/questions/14973205/… stackoverflow.com/questions/10514597/…
Anthony Stivers
Esperar! Como posso usar o mesmo keystore, mas com alias diferentes para cada aplicativo ?!
Ziad H.
5

Claro! Você pode usar o mesmo arquivo keystore quantas vezes quiser. É sempre melhor usar o mesmo arquivo keystore para todos os aplicativos que você desenvolve. Isso ajudará se você quiser atualizar ou modificar o aplicativo. Nesse momento, você precisa assinar seu aplicativo com a mesma chave.

Rohit
fonte
2

Eu assino todos os meus aplicativos usando o mesmo certificado (armazenamento de chaves). Isso dá uma vantagem se eu mudar de ideia e quiser que meus aplicativos compartilhem seus dados.

Como você deve saber, o Android identifica cada aplicativo com um UID. Se todos os seus aplicativos são assinados pelo mesmo certificado, você pode solicitar que o Android atribua o mesmo ID de usuário a mais de um aplicativo e, internamente, fazê-los rodar em um único processo e compartilhar os dados.

Do Android doc android: sharedUserId

android: sharedUserId

O nome de um ID de usuário Linux que será compartilhado com outros aplicativos. Por padrão, o Android atribui a cada aplicativo seu próprio ID de usuário exclusivo. No entanto, se este atributo for definido com o mesmo valor para dois ou mais aplicativos, todos eles compartilharão o mesmo ID - desde que também sejam assinados pelo mesmo certificado. Aplicativos com o mesmo ID de usuário podem acessar os dados uns dos outros e, se desejado, executar no mesmo processo

Sujith
fonte
1

Atualização recente

Se você deseja se inscrever na assinatura do Google App, você deve usar uma nova chave diferente para assinar o seu apk ou pacote, caso contrário, após fazer o upload do console do Google, você receberá uma mensagem de erro dizendo

Você fez upload de um APK ou Android App Bundle assinado com uma chave que também é usada para assinar APKs que são entregues aos usuários. Como você está inscrito no App Signing do Google Play, deve assinar seu APK ou Android App Bundle com uma nova chave antes de carregá-lo

Riya Parmar
fonte
Consegui gerar uma nova chave na tela de assinatura do apk do Android Studio. Gere um novo keystore e alias e pode funcionar. Funcionou para mim
Numan Karaaslan 01 de