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:
-
--ksseçeneğini kullanarak bir KeyStore dosyası belirtin. -
Şunu kullanarak gizli anahtar dosyasını ve sertifika dosyasını ayrı ayrı belirtin :
Sırasıyla
--keyve--certseç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>- .
apksigneruygulaması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,apksignerUygulamanın manifest dosyasındakiminSdkVersionözelliği. --max-sdk-version <integer>- .
apksigneruygulaması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.
--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-versionve 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-versionve--max-sdk-versionne 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-versionve--max-sdk-versionne zaman uygulanacağını kontrol edin. --v4-signing-enabled <true | false | only>-
apksignerhizmetinin, 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).trueve APK imzalı değilse v2 veya v3 imzası--min-sdk-versionve--max-sdk-version. Komut, daha sonra.idsigdosyası.Yalnızca v4'ü oluşturmak için
onlykullanın APK'yı ve imzaları değiştirmeden imza daha çok bilgi verdim. APK çalışmazsaonlybaş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-versionve--max-sdk-versionne zaman uygulanacağını kontrol edin. -v,--verbose- . Ayrıntılı çıkış modunu kullanın.
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.
İ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
apksigneraracı şu biçimleri destekler:-
pass:<password>- Şifre satır içinde sağlandıapksigner signkomutunun 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.
apksigneraracı ş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ızapksigner, 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:
ibm437veyautf-8iç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-encodingbelirtmeniz 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ı.
apksigneraracı şu biçimleri destekler:-
pass:<password>– Şifre satır içinde sağlanırapksigner signkomutunun 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
apksignerkeystore.typesabit 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,
apksigneren 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-nameiçin. Varsayılan olarakapksigner--ks-provider-nameile 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-classseçeneği. Varsayılan olarakapksignersı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
apksignerstandart girişi kullanarak şifre istiyor--key-passseç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>- .
apksigneruygulaması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,apksignerUygulamanın manifest dosyasındakiminSdkVersionözelliği. --max-sdk-version <integer>- .
apksigneruygulaması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