Como assinar um arquivo apk android

111

Estou tentando assinar meu arquivo apk. Não consigo descobrir como fazer isso. Não consigo encontrar boas direções detalhadas. Tenho muito pouca experiência em programação, então qualquer ajuda seria apreciada.

chriss
fonte
2
verifique isto: Como assinar o apk do projeto Android
droid kid
2
Você pode encontrar um ótimo tutorial sobre isso aqui em androidcookers.co.cc/2012/06/…
Bratin
1
Usei este tutorial completo desde a criação de meu próprio keystore até a exportação de um APK assinado no Eclipse. mahadera.com/export-signed-android-apk-in-eclipse-ide
Jayson Tamayo

Respostas:

84

O manual é bastante claro. Especifique em que parte você fica preso depois de trabalhar nisso, sugiro:

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

Ok, uma pequena visão geral sem referência ou eclipse ao redor, então deixe algum espaço para erros, mas funciona assim

  • Abra seu projeto no eclipse
  • Pressione o botão direito do mouse -> ferramentas (ferramentas do Android?) -> exportar aplicativo assinado (apk?)
  • Siga o assistente:
  • Faça um novo armazenamento de chaves. lembre-se daquela senha
  • Assine seu aplicativo
  • Salve-o etc.

Além disso, no link:

Compilar e assinar com Eclipse ADT

Se estiver usando o Eclipse com o plugin ADT, você pode usar o Export Wizard para exportar um .apk assinado (e até mesmo criar um novo keystore, se necessário). O Export Wizard realiza toda a interação com o Keytool e o Jarsigner para você, o que permite assinar o pacote usando uma GUI em vez de realizar os procedimentos manuais para compilar, assinar e alinhar, conforme discutido acima. Depois que o assistente compilou e assinou seu pacote, ele também executará o alinhamento do pacote com o zip align. Como o Assistente de exportação usa o Keytool e o Jarsigner, você deve garantir que eles estejam acessíveis em seu computador, conforme descrito acima na Configuração básica para assinatura.

Para criar um .apk assinado e alinhado no Eclipse:

  1. Selecione o projeto no Package Explorer e selecione Arquivo> Exportar.
  2. Abra a pasta Android, selecione Exportar aplicativo Android e clique em Avançar.

    O assistente Exportar aplicativo Android agora é iniciado, o que o guiará pelo processo de assinatura de seu aplicativo, incluindo etapas para selecionar a chave privada com a qual assinar o .apk (ou criar um novo armazenamento de chaves e uma chave privada).

  3. Conclua o Assistente de exportação e seu aplicativo será compilado, assinado, alinhado e pronto para distribuição.
Nanne
fonte
Não entendo como começar. Estou usando a versão do eclipse: Helios Service Release 1
chriss
2
mas por favor leia TODA. há algumas dicas no final para eclipse também
Nanne
1
na criação da chave, o que preciso inserir no alias?
chriss
9
Você leu o manual? -alias <alias_name> An alias for the key. Only the first 8 characters of the alias are used.É apenas um pseudônimo. Um nome, se você quiser. eu sugeriria "firstkey" :-)
Nanne
1
Desculpe, ainda não entendi. Como eu usaria esse alias. Qual é seu propósito?
user462990 de
37

Aqui está um guia sobre como assinar manualmente um APK. Inclui informações sobre o novo apk-signerintroduzido em build-tools 24.0.3 (10/2016)

Processo automatizado:

Use esta ferramenta (usa o novo apksigner do Google):

https://github.com/patrickfav/uber-apk-signer

Isenção de responsabilidade: eu sou o desenvolvedor :)

Processo Manual:

Etapa 1: gerar keystore (apenas uma vez)

Você precisa gerar um keystore uma vez e usá-lo para assinar seu unsignedapk. Use o fornecido pelo JDK encontrado emkeytool %JAVA_HOME%/bin/

keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app

Etapa 2 ou 4: Zipalign

zipalign que é uma ferramenta fornecida pelo Android SDK encontrada em, por exemplo, %ANDROID_HOME%/sdk/build-tools/24.0.2/é uma etapa de otimização obrigatória se você deseja fazer upload do apk para a Play Store.

zipalign -p 4 my.apk my-aligned.apk

Nota: ao usar o antigo, jarsignervocê precisa zipalign APÓS a assinatura. Ao usar o novo apksignermétodo, você o faz ANTES de assinar (confuso, eu sei). Invocar zipalign antes do apksigner funciona bem porque o apksigner preserva o alinhamento e a compactação do APK (ao contrário do jarsigner).

Você pode verificar o alinhamento com

zipalign -c 4 my-aligned.apk

