Android apk dosyası nasıl imzalanır


111

Apk dosyamı imzalamaya çalışıyorum. Nasıl yapılacağını çözemiyorum. Derinlemesine iyi yönler bulamıyorum. Çok az programlama deneyimim var, bu yüzden herhangi bir yardım için minnettarım.



2
Bu konuda harika bir öğretici burada androidcookers.co.cc/2012/06/…
Bratin

1
Eclipse'de kendi anahtar depomu oluşturmaktan imzalı bir APK'yi dışa aktarmaya kadar bu eksiksiz öğreticiyi kullandım. mahadera.com/export-signed-android-apk-in-eclipse-ide
Jayson Tamayo

Yanıtlar:


84

Kılavuz yeterince açık. Lütfen üzerinde çalıştıktan sonra hangi bölüme takıldığınızı belirtin, size şunları öneririm:

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

Tamam, referans olmadan veya etrafta tutulmadan küçük bir genel bakış, bu yüzden hatalar için biraz boşluk bırakın, ancak bu şekilde çalışır

  • Tutulmada projenizi açın
  • Sağ fare -> araçlar (android araçları?) -> imzalı uygulamayı dışa aktar (apk?)
  • Sihirbaza gidin:
  • Yeni bir anahtar deposu oluşturun. bu şifreyi hatırla
  • Uygulamanızı imzalayın
  • Kaydedin vs.

Ayrıca bağlantıdan:

Eclipse ADT ile derleyin ve imzalayın

Eclipse'i ADT eklentisiyle birlikte kullanıyorsanız, imzalı bir .apk dosyasını dışa aktarmak için Dışa Aktarma Sihirbazını kullanabilirsiniz (ve hatta gerekirse yeni bir anahtar deposu oluşturabilirsiniz). Dışa Aktarma Sihirbazı, Keytool ve Jarsigner ile tüm etkileşimi sizin için gerçekleştirir; bu da, yukarıda açıklandığı gibi derlemek, imzalamak ve hizalamak için manuel prosedürler gerçekleştirmek yerine paketi bir GUI kullanarak imzalamanıza olanak tanır. Sihirbaz paketinizi derleyip imzaladıktan sonra, zip hizalama ile paket hizalamasını da gerçekleştirecektir. Dışa Aktarma Sihirbazı hem Keytool hem de Jarsigner'ı kullandığından, yukarıda İmzalama için Temel Kurulum'da açıklandığı gibi bilgisayarınızda erişilebilir olduklarından emin olmalısınız.

Eclipse'de imzalı ve hizalı bir .apk oluşturmak için:

  1. Paket Gezgini'nde projeyi seçin ve Dosya> Dışa Aktar'ı seçin.
  2. Android klasörünü açın, Android Uygulamasını Dışa Aktar'ı seçin ve İleri'ye tıklayın.

    Android Uygulamasını Dışa Aktar sihirbazı şimdi başlıyor ve bu sihirbaz, .apk dosyasını imzalayacağınız özel anahtarı seçme (veya yeni bir anahtar deposu ve özel anahtar oluşturma) dahil olmak üzere uygulamanızı imzalama sürecinde size rehberlik edecek.

  3. Dışa Aktarma Sihirbazını tamamlayın ve uygulamanız derlenecek, imzalanacak, hizalanacak ve dağıtıma hazır hale gelecektir.

Nasıl başlayacağımı anlamıyorum. Tutulma Sürümünü kullanıyorum: Helios Service Release 1
chriss

2
ama lütfen BÜTÜN şeyi okuyun. sonunda tutulma için de bazı ipuçları var
Nanne

1
Anahtar oluşturmada takma ad için ne girmem gerekiyor?
Chriss

9
Kılavuzu okudunuz mu? -alias <alias_name> An alias for the key. Only the first 8 characters of the alias are used.Bu sadece bir takma ad. İstersen bir isim. "firstkey" öneririm :-)
Nanne

1
Üzgünüm hala anlamadım. Bu takma adı nasıl kullanırım? Amacı nedir?
user462990

37

Bir APK'yi manuel olarak nasıl imzalayacağınıza dair bir kılavuz. (10/2016) 'daapk-signer sunulan yeni ile ilgili bilgileri içerirbuild-tools 24.0.3

Otomatik Süreç:

Bu aracı kullanın (Google'ın yeni apksigner'ını kullanır):

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

Feragatname: Ben geliştiriciyim :)

Manuel İşlem:

1. Adım: Anahtar Deposu Oluşturun (yalnızca bir kez)

Bir kez bir anahtar deposu oluşturmanız ve unsignedapk'nizi imzalamak için kullanmanız gerekir . Bulunan JDK tarafından sağlananları kullanınkeytool %JAVA_HOME%/bin/

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

2. veya 4. Adım: Zipalign

zipalign Örneğin %ANDROID_HOME%/sdk/build-tools/24.0.2/, Android SDK tarafından sağlanan bir araç olan bu, APK'yı Play Store'a yüklemek istiyorsanız zorunlu bir optimizasyon adımıdır.

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

Not: Eski kullanırken jarsignersize zipalign gereken SONRA imzalanması. Yeni apksigneryöntemi kullanırken bunu imzalamadan ÖNCE yaparsınız (kafa karıştırıcı, biliyorum). Apksigner düzgün çalışmadan önce zipalign'ı çağırmak, çünkü apksigner APK hizalamasını ve sıkıştırmasını korur (jarsigner'ın aksine).

Sen edebilirsiniz doğrulamak uyum

zipalign -c 4 my-aligned.apk

3. Adım: İmzalayın ve Doğrulayın

24.0.2 ve daha eski yapı araçlarını kullanma

