Aracılığıyla paylaş


APK’yı El ile İmzalama

Uygulama yayın için oluşturulduktan sonra, APK'nın bir Android cihazında çalıştırılabilmesi için dağıtımdan önce imzalanması gerekir. Bu işlem genellikle IDE ile işlenir, ancak APK'yı komut satırında el ile imzalamanın gerekli olduğu bazı durumlar vardır. Apk imzalama ile ilgili aşağıdaki adımlar şunlardır:

  1. Özel Anahtar Oluşturma – Bu adımın yalnızca bir kez gerçekleştirilmesi gerekir. APK'yi dijital olarak imzalamak için özel bir anahtar gereklidir. Özel anahtar hazırlandıktan sonra, gelecek sürüm derlemeleri için bu adım atlanabilir.

  2. ZIPalign the APKZipalign , bir uygulamada gerçekleştirilen bir iyileştirme işlemidir. Android'in çalışma zamanında APK ile daha verimli bir şekilde etkileşim kurmasını sağlar. Xamarin.Android çalışma zamanında bir denetim yürütür ve APK zipaligned değilse uygulamanın çalışmasına izin vermez.

  3. APK'yi imzala – Bu adım, Android SDK'dan apksigner yardımcı programını kullanmayı ve APK'yi önceki adımda oluşturulan özel anahtarla imzalamayı içerir. v24.0.3'ten önceki Android SDK derleme araçlarının eski sürümleriyle geliştirilen uygulamalar, JDK'den jarsigner uygulamasını kullanır. Bu araçların her ikisi de aşağıda daha ayrıntılı olarak ele alınacaktır.

Adımların sırası önemlidir ve APK'yi imzalamak için hangi aracın kullanıldığına bağlıdır. Apksigner kullanırken, önce uygulamayı zipalign yapmak ve sonra apksigner ile imzalamak önemlidir. APK'yı imzalamak için jarsigner kullanmak gerekiyorsa, önce APK'yı imzalamak ve sonra zipalign çalıştırmak önemlidir.

Önkoşullar

Bu kılavuz, Android SDK derleme araçlarından (v24.0.3 veya üzeri) apksigner kullanmaya odaklanacaktır. Bir APK'nın zaten derlendiğini varsayar.

Android SDK Derleme Araçları'nın eski bir sürümü kullanılarak oluşturulan uygulamalar, APK'yi jarsigner ile imzalama bölümünde açıklandığı gibi jarsigner kullanmalıdır.

Özel Anahtar Deposu oluşturma

Anahtar deposu, Java SDK'sından program anahtar aracı kullanılarak oluşturulan bir güvenlik sertifikaları veritabanıdır. Android dijital olarak imzalanmamış uygulamaları çalıştırmayacağı için anahtar deposu bir Xamarin.Android uygulamasını yayımlamak için kritik öneme sahiptir.

Geliştirme sırasında Xamarin.Android, uygulamanın doğrudan öykünücüye veya hata ayıklanabilir uygulamaları kullanmak üzere yapılandırılmış cihazlara dağıtılmasını sağlayan bir hata ayıklama anahtar deposu kullanarak uygulamayı imzalar. Ancak, bu anahtar deposu, uygulamaları dağıtmak amacıyla geçerli bir anahtar deposu olarak tanınmaz.

Bu nedenle, özel bir anahtar deposu oluşturulup uygulamaları imzalamak için kullanılmalıdır. Bu, güncelleştirmeleri yayımlamak için aynı anahtar kullanılacağından ve daha sonra diğer uygulamaları imzalamak için kullanılabileceği için yalnızca bir kez gerçekleştirilmesi gereken bir adımdır.

Bu anahtar deposunun korunması önemlidir. Kaybolursa, Google Play ile uygulamada güncelleştirme yayımlamak mümkün olmayacaktır. Kayıp bir anahtar deposunun neden olduğu sorunun tek çözümü yeni bir anahtar deposu oluşturmak, APK'yı yeni anahtarla yeniden imzalamak ve ardından yeni bir uygulama göndermektir. Daha sonra eski uygulamanın Google Play'den kaldırılması gerekir. Benzer şekilde, bu yeni anahtar deposu ele geçirilirse veya genel olarak dağıtılırsa, bir uygulamanın resmi olmayan veya kötü amaçlı sürümleri dağıtılabilir.

Yeni Anahtar Deposu Oluşturma

Yeni bir anahtar deposu oluşturmak için Java SDK'sından komut satırı aracı anahtar aracı gerekir. Aşağıdaki kod parçacığı, anahtar aracının nasıl kullanılacağını gösteren bir örnektir (değerini anahtar deposunun dosya adıyla ve <key-name> anahtar deposu içindeki anahtarın adıyla değiştirin<my-filename>):