Etapa 3: assinar e verificar

Usando ferramentas de compilação 24.0.2 e anteriores

Use o jarsignerqual, como o keytool, vem com a distribuição JDK encontrada em %JAVA_HOME%/bin/e use-o assim:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore my-app.apk my_alias_name

e pode ser verificado com

jarsigner -verify -verbose my_application.apk

Usando ferramentas de compilação 24.0.3 e mais recentes

O Android 7.0 apresenta o APK Signature Scheme v2, um novo esquema de assinatura de aplicativos que oferece tempos de instalação de aplicativos mais rápidos e mais proteção contra alterações não autorizadas em arquivos APK (veja aqui e aqui para mais detalhes). Portanto, o Google implementou seu próprio assinante apk chamadoapksigner (duh!) O arquivo de script pode ser encontrado em %ANDROID_HOME%/sdk/build-tools/24.0.3/(.jar está na /libsubpasta). Use assim

apksigner sign --ks my.keystore my-app.apk --ks-key-alias alias_name

e pode ser verificado com

apksigner verify my-app.apk

A documentação oficial pode ser encontrada aqui.

Patrick Favre
fonte
10

Para usuários do IntelliJ IDEA ou Android Studio, siga estas etapas:
* No menu Build/Generate signed APK
* Você precisa criar um caminho de armazenamento de chaves. Na caixa de diálogo, clique em Create new. Você criará um arquivo jks que inclui suas chaves. Selecione a pasta e defina uma senha. Então, seu keystore está ok.
* Crie uma nova chave para o seu aplicativo usando alias, senha da chave, seu nome, etc.
* Clique em Avançar.
* Na caixa de diálogo, selecione Proguard ou não.

Seu arquivo APK assinado está pronto.

Arquivo de ajuda: https://www.jetbrains.com/idea/webhelp/generate-signed-apk-wizard.html

trante
fonte
8

Não se preocupe...! Siga as etapas abaixo e você obterá seu arquivo .apk assinado. Eu também estava preocupado com isso, mas esses passos me livram da frustração. Etapas para assinar seu aplicativo:

  1. Exporte o pacote não assinado:

Clique com o botão direito do mouse no projeto em Eclipse -> Ferramentas Android -> Exportar pacote de aplicativos não assinados (como aqui, exportamos nosso GoogleDriveApp.apk para o desktop)

Assine o aplicativo usando seu armazenamento de chaves e a ferramenta jarsigner (siga as etapas abaixo):