Kullanım jarsignerkeytool gibi, JDK dağıtımı ile birlikte gelir bulundu %JAVA_HOME%/bin/ve o kadar gibi kullanın:

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

ve ile doğrulanabilir

jarsigner -verify -verbose my_application.apk

24.0.3 ve daha yeni derleme araçlarını kullanma

Android 7.0, daha hızlı uygulama yükleme süreleri ve APK dosyalarında yetkisiz değişikliklere karşı daha fazla koruma sunan yeni bir uygulama imzalama şeması olan APK Signature Scheme v2'yi sunar (Daha fazla ayrıntı için buraya ve buraya bakın). Bu nedenle Google, (duh!) Adlı kendi apk imzalayıcısınıapksigner uygulamıştır . Komut dosyası %ANDROID_HOME%/sdk/build-tools/24.0.3/(.jar /libalt klasördedir) içinde bulunabilir. Bunu böyle kullan

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

ve ile doğrulanabilir

apksigner verify my-app.apk

Resmi belgeler burada bulunabilir.


10

IntelliJ IDEA veya Android Studio kullanıcıları için şu adımları uygulayın:
* Menüden Build/Generate signed APK
* Bir anahtar deposu yolu oluşturmanız gerekir. İletişim kutusundan tıklayın Create new. Anahtarlarınızı içeren bir jks dosyası oluşturacaksınız. Klasör seçin, bir şifre tanımlayın. Yani anahtar deponuz tamam.
* Takma ad, anahtar parolası, adınız vb. Kullanarak uygulamanız için yeni anahtar oluşturun.
* İleri'yi tıklayın.
* İletişim kutusundan Proguard'ı seçin veya seçmeyin .

İmzalı APK dosyanız hazır.

Yardım dosyası: https://www.jetbrains.com/idea/webhelp/generate-signed-apk-wizard.html


8

Merak etmeyin ...! Aşağıdaki adımları izleyin ve imzalı .apk dosyanızı alacaksınız. Ben de bunun için endişeliydim ama bu adımlar beni hayal kırıklığından uzaklaştırıyor. Başvurunuzu imzalamak için adımlar:

  1. İmzasız paketi dışa aktarın:

Eclipse'de projeye sağ tıklayın -> Android Araçları -> İmzalanmamış Uygulama Paketini Dışa Aktar (burada olduğu gibi GoogleDriveApp.apk'ımızı Masaüstüne aktarıyoruz)

Anahtar deponuzu ve jarsigner aracını kullanarak uygulamayı imzalayın (aşağıdaki adımları izleyin):

Cmd'yi açın -> "jarsigner.exe" dosyanızın bulunduğu dizini değiştirin (benim sistemimde olduğu gibi "C: \ Program Files \ Java \ jdk1.6.0_17 \ bin" konumunda olduğu gibi)

Şimdi cmd'de belwo komutunu girin:

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

Sizden şifrenizi girmenizi isteyecektir: Anahtar deposu için Parola Girin: Apk'nizi imzalayacaktır. İmzalamanın başarılı olduğunu doğrulamak için şunları çalıştırabilirsiniz:

jarsigner -c: \ users \ pir fahim \ Desktops \ GoogleDriveApp.apk doğrulayın

Şununla geri gelmelidir: kavanoz doğrulandı.

Yöntem 2

Eclipse'i ADT ile kullanıyorsanız, dosyayı derlemek, imzalamak, hizalamak ve dağıtım için hazırlamak kolaydır. Yapmanız gerekenler sadece bu adımları izleyin.

  • Dosya> Dışa Aktar.
  • Android uygulamasını dışa aktar
  • Gözat -> projenizi seçin
  • Sonraki -> İleri

Bu adımlar projenizi derleyecek, imzalayacak ve sıkıştıracaktır ve artık projenizi dağıtmaya veya Google Play mağazasında yüklemeye hazırsınız.


Tam olarak ihtiyacım olan şey, yeni bir çevrimiçi oluşturma aracı kullanmaktı ve yeni oluşturulmuş olanı değil, önceki anahtar depomu kullanmak zorunda kaldım. Kaçırdığım tek şey, APK'yi ZIP ALIGNing idi, bu yüzden aynı sorunu yaşayan biri varsa, buraya gidin stackoverflow.com/a/22682132/826194
Larzan

5

APK İmzalama Süreci

Bir Android APK dosyasını manuel olarak imzalamak için şu üç komutu çalıştırın:

  1. Anahtar deposu dosyası oluştur

    keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000
  2. APK dosyanızı kullanarak imzalayın jarsigner

    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME
  3. Zipalign aracını kullanarak İmzalı APK'yı hizalayın

    zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH

AŞAMA 1


Generate Keystore file

keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -geçerlilik 10000

Misal:

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

anahtar deposu şifresi: uygulamanız @ 123 anahtar şifresi: uygulamanız @ 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>

ADIM 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

Misal

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 -doğrula -verbose -certs JARSIGNED_APK_FILE_PATH

Misal

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>

AŞAMA 3


Zipalign kullanarak son APK paketini hizalayın

zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH_WITH_NAME_ofSignedAPK

Misal

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

Misal

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>

Not:

Doğrulama komutu sadece APK'nin doğru şekilde oluşturulup oluşturulmadığını ve imzalanıp imzalanmadığını kontrol etmek içindir!

Referanslar

Umarım bu herkese yardımcı olur :)


2

Bu sorunla karşılaştım ve manifest'teki min sdk sürümünü kontrol ederek çözüldüm. 15 (ICS) olarak ayarlandı, ancak telefonum 10 (Gingerbread) çalıştırıyordu

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.