Jak podpisać plik APK na Androida

111

Próbuję podpisać plik APK. Nie wiem, jak to zrobić. Nie mogę znaleźć dobrych szczegółowych wskazówek. Mam bardzo małe doświadczenie w programowaniu, więc każda pomoc będzie mile widziana.

chriss
źródło
2
sprawdź to: Jak podpisać projekt Android APK
droid kid
2
Możesz znaleźć świetny samouczek na ten temat tutaj na androidcookers.co.cc/2012/06/…
Bratin
1
Skorzystałem z tego kompletnego samouczka, od tworzenia własnego magazynu kluczy do eksportowania podpisanego pliku APK w Eclipse. mahadera.com/export-signed-android-apk-in-eclipse-ide
Jayson Tamayo

Odpowiedzi:

84

Podręcznik jest wystarczająco jasny. Proszę określić, z jaką częścią utkniesz po pracy, proponuję:

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

Okay, mały przegląd bez odniesienia lub zaćmienia wokół, więc zostaw trochę miejsca na błędy, ale działa tak

  • Otwórz swój projekt w Eclipse
  • Naciśnij prawy przycisk myszy -> Narzędzia (Narzędzia Android?) -> Eksportuj podpisaną aplikację (APK?)
  • Przejdź przez kreatora:
  • Stwórz nowy magazyn kluczy. zapamiętaj to hasło
  • Podpisz swoją aplikację
  • Zapisz to itp.

Również z linku:

Skompiluj i podpisz za pomocą Eclipse ADT

Jeśli używasz Eclipse z wtyczką ADT, możesz użyć Kreatora eksportu, aby wyeksportować podpisany plik .apk (a nawet utworzyć nowy magazyn kluczy, jeśli to konieczne). Kreator eksportu wykonuje za Ciebie całą interakcję z Keytool i Jarsigner, co pozwala na podpisanie pakietu za pomocą GUI zamiast wykonywania ręcznych procedur kompilacji, podpisywania i wyrównywania, jak omówiono powyżej. Gdy kreator skompiluje i podpisze pakiet, wykona również wyrównywanie pakietów z wyrównywaniem zip. Ponieważ Kreator eksportu używa zarówno narzędzia Keytool, jak i Jarsigner, należy upewnić się, że są one dostępne na komputerze, jak opisano powyżej w sekcji Podstawowa konfiguracja podpisywania.

Aby utworzyć podpisany i wyrównany plik .apk w Eclipse:

  1. Wybierz projekt w Eksploratorze pakietów i wybierz Plik> Eksportuj.
  2. Otwórz folder Android, wybierz Eksportuj aplikację dla systemu Android i kliknij Dalej.

    Zostanie uruchomiony kreator eksportu aplikacji dla systemu Android, który poprowadzi Cię przez proces podpisywania aplikacji, w tym kroki wyboru klucza prywatnego do podpisania .apk (lub tworzenia nowego magazynu kluczy i klucza prywatnego).

  3. Wypełnij Kreatora eksportu, a Twoja aplikacja zostanie skompilowana, podpisana, wyrównana i gotowa do dystrybucji.
Nanne
źródło
Nie rozumiem, jak zacząć. Używam wersji eclipse: Helios Service Release 1
chriss
2
ale proszę przeczytaj CAŁĄ rzecz. na koniec jest też kilka wskazówek dotyczących zaćmienia
Nanne
1
w tworzeniu klucza co muszę wpisać dla aliasu?
chriss
9
Czy przeczytałeś instrukcję? -alias <alias_name> An alias for the key. Only the first 8 characters of the alias are used.To tylko alias. Imię, jeśli chcesz. proponuję "firstkey" :-)
Nanne
1
Przepraszam, nadal nie rozumiem. Jak użyłbym tego aliasu. Jaki jest jej cel?
user462990
37

Oto przewodnik dotyczący ręcznego podpisywania pliku APK. Zawiera informacje o nowościach apk-signerwprowadzonych w build-tools 24.0.3 (10/2016)

Zautomatyzowany proces:

Użyj tego narzędzia (używa nowego apksignera od Google):

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

Zastrzeżenie: jestem programistą :)

Proces ręczny:

Krok 1: Wygeneruj magazyn kluczy (tylko raz)

Musisz raz wygenerować magazyn kluczy i użyć go do podpisania swojego unsignedapk. Skorzystaj z dostarczonego przez JDK wkeytool %JAVA_HOME%/bin/

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

Krok 2 lub 4: Zipalign

zipalign które jest narzędziem dostarczanym przez Android SDK znaleziony np. %ANDROID_HOME%/sdk/build-tools/24.0.2/jest obowiązkowym krokiem optymalizacji, jeśli chcesz przesłać apk do Sklepu Play.

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

Uwaga: w przypadku korzystania ze starego jarsignernależy wykonać zipalign PO podpisaniu. Korzystając z nowej apksignermetody robisz to PRZED podpisaniem (mylące, wiem). Wywołanie zipalign przed apksigner działa dobrze, ponieważ apksigner zachowuje wyrównanie i kompresję APK (w przeciwieństwie do jarsigner).

Możesz sprawdzić wyrównanie za pomocą

zipalign -c 4 my-aligned.apk

Krok 3: Podpisz i zweryfikuj

Korzystanie z narzędzi do kompilacji 24.0.2 i starszych