Abra cmd -> mude o diretório onde o seu "jarsigner.exe" existe (como aqui no meu sistema, ele existe em "C: \ Arquivos de programas \ Java \ jdk1.6.0_17 \ bin"

Agora digite o comando belwo no cmd:

jarsigner -verbose -keystore c: \ users \ android \ debug.keystore c: \ users \ pir fahim \ Desktops \ GoogleDriveApp.apk my_keystore_alias

Ele pedirá que você forneça sua senha: Digite a frase-senha para armazenamento de chaves: Ele assinará seu apk. Para verificar se a assinatura foi bem-sucedida, você pode executar:

jarsigner -verify c: \ users \ pir fahim \ Desktops \ GoogleDriveApp.apk

Ele deve voltar com: jar verificado.

Método 2

Se você estiver usando o eclipse com ADT, é simples compilar, assinar, alinhar e preparar o arquivo para distribuição. O que você precisa fazer é seguir estas etapas.

  • Arquivo> Exportar.
  • Exportar aplicativo Android
  • Navegue -> selecione seu projeto
  • Próximo -> Próximo

Estas etapas irão compilar, assinar e zipar seu projeto e agora você está pronto para distribuir seu projeto ou fazer o upload na Google Play Store.

Pir Fahim Shah
fonte
Isso é exatamente o que eu precisava, era usar uma nova ferramenta de compilação online e tive que usar meu keystore anterior, não o recém-gerado. A única coisa que estava faltando era o ZIP ALINHANDO o apk, então se alguém tiver o mesmo problema, vá aqui stackoverflow.com/a/22682132/826194
Larzan
5

Processo de assinatura de APK

Para assinar manualmente um arquivo APK Android, execute estes três comandos:

  1. Gerar arquivo de armazenamento de chave

    keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000
  2. Assine seu arquivo APK usando jarsigner

    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME
  3. Alinhar APK assinado usando a ferramenta zipalign

    zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH

PASSO 1


Generate Keystore file

keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000

Exemplo:

keytool -genkey -v -keystore id.keystore -alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000

senha do keystore: yourApp @ 123 senha da chave: yourApp @ 123

CMD O / P

D:\ru\SignedBuilds\MySignedApp>keytool -genkey -v -keystore id.keystore
 -alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:  MySignedApp Sample
What is the name of your organizational unit?
  [Unknown]:  Information Technology
What is the name of your organization?
  [Unknown]:  MySignedApp Demo
What is the name of your City or Locality?
  [Unknown]:  Mumbai
What is the name of your State or Province?
  [Unknown]:  Maharashtra
What is the two-letter country code for this unit?
  [Unknown]:  IN
Is CN=MySignedApp Demo, OU=Information Technology, O=MySignedApp Demo, L=Mumbai, ST=Maharashtra, C=IN corr
ect?
  [no]:  y

Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10,
000 days
        for: CN=MySignedApp Demo, OU=Information Technology, O=MySignedApp Demo, L=Mumbai, ST=Maharashtra,
 C=IN
Enter key password for <MySignedApp>
        (RETURN if same as keystore password):
Re-enter new password:
[Storing id.keystore]

D:\ru\SignedBuilds\MySignedApp>

PASSO 2


Sign your app with your private keystore using jarsigner

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME

Exemplo

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore D:\ru\SignedBuilds\MySignedApp\id.keystore D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk id

CMD O / P

D:\ru\SignedBuilds\MySignedApp>jarsigner -verbose -sigalg SHA1withRSA -
digestalg SHA1 -keystore D:\ru\SignedBuilds\MySignedApp\id.keystore D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk id ---
ect
Enter Passphrase for keystore:
   adding: META-INF/MANIFEST.MF
   adding: META-INF/---.SF
   adding: META-INF/---.RSA
  signing: AndroidManifest.xml
  ..... 
    signing: classes.dex
  signing: lib/commons-codec-1.6.jar
  signing: lib/armeabi/libkonyjsvm.so
jar signed.

Warning:
No -tsa or -tsacert is provided and this jar is not timestamped. Without a timestamp, users may not
be able to validate this jar after the signer certificate's expiration date (2044-02-07) or after an
y future revocation date.

D:\ru\SignedBuilds\MySignedApp>

Verify that your APK is signed

jarsigner -verify -verbose -certs JARSIGNED_APK_FILE_PATH

Exemplo

jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk

CMD O / P

D:\ru\SignedBuilds\MySignedApp>jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk
 s = signature was verified
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar verified.

Warning:
This jar contains entries whose certificate chain is not validated.
This jar contains signatures that does not include a timestamp. Without a timestamp, users may not b
e able to validate this jar after the signer certificate's expiration date (2044-02-09) or after any
 future revocation date.

D:\ru\SignedBuilds\MySignedApp>

ETAPA 3


Alinhe o pacote APK final usando zipalign

zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH_WITH_NAME_ofSignedAPK

Exemplo

zipalign -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk

CMD O / P

D:\Android\android-sdk\build-tools\19.1.0>zipalign -v 4 D:\ru\ru_doc\Signed_apk\MySignedApp\28.09.16
_prod_playstore\MySignedAppS1-release-unsigned.apk D:\ru\ru_doc\Signed_apk\MySignedApp\28.09.16_prod
_playstore\MySignedApp.apk
Verifying alignment of D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk (
4)...

  4528613 classes.dex (OK - compressed)
 5656594 lib/commons-codec-1.6.jar (OK - compressed)
 5841869 lib/armeabi/libkonyjsvm.so (OK - compressed)
Verification succesful

D:\Android\android-sdk\build-tools\19.1.0>

Verify that your APK is Aligned successfully

zipalign -c -v 4 YOUR_APK_PATH

Exemplo

zipalign -c -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk

CMD O / P

D:\Android\android-sdk\build-tools\19.1.0>zipalign -c -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk
Verifying alignment of D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk (
4)...

 4453984 res/drawable/zoomout.png (OK)
 4454772 res/layout/tabview.xml (OK - compressed)
 4455243 res/layout/wheel_item.xml (OK - compressed)
 4455608 resources.arsc (OK)
 4470161 classes.dex (OK - compressed)
 5597923 lib/commons-codec-1.6.jar (OK - compressed)
 5783198 lib/armeabi/libkonyjsvm.so (OK - compressed)
Verification succesful

D:\Android\android-sdk\build-tools\19.1.0>

Nota:

O comando de verificação serve apenas para verificar se o APK foi criado e assinado corretamente!

Referências

Espero que isso ajude a todos :)

Rupesh Yadav
fonte
2

Eu encontrei esse problema e foi resolvido verificando a versão min sdk no manifesto. Estava definido como 15 (ICS), mas meu telefone estava executando 10 (Gingerbread)

RJL
fonte