apksigner

apksigner aracı, Android SDK Derleme Araçları, APK'ları imzalamanızı ve APK'nın imzası Android'in tüm sürümlerinde başarıyla doğrulanacaktır tarafından desteklenen bir platformdur.

Bu sayfada, Çevik yaklaşımın nasıl kullanılacağına ilişkin yardımcı olan farklı komut satırı seçenekleri için referans olarak görebilirsiniz. Daha kapsamlı bir açıklama için apksigner aracı, APK'larınızı imzalamak için kullanılır. Uygulamanızı imzalama konusunu inceleyin.

Dikkat: APK'nızı apksigner kullanarak imzalarsanız APK'da başka değişiklikler yaparsanız APK'nın imzası geçersiz hale gelir. Şunu kullanıyorsanız: Hizalamak için zipalign APK'nızı imzalamadan önce kullanın.

Kullanım

APK imzalama

apksigner aracını kullanarak bir APK'yı imzalamak için kullanılan söz dizimi aşağıdaki gibidir: şöyle olur:

apksigner sign --ks keystore.jks |
  --key key.pk8 --cert cert.x509.pem
  [signer_options] app-name.apk

apksigner aracını kullanarak bir APK imzaladığınızda İmzalayanın özel anahtarı ve sertifikası. Bu bilgileri iki yol vardır:

  • --ks seçeneğini kullanarak bir KeyStore dosyası belirtin.
  • Şunu kullanarak gizli anahtar dosyasını ve sertifika dosyasını ayrı ayrı belirtin : Sırasıyla --key ve --cert seçenekleri. İlgili içeriği oluşturmak için kullanılan gizli anahtar dosyasının PKCS #8 biçimini kullanması ve sertifika dosyasının X.509 biçimini kullanın.

Bir APK'yı genellikle yalnızca bir imzalayan kullanarak imzalarsınız. Gerekirse bir APK'yı birden çok imzalayan kullanarak imzalamak için --next-signer seçeneğini kullanın genel seçenekler kümesini her imzalayan için geçerlidir:

apksigner sign [signer_1_options] --next-signer [signer_2_options] app-name.apk

APK'nın imzasını doğrulama

Bir APK'nın imzasının başarıyla doğrulanmasını onaylamak için kullanılan söz dizimi aşağıdaki gibidir:

apksigner verify [options] app-name.apk

İmzalama anahtarlarını değiştir

Bir imzalama sertifikası sırasını veya yeni bir şu şekildedir:

$ apksigner rotate --in /path/to/existing/lineage \
  --out /path/to/new/file \
  --old-signer --ks old-signer-jks \
  --new-signer --ks new-signer-jks

Seçenekler

Aşağıdaki listelerde, apksigner aracı destekler.

Komutu imzala

apksigner imza komutunda aşağıdaki seçenekler bulunur.

Genel seçenekler

Aşağıdaki seçenekler, imzalayana uygulanacak temel ayarları belirtir:

--out <apk-filename>
. İmzalanmış APK'yı kaydetmek istediğiniz konum. Bu seçenek size açık bir şekilde sağlandığında, APK paketi oturum açılarak girilen APK dosyası.
--min-sdk-version <integer>
. apksigner uygulamasının şu işlemler için kullandığı en düşük Android Framework API düzeyi: APK'nın imzasının doğrulanacağını onaylayın. Yüksek değerler uygulamayı imzalarken daha güçlü güvenlik parametreleri kullanmak ancak APK'nın Android'in daha yeni sürümlerini çalıştıran cihazlarda kullanılabilirliği. Varsayılan olarak, apksigner Uygulamanın manifest dosyasındaki minSdkVersion özelliği.
--max-sdk-version <integer>
. apksigner uygulamasının kullandığı en yüksek Android çerçevesi API düzeyi APK'nın imzasının doğrulanacağını onaylayın. Araç, varsayılan olarak mümkün olan en yüksek API düzeyini kullanır.
--rotation-min-sdk-version <integer>
. APK'nın döndürülmüş imzası en düşük API düzeyi anahtarının kullanılması gerekir. İlgili içeriği oluşturmak için kullanılan APK için orijinal (döndürülmemiş) imzalama anahtarı tüm kontrol edebilirsiniz. Varsayılan olarak dönüşümlü imzalama anahtarları, Android 13 çalıştıran cihazlarda desteklenir (API düzeyi 33) veya sonraki sürümler, v3.1 imzalama bloğuyla kullanılır.