$ keytool -genkeypair -v -keystore <filename>.keystore -alias <key-name> -keyalg RSA \
          -keysize 2048 -validity 10000

Keytool'un isteyeceği ilk şey anahtar deposunun parolasıdır. Ardından anahtarı oluşturma konusunda yardımcı olacak bazı bilgiler isteyecektir. Aşağıdaki kod parçacığı, dosyasında xample.keystoredepolanacak adlı publishingdoc yeni bir anahtar oluşturma örneğidir:

$ keytool -genkeypair -v -keystore xample.keystore -alias publishingdoc -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:  Ham Chimpanze
What is the name of your organizational unit?
  [Unknown]:  NASA
What is the name of your organization?
  [Unknown]:  NASA
What is the name of your City or Locality?
  [Unknown]:  Cape Canaveral
What is the name of your State or Province?
  [Unknown]:  Florida
What is the two-letter country code for this unit?
  [Unknown]:  US
Is CN=Ham Chimpanze, OU=NASA, O=NASA, L=Cape Canaveral, ST=Florida, C=US correct?
  [no]:  yes

Generating 2,048 bit RSA key pair and self-signed certificate (SHA1withRSA) with a validity of 10,000 days
        for: CN=Ham Chimpanze, OU=NASA, O=NASA, L=Cape Canaveral, ST=Florida, C=US
Enter key password for <publishingdoc>
        (RETURN if same as keystore password):
Re-enter new password:
[Storing xample.keystore]

Bir anahtar deposunda depolanan anahtarları listelemek için şu seçenekle list keytool kullanın:

$ keytool -list -keystore xample.keystore

APK'yı zipalign

Apksigner ile bir APK imzalamadan önce, önce Android SDK'dan zipalign aracını kullanarak dosyayı iyileştirmek önemlidir. zipalign , APK'daki kaynakları 4 baytlık sınırlar boyunca yeniden yapılandıracaktır. Bu hizalama, Android'in APK'dan kaynakları hızla yüklemesine olanak tanır, uygulamanın performansını artırır ve bellek kullanımını azaltabilir. Xamarin.Android, APK'nın zipalign olup olmadığını belirlemek için bir çalışma zamanı denetimi yapacaktır. APK zipaligned değilse, uygulama çalışmaz.

Aşağıdaki komut, imzalı APK'yı kullanacak ve dağıtım için hazır helloworld.apk adlı imzalı, zipaligned APK üretecektir.

$ zipalign -f -v 4 mono.samples.helloworld-unsigned.apk helloworld.apk

APK’yi imzalama

APK'yı sıkıştırdıktan sonra, bir anahtar deposu kullanarak imzalamak gerekir. Bu, SDK derleme araçlarının sürümünün derleme araçları dizininde bulunan apksigner aracıyla yapılır. Örneğin, Android SDK derleme araçları v25.0.3 yüklüyse apksigner dizininde bulunabilir:

$ ls $ANDROID_HOME/build-tools/25.0.3/apksigner
/Users/tom/android-sdk-macosx/build-tools/25.0.3/apksigner*

Aşağıdaki kod parçacığı, apksigner'a ortam değişkeni tarafından erişilebildiğini PATHvarsayar. Xample.keystore dosyasında yer alan anahtar diğer adını publishingdoc kullanarak bir APK imzalar:

$ apksigner sign --ks xample.keystore --ks-key-alias publishingdoc mono.samples.helloworld.apk

Bu komut çalıştırıldığında, apksigner gerekirse anahtar deposuna parolayı sorar.

Apksigner kullanımı hakkında daha fazla bilgi için Google'ın belgelerine bakın.

Not

Google sorun 62696222 göre, apksigner Android SDK'da "eksik". Bunun geçici çözümü, Android SDK derleme araçları v25.0.3'ü yüklemek ve apksigner'ın bu sürümünü kullanmaktır.

APK'yi jarsigner ile imzalama

Uyarı

Bu bölüm yalnızca APK'yi jarsigner yardımcı programıyla imzalamak nececssary ise geçerlidir. Geliştiricilerin APK'yi imzalamak için apksigner kullanmaları tavsiye edilir.

Bu teknik, Java SDK'sından jarsigner komutunu kullanarak APK dosyasını imzalamayı içerir. Jarsigner aracı Java SDK'sı tarafından sağlanır.

Aşağıda jarsigner ve xample.keystore adlı bir anahtar deposu dosyasında yer alan anahtarı publishingdoc kullanarak APK'nın nasıl imzalandığı gösterilmektedir:

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore xample.keystore mono.samples.helloworld.apk publishingdoc

Not

Jarsigner kullanırken, önce APK'yı imzalamak ve sonra zipalign kullanmak önemlidir.