Użyj jarsignerktóre, podobnie jak keytool, jest dostarczane z dystrybucją JDK znalezioną w %JAVA_HOME%/bin/i używaj go w następujący sposób:

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

i można je zweryfikować za pomocą

jarsigner -verify -verbose my_application.apk

Korzystanie z narzędzi do kompilacji 24.0.3 i nowszych

Android 7.0 wprowadza APK Signature Scheme v2, nowy schemat podpisywania aplikacji, który zapewnia krótszy czas instalacji aplikacji i lepszą ochronę przed nieautoryzowanymi zmianami w plikach APK (zobacz tutaj i tutaj, aby uzyskać więcej informacji). Dlatego Google zaimplementował własny sygnatariusz apk o nazwieapksigner (duh!) Plik skryptu można znaleźć w %ANDROID_HOME%/sdk/build-tools/24.0.3/( plik .jar znajduje się w /libpodfolderze). Użyj tego w ten sposób

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

i można je zweryfikować za pomocą

apksigner verify my-app.apk

Oficjalną dokumentację można znaleźć tutaj.

Patrick Favre
źródło
10

Dla użytkowników IntelliJ IDEA lub Android Studio wykonaj następujące kroki:
* Z menu Build/Generate signed APK
* Musisz utworzyć ścieżkę do magazynu kluczy. W oknie dialogowym kliknij Create new. Utworzysz plik jks zawierający klucze. Wybierz folder, zdefiniuj hasło. Więc twój magazyn kluczy jest w porządku.
* Utwórz nowy klucz dla swojej aplikacji, używając aliasu, hasła klucza, swojej nazwy itp.
* Kliknij dalej.
* W oknie dialogowym wybierz Proguard lub nie.

Twój podpisany plik APK jest gotowy.

Plik pomocy: https://www.jetbrains.com/idea/webhelp/generate-signed-apk-wizard.html

trante
źródło
8

Nie martw się ...! Wykonaj poniższe czynności, a otrzymasz podpisany plik .apk. Też się o to martwiłem, ale ten krok odstraszał mnie od frustracji. Kroki do podpisania wniosku:

  1. Wyeksportuj niepodpisany pakiet:

Kliknij prawym przyciskiem myszy projekt w Eclipse -> Android Tools -> Export Unsigned Application Package (tak jak tutaj eksportujemy naszą GoogleDriveApp.apk do Desktop)

Podpisz aplikację za pomocą magazynu kluczy i narzędzia jarsigner (wykonaj poniższe czynności):

Otwórz cmd -> zmień katalog, w którym znajduje się twój "jarsigner.exe" (tak jak tutaj, w moim systemie, istnieje w "C: \ Program Files \ Java \ jdk1.6.0_17 \ bin"

Teraz wpisz polecenie belwo w cmd:

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

Poprosi Cię o podanie hasła: Wprowadź hasło do magazynu kluczy: podpisze twój apk. Aby sprawdzić, czy podpisanie się powiodło, możesz uruchomić:

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

Powinien wrócić z: zweryfikowanym słoikiem.

Metoda 2

Jeśli używasz eclipse z ADT, możesz łatwo skompilować, podpisać, wyrównać i przygotować plik do dystrybucji. Co musisz zrobić, wykonaj następujące kroki.

  • Plik> Eksportuj.
  • Eksportuj aplikację na Androida
  • Przeglądaj -> wybierz swój projekt
  • Dalej -> Dalej

Te kroki pozwolą skompilować, podpisać i skompilować swój projekt. Teraz jesteś gotowy do dystrybucji lub przesłania projektu do sklepu Google Play.

Pir Fahim Shah
źródło
Właśnie tego potrzebowałem, korzystałem z nowego narzędzia do budowania online i musiałem używać mojego poprzedniego magazynu kluczy, a nie nowo wygenerowanego. Jedyne, czego mi brakowało, to ZIP wyrównywanie apk, więc jeśli ktoś ma ten sam problem, przejdź tutaj stackoverflow.com/a/22682132/826194
Larzan
5

Proces podpisywania APK

Aby ręcznie podpisać plik APK systemu Android, uruchom te trzy polecenia:

  1. Wygeneruj plik Keystore

    keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000
  2. Podpisz swój plik APK za pomocą jarsigner

    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME
  3. Wyrównaj podpisany plik APK za pomocą narzędzia zipalign

    zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH

KROK 1


Generate Keystore file

keytool -genkey -v -keystore NAZWA_KLUCZA.KEYSTORE -alias NAZWA ALIASU -keyalg RSA -keysize 2048 -wartość 10000

Przykład:

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

kluczy hasło: yourApp @ 123 klucz hasło: 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>

KROK 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

Przykład

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

Przykład

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>

KROK 3


Wyrównaj ostateczny pakiet APK za pomocą zipalign

zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH_WITH_NAME_ofSignedAPK

Przykład

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 ŚCIEŻKA_TWOJEJ_APKI

Przykład

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>

Uwaga:

Polecenie weryfikacji służy tylko do sprawdzenia, czy plik APK jest poprawnie zbudowany i podpisany!

Bibliografia

Mam nadzieję, że to pomoże wszystkim :)

Rupesh Yadav
źródło
2

Napotkałem ten problem i został rozwiązany, sprawdzając wersję min sdk w manifeście. Był ustawiony na 15 (ICS), ale mój telefon działał 10 (Gingerbread)

RJL
źródło