apksigner - Android APK'larını imzalayın ve doğrulayın
apksigner [options] apk
apksigner --version
apksigner --help
Android APK dosyalarını imzalamak ve APK dosyalarının imzalarının Android cihazlarda doğrulanıp doğrulanmayacağını kontrol etmek için bir komut satırı aracı.
apk, imzalanacak veya doğrulanacak mevcut bir dosyadır.
apksig, APK imzalamayı ve APK imzalarının Android'de doğrulanıp doğrulanmayacağını kontrol etmeyi basitleştirmeyi amaçlayan bir projedir. apksig, JAR imzalamayı (ilk günden beri Android tarafından kullanılır) ve APK Signature Scheme v2'yi (Android Nougat, API Level 24'ten beri desteklenir) destekler.
Apksig'in temel özelliği, Android platformunun farklı sürümleri arasındaki APK imza doğrulama mantığındaki farklılıkları bilmesidir. apksig böylece imzalı bir APK'nin APK tarafından desteklenen tüm Android platformu sürümlerinde doğrulama yapmasının beklenip beklenmediğini kontrol edebilir. Bir APK imzalanırken apksig, imzalanan APK tarafından desteklenen Android platformu sürümlerine dayalı olarak en uygun şifreleme algoritmalarını seçecektir.
sign
Bu, önceden var olan tüm imzaları çıkararak sağlanan APK'yı imzalar. İmzalama, her biri bir asimetrik anahtar çifti ve karşılık gelen bir sertifika ile temsil edilen bir veya daha fazla imzalayan kullanılarak gerçekleştirilir. Tipik olarak bir APK yalnızca bir imzalayan tarafından imzalanır. Her imzalayan için, imzalayanın özel anahtarını ve sertifikasını sağlamanız gerekir.
verify
Bu, sağlanan APK'nın Android'de doğrulanıp doğrulanmayacağını kontrol eder. Varsayılan olarak bu, APK'nın APK tarafından desteklenen tüm Android platformu sürümlerinde doğrulanıp doğrulanmayacağını kontrol eder (AndroidManifest.xml'de minSdkVersion kullanılarak bildirildiği gibi). APK'yı özel bir API Düzeyleri aralığına göre doğrulamak için --min-sdk-version ve/veya --max-sdk-version kullanın.
lineage
Bu, sağlanan SigningCertificateLineage'deki bir veya daha fazla imzalayanın yeteneklerini değiştirir. Bu, yükleme tabanı yeni imzalama sertifikasına geçirildikten sonra önceki imza sertifikasının yeteneklerini iptal etmek için kullanılabilir.
rotate
Bu, sağlanan anahtarları alır ve APK Signature Scheme v3 kullanan bir anahtar döndürme senaryosunda kullanılmak üzere eskiyi yeniye bağlayan bir SigningCertificateLineage girişi oluşturur.
version
Bu aracın sürüm numarasını göster ve çık
help
Bu kullanım sayfasını göster ve çık
Ayrıntılı çıkış modu
Bu komutla ilgili yardımı göster ve çık
Uyarıları hata olarak kabul et
signSağlanan APK'yı imzalayın
İmzalı APK'nın çıktısının alınacağı dosya. Varsayılan olarak APK, giriş dosyasının üzerine yazarak yerinde imzalanır.
Bu APK'nın imzalarının doğrulanacağı en düşük API Düzeyi. Varsayılan olarak, AndroidManifest.xml'deki değer kullanılır. Değer ne kadar yüksek olursa, imzalama sırasında o kadar güçlü güvenlik parametreleri kullanılır.
Bu APK'nın imzalarının doğrulanacağı en yüksek API Düzeyi. Varsayılan olarak mümkün olan en yüksek değer kullanılır.
JAR imzalama şeması (aka v1 imzalama şeması, Android'de ilk günden beri kullanılan) kullanılarak imzanın etkinleştirilip etkinleştirilmeyeceği. Varsayılan olarak, bu şemayı kullanarak imzalama, minimum ve maksimum SDK sürümüne göre etkinleştirilir (bkz. --min-sdk-version ve --max-sdk-version).
APK Signature Scheme v2 (aka v2 imzalama şeması, Android Nougat, API Seviye 24'te tanıtılan) kullanılarak imzalamanın etkinleştirilip etkinleştirilmeyeceği. Varsayılan olarak, bu şemayı kullanarak imzalama, minimum ve maksimum SDK sürümüne göre etkinleştirilir (bkz. --min-sdk-version ve --max-sdk-version).
per-signer optionsBu seçenekler, belirli bir imzalayanın yapılandırmasını belirtir. Farklı imzalayanların seçeneklerini sınırlamak için --next-signer kullanın.
İki farklı imzalayanın seçeneklerini sınırlandırır. Yalnızca bir imzalayıcı kullanıldığında bu seçeneğin kullanılmasına gerek yoktur.
Bu imzalayanın JAR imza düzeni (aka v1 şeması) imzasını içeren dosyalar için temel ad. Varsayılan olarak, KeyStore anahtar takma adı veya anahtar dosyasının temel adı kullanılır.
per-signer signing key & certificate optionsİmzalayanın özel anahtarını ve sertifikasını sağlamanın iki yolu vardır: (1) Java KeyStore (bkz. --ks) veya (2) PKCS #8 biçimindeki özel anahtar dosyası ve X.509 biçimindeki sertifika dosyası (bkz. --key ve --cert).
Belirtilen dosyadan başlatılan Java KeyStore'dan özel anahtar ve sertifika zinciri yükleyin. HİÇBİRİ, bazı PKCS #11 Anahtar Depoları için geçerli olan KeyStore tarafından hiçbir dosyaya ihtiyaç duyulmadığı anlamına gelir.
Özel anahtarın ve sertifikanın KeyStore'da saklandığı diğer ad. KeyStore birden çok anahtar içeriyorsa bu belirtilmelidir.
KeyStore şifresi (bkz. --ks). Aşağıdaki biçimler desteklenir:
geçiş: satır içi sağlanan şifre
env: adlandırılmış ortam değişkeninde sağlanan parola
dosya: adlı dosyada tek bir satır olarak verilen şifre
standart girişte tek satır olarak sağlanan stdin şifresi
Bir KeyStore'u açmak için parola gerekir. Varsayılan olarak araç, konsol veya standart giriş yoluyla parola isteyecektir. Birden çok parola sağlamak için aynı dosya (standart giriş dahil) kullanıldığında, parolalar dosyadan her seferinde bir satır okunur. Parolalar, imzalayanların belirtildiği sırayla okunur ve her imzalayan içinde, anahtar parolası okunmadan önce KeyStore parolası okunur.
Özel anahtarın korunduğu parola. Varsayılan olarak, KeyStore anahtarlarının, KeyStore'larıyla aynı parola kullanılarak korunduğu varsayılır (bkz. --ks-pass). Aşağıdaki biçimler desteklenir:
geçiş: satır içi sağlanan şifre
env: adlandırılmış ortam değişkeninde sağlanan parola
dosya: adı verilen dosyada tek satır olarak sağlanan parola stdin parolası standart girişte tek satır olarak sağlanır
Varsayılan olarak, anahtar parola korumalıysa, araç konsol veya standart giriş aracılığıyla parola ister. Birden çok parola sağlamak için aynı dosya (standart giriş dahil) kullanıldığında, parolalar dosyadan her seferinde bir satır okunur. Parolalar, imzalayanların belirtildiği sırayla okunur ve her imzalayan içinde, anahtar parolası okunmadan önce KeyStore parolası okunur.
ASCII olmayan karakterler içeren parolaları denemek için ek karakter kodlaması (örneğin, ibm437 veya utf-8). Keytool tarafından oluşturulan KeyStore'lar genellikle parolanın Unicode biçimi kullanılarak değil, konsolun karakter kodlaması kullanılarak parolanın kodlanmasıyla üretilen biçim kullanılarak şifrelenir. apksigner varsayılan olarak birkaç parola biçimini kullanarak şifreyi çözmeye çalışır: Unicode formu, JVM varsayılan karakter kümesi kullanılarak kodlanan form ve Java 8 ve daha eski sürümlerde, konsolun karakter kümesi kullanılarak kodlanan form. Java 9'da apksigner, konsolun karakter kümesini algılayamaz ve ASCII olmayan bir parola kullanıldığında --pass-encoding ile sağlanması gerekebilir. --pass-encoding ayrıca keytool tarafından farklı bir işletim sisteminde veya farklı bir yerel ayarda oluşturulan bir KeyStore için sağlanmalıdır.
Kullanılacak KeyStore'un türü/algoritması. Varsayılan olarak, varsayılan tür kullanılır.
KeyStore uygulamasının talep edileceği JCA Sağlayıcısının adı. Varsayılan olarak, en yüksek öncelikli sağlayıcı kullanılır. Bir sağlayıcı belirtmenin alternatif yolu için --ks-provider-class'a bakın.
KeyStore uygulamasının talep edileceği JCA Sağlayıcısının tam nitelikli sınıf adı. Varsayılan olarak, sağlayıcı --ks-sağlayıcı-adı temel alınarak seçilir.
--ks-provider-class tarafından belirtilen JCA Provider sınıfının oluşturucusuna iletilecek değer. Değer, yapıcıya java.lang.String olarak iletilir. Varsayılan olarak, argümansız sağlayıcının yapıcısı kullanılır.
Belirtilen dosyadan özel anahtarı yükleyin. Anahtar parola korumalıysa, --key-pass kullanılarak aksi belirtilmedikçe parola standart giriş yoluyla sorulacaktır. Dosya PKCS #8 DER formatında olmalıdır.
Sertifika zincirini belirtilen dosyadan yükleyin. Dosya X.509 PEM veya DER formatında olmalıdır.
verifySağlanan APK'nın Android'de doğrulanmasının beklenip beklenmediğini kontrol edin
APK'nın imza sertifikaları hakkında bilgi göster
Bu APK'nın imzalarının doğrulanacağı en düşük API Düzeyi. Varsayılan olarak, AndroidManifest.xml'deki değer kullanılır.
Bu APK'nın imzalarının doğrulanacağı en yüksek API Düzeyi. Varsayılan olarak mümkün olan en yüksek değer kullanılır.
apksigner sign --ks release.jks app.apk apksigner verify --verbose app.apk apksigner lineage --in /path/to/existing/lineage --print-certs -v apksigner rotate --out /path/to/new/file --old-signer --ks release.jks --new-signer --ks release2.jks
signAnahtar deposu release.jks'teki tek ve tek anahtarı kullanarak bir APK imzalayın:
apksigner sign --ks release.jks app.apk
Bireysel dosyalar olarak saklanan özel bir anahtar ve sertifika kullanarak bir APK imzalayın:
apksigner sign --key release.pk8 --cert release.x509.pem app.apk
İki tuş kullanarak bir APK imzalayın:
apksigner sign --ks release.jks --next-signer --ks magic.jks app.apk
verifyAPK imzalarının, bu APK tarafından desteklendiği beyan edilen tüm Android platformlarında doğrulanmasının beklenip beklenmediğini kontrol edin:
apksigner verify app.apk
API Düzey 15 ve üzeri Android platformlarında APK imzalarının doğrulanmasının beklenip beklenmediğini kontrol edin:
apksigner verify --min-sdk-version 15 app.apk
lineageDizindeki bir önceki imzalayanın tüm özelliklerini kaldırın:
apksigner lineage --in /path/to/existing/lineage --out /path/to/new/file --signer --ks release.jks --set-installed-data false --set-shared-uid false --set-permission false --set-rollback false --set-auth false
Kökendeki imzalama sertifikaları ve yetenekleri hakkındaki ayrıntıları görüntüleyin:
apksigner lineage --in /path/to/existing/lineage --print-certs -v
rotateDöndürmeyi etkinleştirmek için yeni bir SigningCertificateLineage oluşturun:
apksigner rotate --out /path/to/new/file --old-signer --ks release.jks --new-signer --ks release2.jks
Önceki rotasyondan sonra tekrar döndürmek için mevcut bir SigningCertificateLineage'ı genişletin:
apksigner rotate --in /path/to/existing/lineage --out /path/to/new/file --old-signer --ks release2.jks --new-signer --ks release3.jks
Önceki imzalayan için açık yeteneklere sahip yeni bir SigningCertificateLineage oluşturun:
apksigner rotate --out /path/to/new/file --old-signer --ks release.jks --set-installed-data true --set-shared-uid true --set-permission true --set-rollback false --set-auth true --new-signer --ks release2.jks
signapk(1) jar(1) zip(1) zipalign(1)
https://source.android.com/devices/tech/ota/sign_builds.html
Android Açık Kaynak Projesi.