Not: Uygulamanız döndürülmüş imza ile imzalandıysa tuşunu basılı tutarken, Android 12L (API düzeyi 32) veya önceki sürümleri çalıştıran imzalamaya devam etmek için --rotation-min-sdk-version 28 kullanılmalıdır uygulamanızı dönüşümlü imzalama anahtarıyla değiştirin.

--v1-signing-enabled <true | false>
. apksigner öğesinin, belirtilen APK paketini imzalayıp imzalamadığını belirler JAR tabanlı geleneksel imza şemasını kullanır. Varsayılan olarak, araç --min-sdk-version ve değerleri Bu imzanın ne zaman uygulanacağına karar vermek için --max-sdk-version şema.
--v2-signing-enabled <true | false>
. apksigner öğesinin, belirtilen APK paketini imzalayıp imzalamadığını belirler APK İmza Şeması v2. Varsayılan olarak, araç Karar vermek için --min-sdk-version ve --max-sdk-version ne zaman uygulanacağını kontrol edin.
--v3-signing-enabled <true | false>
. apksigner öğesinin, belirtilen APK paketini imzalayıp imzalamadığını belirler APK İmza Şeması v3. Varsayılan olarak, araç Karar vermek için --min-sdk-version ve --max-sdk-version ne zaman uygulanacağını kontrol edin.
--v4-signing-enabled <true | false | only>

apksigner hizmetinin, belirtilen APK paketini imzalayıp imzalamadığını belirler APK kullanarak İmza Şeması v4. Bu şema imza ayrı bir dosyada oluşturulur (apk-name.apk.idsig). true ve APK imzalı değilse v2 veya v3 imzası --min-sdk-version ve --max-sdk-version. Komut, daha sonra .idsig dosyası.

Yalnızca v4'ü oluşturmak için only kullanın APK'yı ve imzaları değiştirmeden imza daha çok bilgi verdim. APK çalışmazsa only başarısız olur v2 veya v3 imzası varsa ya da imza farklı bir anahtar kullandıysa .

Varsayılan olarak, araç Karar vermek için --min-sdk-version ve --max-sdk-version ne zaman uygulanacağını kontrol edin.

-v, --verbose
. Ayrıntılı çıkış modunu kullanın.

İmzalayana özel seçenekler

Aşağıdaki seçenekler, belirli bir imzalayanın yapılandırmasını belirtir. Bu (uygulamanızı yalnızca tek bir imzalayan kullanıcı ile imzalarsanız) seçeneklerin olması gerekmez.

--next-signer <signer-options>
. Her imzalayan için farklı genel seçenekler belirtmek amacıyla kullanılır.
--v1-signer-name <basename>
. hemen şimdi imzalamalısınız. Varsayılan olarak apksigner, şunun anahtar takma adını kullanır: KeyStore veya bu imzalayan için anahtar dosyasının temel adını girin.

Anahtar ve sertifika seçenekleri

Aşağıdaki seçenekler imzalayanın gizli anahtarını ve sertifikasını belirtir:

--ks <filename>
. İmzalayanın özel anahtarı ve sertifika zinciri, verilen Java tabanlı KeyStore dosyası. Dosya adı "NONE" olarak ayarlanırsa anahtarı ve sertifikayı içeren KeyStore için bir dosya gerekmiyor belirtilmiştir.
--ks-key-alias <alias>
. İmzalayanın özel anahtarını temsil eden takma adın adı anahtar deposunda bulunan sertifika verilerini kontrol edin. KeyStore, imzalayan birden fazla anahtar içeriyorsa bu seçeneği belirtmeniz gerekir.
--ks-pass <input-format>

