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ındakiminSdkVersion
ö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.
--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ışmazsaonly
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.
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
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ı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:
ibm437
veyautf-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ırapksigner 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 olarakapksigner
--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 olarakapksigner
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ındakiminSdkVersion
ö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