İmzalayanın özel anahtarını ve imzalayanın özel anahtarını içeren KeyStore şifresi sertifikası. KeyStore açmak için şifre girmelisiniz. İlgili içeriği oluşturmak için kullanılan apksigner aracı şu biçimleri destekler:

  • pass:<password> - Şifre satır içinde sağlandı apksigner sign komutunun geri kalanıyla.
  • env:<name> – Şifre belirtilen ortam değişkeni
  • file:<filename> – Şifre şu şekilde depolanır: tek satır olabilir.
  • stdin – Şifre, standart giriş akışından yararlanabilir. Bu, --ks-pass

Not: Aynı sayfaya birden fazla şifre eklerseniz bunları ayrı satırlarda belirtin. apksigner aracı şifre değiştirme sırasına göre bir APK'nın imzalayanlarıyla imzalayanları belirtin. Bir imzalayan için iki şifre sağladıysanız apksigner, ilk şifreyi KeyStore olarak yorumlar ikincisi de anahtar şifresi olarak kullanılıyor.

--pass-encoding <charset>
. Aşağıdaki gibi belirtilen karakter kodlamalarını içerir: ibm437 veya utf-8 içeren şifreler oluşturabilirsiniz.

Keytool genellikle konsolun varsayılan değerini kullanıp şifreyi dönüştürerek anahtar depolarını şifreler karakter kümesi ekleyin. Varsayılan olarak apksigner, şifre:

  • Unicode biçimi
  • JVM varsayılan karakter kümesi kullanılarak kodlanmış form
  • Java 8 ve daha eski sürümlerde, biçim konsolun varsayılan karakter kümesi kullanılarak kodlanır
  • Java 9'da apksigner, konsolun karakter kümesini algılayamıyor. Şu durumlarda --pass-encoding belirtmeniz gerekebilir: ASCII olmayan bir şifre kullanılır. Bu seçeneği, kullandığınız anahtar depolarda aynı şekilde keytool'u kullanabilirsiniz.

    --key-pass <input-format>

    İmzalayana ait özel anahtarın şifresi. şifre korumalı. apksigner aracı şu biçimleri destekler:

    • pass:<password> – Şifre satır içinde sağlanır apksigner sign komutunun geri kalanıyla.
    • env:<name> – Şifre belirtilen ortam değişkeni
    • file:<filename> – Şifre şu şekilde depolanır: tek satır olabilir.
    • stdin – Şifre, standart giriş akışından yararlanabilir. Bu, --key-pass
    --ks-type <algorithm>
    . imzalayan kişinin özel anahtarı ve sertifikası. Varsayılan olarak apksigner keystore.type sabit olarak tanımlanan türü Güvenlik özellikleri dosyası.
    --ks-provider-name <name>
    . İmzalayana ait KeyStore istenirken kullanılacak JCA Sağlayıcısının adı hakkında bilgi edindiniz. Varsayılan olarak, apksigner en yüksek öncelikli sağlayıcı.
    --ks-provider-class <class-name>
    . İstekte bulunurken kullanılacak JCA Sağlayıcısının tam sınıf adı İmzalayan kullanıcının KeyStore uygulamasını kontrol edin. Bu seçenek, --ks-provider-name için. Varsayılan olarak apksigner --ks-provider-name ile belirtilen sağlayıcıyı kullanır seçeneğini belirleyin.
    --ks-provider-arg <value>
    . JCA'nın kurucusu için bağımsız değişken olarak aktarılacak bir dize değeri Sağlayıcı sınıfı; sınıfın kendisi --ks-provider-class seçeneği. Varsayılan olarak apksigner sınıfın sıfır bağımsız değişkenli kurucusunu kullanır.
    --key <filename>
    . İmzalayanın özel anahtarını içeren dosyanın adı. Bu dosya PKCS #8 DER biçimini kullanmalıdır. Anahtar şifre korumalıysa apksigner standart girişi kullanarak şifre istiyor --key-pass seçeneği.
    --cert <filename>
    . İmzalayanın sertifika zincirini içeren dosyanın adı. Bu dosyası, X.509 PEM veya DER biçiminde olmalıdır.

    Komutu doğrula

    apksigner doğrulama komutunda aşağıdaki seçenekler bulunur.

    --print-certs
    . APK'nın imzalama sertifikalarıyla ilgili bilgileri göster.
    --min-sdk-version <integer>
    . apksigner uygulamasının şu işlemler için kullandığı en düşük Android Framework API düzeyi: APK'nın imzasının doğrulanacağını onaylayın. Yüksek değerler uygulamayı imzalarken daha güçlü güvenlik parametreleri kullanmak ancak APK'nın Android'in daha yeni sürümlerini çalıştıran cihazlarda kullanılabilirliği. Varsayılan olarak, apksigner Uygulamanın manifest dosyasındaki minSdkVersion özelliği.
    --max-sdk-version <integer>
    . apksigner uygulamasının kullandığı en yüksek Android çerçevesi API düzeyi APK'nın imzasının doğrulanacağını onaylayın. Araç, varsayılan olarak mümkün olan en yüksek API düzeyini kullanır.
    -v, --verbose
    . Ayrıntılı çıkış modunu kullanın.
    -Werr
    . Uyarıları hata olarak kabul edin.

    Örnekler

    Aşağıda, apksigner kullanılan örnekler verilmiştir.

    APK imzalama

    Şuradaki tek anahtar olan release.jks uygulamasını kullanarak bir APK'yı imzalayın: KeyStore:

    $ apksigner sign --ks release.jks app.apk
    

    Ayrı dosyalar olarak depolanan bir özel anahtar ve sertifikayı kullanarak bir APK'yı imzalayın:

    $ apksigner sign --key release.pk8 --cert release.x509.pem app.apk
    

    İki anahtar kullanarak bir APK'yı imzalayın:

    $ apksigner sign --ks first-release-key.jks --next-signer --ks second-release-key.jks app.apk
    

    Rotasyona sahip imzalama anahtarı ve rotasyon hedefleyen SDK 28 ve sonraki sürümleriyle APK imzalayın:

    $ apksigner sign --ks release.jks --next-signer --ks release2.jks \
      --lineage /path/to/signing/history/lineage app.apk \
      --rotation-min-sdk-version 28
    

    Rotasyona sahip imzalama anahtarı ve rotasyon hedefleyen SDK sürüm 33 ile bir APK imzalayın:

    $ apksigner sign --ks release.jks --next-signer --ks release2.jks \
      --lineage /path/to/signing/history/lineage app.apk
    

    APK'nın imzasını doğrulama

    APK'nın imzalarının geçerli olarak onaylanmasının beklenmediğini kontrol edin: APK'nın desteklediği tüm Android platformları:

    $ apksigner verify app.apk
    

    APK'nın imzalarının geçerli olarak onaylanmasının beklenmediğini kontrol edin: Android 4.0.3 (API düzeyi 15) ve sonraki sürümler:

    $ apksigner verify --min-sdk-version 15 app.apk
    

    İmzalama anahtarlarını değiştir

    Anahtar rotasyonunu destekleyen bir imzalama sertifikası sırasını etkinleştirin:

    $ apksigner rotate --out /path/to/new/file --old-signer \
        --ks release.jks --new-signer --ks release2.jks

    İmza anahtarlarınızı tekrar döndürün:

    $ apksigner rotate --in /path/to/existing/lineage \
      --out /path/to/new/file --old-signer --ks release2.jks \
      --new-signer --ks release3.jks