Gradle sarmalayıcı komut satırı aracını kullanarak Android projenizde kullanılabilen tüm derleme görevlerini yürütebilirsiniz. Windows için toplu dosya (gradlew.bat
) ve Linux ile Mac için kabuk komut dosyası (gradlew.sh
) olarak kullanılabilir. Android Studio ile oluşturduğunuz her projenin kökünden erişilebilir.
Sarmalayıcıyla bir görevi çalıştırmak için Terminal penceresinde aşağıdaki komutlardan birini kullanın (Android Studio'da Görünüm > Araç Pencereleri > Terminal'i seçin):
- Windows Komut Kabuğunda:
gradlew task-name
- Mac, Linux veya Windows PowerShell'de:
./gradlew task-name
Projeniz için mevcut tüm derleme görevlerinin listesini görmek üzere tasks
komutunu yürütün:
gradlew tasks
Bu sayfanın geri kalanında, Gradle sarmalayıcısı ile uygulamanızı derleme ve çalıştırmayla ilgili temel bilgiler açıklanmaktadır. Android derlemenizin nasıl ayarlanacağı hakkında daha fazla bilgi için Derlemenizin yapılandırılmasıyla ilgili bölüme bakın.
Komut satırı araçları yerine Android Studio araçlarını kullanmayı tercih ediyorsanız Uygulamanızı derleme ve çalıştırma başlıklı makaleyi inceleyin.
Derleme türleri hakkında
Varsayılan olarak her Android uygulaması için iki derleme türü vardır: biri uygulamanızda hata ayıklama için (hata ayıklama derlemesi), diğeri ise uygulamanızı kullanıcılara yayınlamak için (sürüm derlemesi). Uygulamanızı bir cihaza dağıtabilmek için her derlemeden elde edilen çıkışın bir sertifikayla imzalanması gerekir. Hata ayıklama derlemesi, SDK araçları tarafından sağlanan bir hata ayıklama anahtarıyla otomatik olarak imzalanır (güvenli değildir ve Google Play Store'da yayınlayamazsınız). Sürüm derlemesi ise kendi özel anahtarınızla imzalanmalıdır.
Uygulamanızı yayınlamak için derlemek istiyorsanız uygun imzalama anahtarıyla uygulamanızı imzalamanız da önemlidir. Ancak yeni başlıyorsanız bir hata ayıklama APK'sı oluşturarak uygulamalarınızı bir emülatörde veya bağlı bir cihazda hızlıca çalıştırabilirsiniz.
Ayrıca build.gradle.kts
dosyanızda özel bir derleme türü tanımlayabilir ve debuggable true
ekleyerek hata ayıklama derlemesi olarak imzalanmasını yapılandırabilirsiniz. Daha fazla bilgi için Derleme varyantlarını yapılandırma bölümüne bakın.
APK oluşturma ve dağıtma
Uygulamanızı paketleyip Play Console'a yüklemenin en iyi yolu uygulama paketi oluşturmaktır. Ancak bir APK oluşturmak, hata ayıklama derlemesini hızlıca test etmek veya uygulamanızı dağıtılabilir bir yapı olarak başkalarıyla paylaşmak istediğinizde daha uygundur.
Hata ayıklama APK'sı oluşturma
Uygulamayı hemen test etmek ve hata ayıklamak için hata ayıklama APK'sı oluşturabilirsiniz.
Hata ayıklama APK'sı, SDK araçları tarafından sağlanan bir hata ayıklama anahtarıyla imzalanır ve adb
üzerinden hata ayıklama yapılmasına olanak tanır.
Hata ayıklama APK'sı oluşturmak için bir komut satırı açın ve proje dizininizin kök dizinine gidin. Hata ayıklama derlemesi başlatmak için assembleDebug
görevini çağırın:
gradlew assembleDebug
Bu işlem, project_name/module_name/build/outputs/apk/
adlı bir APK oluşturur.module_name-debug.apk
Dosya, hata ayıklama anahtarıyla imzalanmış ve zipalign
ile uyumlu hale getirilmiş olduğundan hemen bir cihaza yükleyebilirsiniz.
Alternatif olarak, APK'yı derleyip çalışan bir emülatöre veya bağlı bir cihaza hemen yüklemek için installDebug
yerine
gradlew installDebug'ü çağırın:
gradlew installDebug
Yukarıdaki görev adlarındaki "Hata ayıklama" kısmı, derleme varyantı adının büyük/küçük harf kullanımına dikkat edilerek yazılmış halidir. Bu nedenle, derlemek veya yüklemek istediğiniz derleme türü ya da varyantla değiştirilebilir. Örneğin, "demo" bir ürün çeşifiniz varsa assembleDemoDebug
göreviyle hata ayıklama sürümünü derleyebilirsiniz.
Her varyant için kullanılabilen tüm derleme ve yükleme görevlerini (kaldırma görevleri dahil) görmek üzere tasks
görevini çalıştırın.
Uygulamanızı emülatörde çalıştırma ve uygulamanızı cihazda çalıştırma ile ilgili bölümlere de göz atın.
Sürüm paketi veya APK oluşturma
Uygulamanızı yayınlamaya ve dağıtmaya hazır olduğunuzda, özel anahtarınızla imzalanmış bir sürüm paketi veya APK oluşturmanız gerekir. Daha fazla bilgi için uygulamanızı komut satırından imzalama ile ilgili bölüme gidin.
Uygulamanızı emülatöre dağıtma
Android Emulator'u kullanmak için Android Studio'yu kullanarak bir Android sanal cihazı (AVD) oluşturmanız gerekir.
AVD oluşturduktan sonra Android Emulator'u başlatın ve uygulamanızı aşağıdaki gibi yükleyin:
Komut satırında
android_sdk/tools/
bölümüne gidin ve AVD'nizi belirterek emülatörü başlatın:emulator -avd avd_name
AVD adından emin değilseniz
emulator -list-avds
komutunu yürütün.- Artık hata ayıklama APK'sı oluşturma ile ilgili bölümde bahsedilen Gradle yükleme görevlerinden birini veya
adb
aracını kullanarak uygulamanızı yükleyebilirsiniz.APK, geliştirici önizleme SDK'sı kullanılarak oluşturulduysa (
targetSdkVersion
sayı yerine bir harfse) test APK'sı yüklemek içininstall
komutuna-t
seçeneğini eklemeniz gerekir.adb install path/to/your_app.apk
Derlediğiniz tüm APK'lar
project_name/module_name/build/outputs/apk/
konumuna kaydedilir.
Daha fazla bilgi için Android Emulator'da uygulama çalıştırma başlıklı makaleyi inceleyin.
Uygulamanızı fiziksel bir cihaza dağıtma
Uygulamanızı bir cihazda çalıştırabilmek için cihazınızda USB hata ayıklama özelliğini etkinleştirmeniz gerekir. Bu seçeneği Ayarlar > Geliştirici seçenekleri bölümünde bulabilirsiniz.
Not: Android 4.2 ve sonraki sürümlerde Geliştirici seçenekleri varsayılan olarak gizlidir. Bu özelliği etkinleştirmek için Ayarlar > Telefon hakkında'ya gidin ve Derleme numarası'na yedi kez dokunun. Geliştirici seçenekleri'ni bulmak için önceki ekrana dönün.
Cihazınız kurulduktan ve USB üzerinden bağlandıktan sonra, hata ayıklama APK'sı oluşturma ile ilgili bölümde belirtilen Gradle yükleme görevlerini veya adb
aracını kullanarak uygulamanızı yükleyebilirsiniz:
adb -d install path/to/your_app.apk
Derlediğiniz tüm APK'lar project_name/module_name/build/outputs/apk/
konumuna kaydedilir.
Daha fazla bilgi için Donanım Cihazında Uygulama Çalıştırma başlıklı makaleyi inceleyin.
Uygulama paketi oluşturma
Android App Bundle'lar, uygulamanızın derlenmiş kod ve kaynaklarının tamamını içerir ancak APK oluşturma ve imzalama işlemini Google Play'e bırakır. APK'ların aksine, uygulama paketlerini doğrudan cihazlara dağıtamazsınız. Bu nedenle, bir APK'yı hızlıca test etmek veya başka biriyle paylaşmak istiyorsanız APK derlemeniz gerekir.
Uygulama paketi oluşturmanın en kolay yolu Android Studio'yu kullanmaktır. Ancak, komut satırından uygulama paketi oluşturmanız gerekiyorsa aşağıdaki bölümlerde açıklandığı gibi Gradle veya bundletool
'ü kullanarak bunu yapabilirsiniz.
Gradle ile uygulama paketi oluşturma
Uygulama paketini komut satırından oluşturmak istiyorsanız uygulamanızın temel modülünde bundleVariant
Gradle görevini çalıştırın.
Örneğin, aşağıdaki komut temel modülün hata ayıklama sürümü için bir uygulama paketi oluşturur:
./gradlew :base:bundleDebug
Play Console'a yüklemek için imzalanmış bir paket oluşturmak istiyorsanız öncelikle temel modülün build.gradle.kts
dosyasını uygulamanızın imzalama bilgileriyle yapılandırmanız gerekir. Daha fazla bilgi edinmek için Gradle'i uygulamanızı imzalamak için yapılandırma ile ilgili bölüme gidin. Ardından, örneğin uygulamanızın sürüm sürümünü derleyebilirsiniz. Gradle otomatik olarak bir uygulama paketi oluşturur ve build.gradle.kts
dosyasında sağladığınız imzalama bilgileriyle paketi imzalar.
Bunun yerine uygulama paketini ayrı bir adım olarak imzalamak istiyorsanız uygulama paketinizi komut satırından imzalamak için jarsigner
simgesini kullanabilirsiniz. Uygulama paketi oluşturma komutu:
jarsigner -keystore pathToKeystore app-release.aab keyAlias
bundletool'u kullanarak uygulama paketi oluşturma
bundletool
, Android Studio, Android Gradle eklentisi ve Google Play'in, uygulamanızın derlenmiş kodunu ve kaynaklarını uygulama paketlerine dönüştürmek ve bu paketlerden dağıtılabilir APK'lar oluşturmak için kullandığı bir komut satırı aracıdır.
Bu nedenle, bundletool
ile uygulama paketlerini test etmek ve Google Play'in APK oluşturma şeklini yerel olarak yeniden oluşturmak yararlı olsa da genellikle uygulama paketini oluşturmak için bundletool
'ı çağırmanız gerekmez. Bunun yerine, önceki bölümlerde açıklandığı gibi Android Studio veya Gradle görevlerini kullanmanız gerekir.
Ancak paket oluşturmak için Android Studio veya Gradle görevlerini kullanmak istemiyorsanız (ör. özel bir derleme araç zinciri kullanıyorsanız) önceden derlenmiş kod ve kaynaklardan uygulama paketi oluşturmak için komut satırından bundletool
kullanabilirsiniz. Henüz yapmadıysanız GitHub deposundan
bundletool
dosyasını indirin.
Bu bölümde, uygulamanızın derlenmiş kodunun ve kaynaklarının nasıl paketleneceği ve bunları Android App Bundle'a dönüştürmek için komut satırından bundletool
'ün nasıl kullanılacağı açıklanmaktadır.
Manifesti ve kaynakları proto biçiminde oluşturma
bundletool
, uygulama projenizle ilgili belirli bilgilerin (ör. uygulama manifesti ve kaynakları) Google'ın Protocol Buffer biçiminde (*.pb
dosya uzantısını kullanan ve "protobuf" olarak da bilinen) olmasını gerektirir. Protobuf'lar, yapılandırılmış verileri serileştirmek için dile ve platforma duyarlı, genişletilebilir bir mekanizma sağlar. XML'ye benzer ancak daha küçük, daha hızlı ve daha basittir.
AAPT2'yi indirme
Google Maven deposundaki AAPT2'nin en son sürümünü kullanarak uygulamanızın manifest dosyasını ve kaynak tablosunu protobuf biçiminde oluşturabilirsiniz.
AAPT2'yi Google'ın Maven deposundan indirmek için aşağıdaki adımları uygulayın:
- Depo dizininde com.android.tools.build > aapt2'ye gidin.
- AAPT2'nin en son sürümünün adını kopyalayın.
Kopyaladığınız sürüm adını aşağıdaki URL'ye ekleyin ve hedef işletim sisteminizi belirtin: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/aapt2-version/aapt2-aapt2-version-[windows | linux | osx].jar
Örneğin, Windows için 3.2.0-alpha18-4804415 sürümünü indirmek isterseniz şunu kullanırsınız: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/3.2.0-alpha18-4804415/aapt2-3.2.0-alpha18-4804415-windows.jar
Tarayıcınızda URL'ye gidin. AAPT2 kısa süre içinde indirilmeye başlar.
Az önce indirdiğiniz JAR dosyasının paketini açın.
Uygulamanızın kaynaklarını derleme ve bağlama
Aşağıdaki komutu kullanarak uygulamanızın kaynaklarını derlemek için AAPT2'yi kullanın:
aapt2 compile \ project_root/module_root/src/main/res/drawable/Image1.png \ project_root/module_root/src/main/res/drawable/Image2.png \ -o compiled_resources/
AAPT2'nin çeşitli derlenmiş kaynaklarınızı tek bir APK'ya bağladığı bağlantı aşamasında, aşağıda gösterildiği gibi --proto-format
işaretini ekleyerek AAPT2'ye uygulamanızın manifest dosyasını ve derlenmiş kaynaklarını protobuf biçimine dönüştürmesini söyleyin:
aapt2 link --proto-format -o output.apk \ -I android_sdk/platforms/android_version/android.jar \ --manifest project_root/module_root/src/main/AndroidManifest.xml \ -R compiled_resources/*.flat \ --auto-add-overlay
Ardından, çıkış APK'sından uygulamanızın AndroidManifest.xml
, resources.pb
ve diğer kaynak dosyaları gibi içerikleri ayıklayabilirsiniz. Bu dosyalar artık protobuf biçimindedir. Aşağıdaki bölümde açıklandığı gibi, uygulama paketinizi oluşturmak için bundletool
'ün gerektirdiği girişi hazırlarken bu dosyalara ihtiyacınız vardır.
Önceden derlenmiş kod ve kaynakları paketleme
Uygulamanız için bir uygulama paketi oluşturmak üzere bundletool
'ü kullanmadan önce, her biri belirli bir uygulama modülüne ait derlenmiş kod ve kaynakları içeren ZIP dosyaları sağlamanız gerekir. Her modülün ZIP dosyasının içeriği ve düzeni, Android App Bundle biçimine çok benzer.
Örneğin, uygulamanızın temel modülü için bir base.zip
dosyası oluşturmalı ve içeriğini aşağıdaki gibi düzenlemelisiniz:
Dosya veya dizin | Açıklama |
---|---|
manifest/AndroidManifest.xml
|
Modülün protobuf biçimindeki manifest dosyası. |
dex/...
|
Uygulamanızın derlenmiş DEX dosyalarından en az birini içeren bir dizin. Bu dosyalar şu şekilde adlandırılmalıdır: classes.dex ,
classes2.dex , classes3.dex vb.
|
res/...
|
Tüm cihaz yapılandırmaları için modülün kaynaklarını protobuf biçiminde içerir. Alt dizinler ve dosyalar, tipik bir APK'ya benzer şekilde düzenlenmelidir. |
root/... , assets/... ve lib/...
|
Bu dizinler, Android uygulama paketi biçimi ile ilgili bölümde açıklanan dizinlerle aynıdır. |
resources.pb
|
Uygulamanızın protobuf biçimindeki kaynak tablosu. |
Uygulamanızın her modülü için ZIP dosyasını hazırladıktan sonra, aşağıdaki bölümde açıklandığı gibi uygulama paketinizi oluşturmak için dosyaları bundletool
'e iletebilirsiniz.
bundletool'u kullanarak uygulama paketinizi derleme
Uygulama paketinizi oluşturmak için aşağıdaki gibi bundletool build-bundle
komutunu kullanırsınız:
bundletool build-bundle --modules=base.zip --output=mybundle.aab
Aşağıdaki tabloda build-bundle
komutunun işaretleri daha ayrıntılı olarak açıklanmıştır:
İşaretle | Açıklama |
---|---|
--modules=path-to-base.zip, path-to-module2.zip,path-to-module3.zip
|
bundletool 'nin uygulama paketinizi oluşturmak için kullanacağı modül ZIP dosyalarının listesini belirtir.
|
--output=path-to-output.aab
|
Çıkış *.aab dosyasının yolunu ve dosya adını belirtir.
|
--config=path-to-BundleConfig.json
|
Derleme sürecini özelleştirmek için kullanabileceğiniz isteğe bağlı bir yapılandırma dosyasının yolunu belirtir. Daha fazla bilgi edinmek için aşağı akış APK oluşturma işlemini özelleştirme ile ilgili bölüme bakın. |
--metadata-file=target-bundle-path:local-file-path
|
bundletool 'ye, uygulama paketinize isteğe bağlı bir meta veri dosyası paketlemesini söyler. Bu dosyayı, ProGuard eşlemeleri veya uygulamanızın DEX dosyalarının tam listesi gibi, araç zincirinizdeki veya uygulama mağazasındaki diğer adımlar için yararlı olabilecek verileri dahil etmek üzere kullanabilirsiniz.
target-bundle-path, meta veri dosyasının paketlenmesini istediğiniz uygulama paketinin köküne göre bir yol belirtir ve local-file-path, yerel meta veri dosyasının yolunu belirtir. |
Aşağı akış APK oluşturma işlemini özelleştirme
Uygulama paketleri, Google Play gibi uygulama mağazalarının paketten APK oluştururken ihtiyaç duyduğu meta verileri sağlayan bir BundleConfig.pb
dosyası içerir.
bundletool
bu dosyayı sizin için oluştursa da meta verilerin bazı yönlerini bir BundleConfig.json
dosyasında yapılandırabilir ve bundletool build-bundle
komutuna iletebilirsiniz. bundletool
daha sonra bu dosyayı dönüştürüp her uygulama paketine dahil edilen protobuf sürümüyle birleştirir.
Örneğin, hangi yapılandırma APK'sı kategorilerinin etkinleştirileceğini veya devre dışı bırakılacağını kontrol edebilirsiniz. Aşağıdaki BundleConfig.json
dosyası örneğinde, her biri farklı bir dili hedefleyen yapılandırma APK'ları devre dışı bırakılmaktadır (yani tüm dillerin kaynakları, ilgili temel veya özellik APK'larına dahil edilmiştir):
{
"optimizations": {
"splitsConfig": {
"splitDimension": [{
"value": "LANGUAGE",
"negate": true
}]
}
}
}
BundleConfig.json
dosyanızda, APK'ları paketlerken hangi dosya türlerinin sıkıştırılmadan bırakılacağını
glob kalıplarını kullanarak da belirtebilirsiniz.
{
"compression": {
"uncompressedGlob": ["res/raw/**", "assets/**.uncompressed"]
}
}
bundletool
'ün varsayılan olarak uygulamanızın yerel kitaplıklarını (Android 6.0 veya sonraki sürümlerde) ve kaynak tablosunu (resources.arsc
) sıkıştırmadığını unutmayın. BundleConfig.json
dosyanızda neleri yapılandırabileceğinizin tam açıklaması için Proto3 söz dizimi kullanılarak yazılmış bundletool
config.proto
dosyasını inceleyin.
Uygulamanızı bir uygulama paketinden dağıtma
Bir uygulama paketi oluşturup imzaladıysanız APK oluşturmak ve bunları bir cihaza dağıtmak için bundletool
'u kullanın.
Uygulamanızı komut satırından imzalama
Uygulamanızı imzalamak için Android Studio'ya ihtiyacınız yoktur. APK'lar için apksigner
veya uygulama paketleri için jarsigner
'ü kullanarak uygulamanızı komut satırından imzalayabilir ya da Gradle'i derleme sırasında sizin adınıza imzalaması için yapılandırabilirsiniz. Her iki durumda da, önce aşağıda gösterildiği gibi keytool
kullanarak bir özel anahtar oluşturmanız gerekir:
keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias
Yukarıdaki örnekte, anahtar deposu ve anahtar için şifreler ve anahtarınızın "Özel Ad" alanları için sizden istenir. Ardından anahtar deposunu my-release-key.jks
adlı bir dosya olarak oluşturur ve mevcut dizine kaydeder (istediğiniz yere taşıyabilirsiniz). Anahtar mağazası,10.000 gün boyunca geçerli olan tek bir anahtar içerir.
Artık APK'nızı veya uygulama paketinizi manuel olarak imzalayabilir ya da aşağıdaki bölümlerde açıklandığı şekilde Gradle'i derleme işlemi sırasında uygulamanızı imzalayacak şekilde yapılandırabilirsiniz.
Uygulamanızı komut satırından manuel olarak imzalama
Bir uygulama paketini komut satırından imzalamak istiyorsanız jarsigner
'yi kullanabilirsiniz.
Bunun yerine bir APK'yı imzalamak istiyorsanız aşağıda açıklandığı gibi zipalign
ve apksigner
öğelerini kullanmanız gerekir.
- Bir komut satırı açın (Android Studio'da Görünüm > Araç Pencereleri > Terminal'i seçin) ve imzalanmamış APK'nızın bulunduğu dizine gidin.
-
İmzasız APK'yı
zipalign
kullanarak hizalayın:zipalign -v -p 4 my-app-unsigned.apk my-app-unsigned-aligned.apk
zipalign
, sıkıştırılmamış tüm verilerin dosyanın başına göre belirli bir bayt hizalamasıyla başlamasını sağlar. Bu, uygulama tarafından tüketilen RAM miktarını azaltabilir. -
apksigner
kullanarak APK'nızı özel anahtarınızla imzalayın:apksigner sign --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk
Bu örnekte, tek bir KeyStore dosyasında depolanan özel bir anahtar ve sertifikayla imzalandıktan sonra imzalanmış APK
my-app-release.apk
adresinde çıktı olarak verilir:my-release-key.jks
.apksigner
aracı, ayrı özel anahtar ve sertifika dosyaları kullanarak APK dosyasını imzalama ve birden fazla imzalayıcı kullanarak APK imzalama da dahil olmak üzere diğer imzalama seçeneklerini destekler. Daha fazla bilgi içinapksigner
referansına bakın.Not:
apksigner
aracını kullanmak için Android SDK Derleme Araçlarının 24.0.3 veya daha yeni bir sürümünün yüklü olması gerekir. Bu paketi SDK Yöneticisi'ni kullanarak güncelleyebilirsiniz. -
APK'nızın imzalandığını doğrulayın:
apksigner verify my-app-release.apk
Uygulamanızı imzalaması için Gradle'ı yapılandırma
Modül düzeyindeki build.gradle.kts
dosyasını açın ve storeFile
, storePassword
, keyAlias
ve keyPassword
girişlerini içeren signingConfigs {}
bloğunu ekleyin. Ardından bu nesneyi derleme türünüzün signingConfig
mülküne iletin. Örnek:
Kotlin
android { ... defaultConfig { ... } signingConfigs { create("release") { // You need to specify either an absolute path or include the // keystore file in the same directory as the build.gradle file. storeFile = file("my-release-key.jks") storePassword = "password" keyAlias = "my-alias" keyPassword = "password" } } buildTypes { getByName("release") { signingConfig = signingConfigs.getByName("release") ... } } }
Groovy
android { ... defaultConfig { ... } signingConfigs { release { // You need to specify either an absolute path or include the // keystore file in the same directory as the build.gradle file. storeFile file("my-release-key.jks") storePassword "password" keyAlias "my-alias" keyPassword "password" } } buildTypes { release { signingConfig signingConfigs.release ... } } }
Artık bir Gradle görevini çağırarak uygulamanızı derlediğinizde Gradle, uygulamanızı sizin için imzalar (ve zipalign'i çalıştırır).
Ayrıca, sürüm derlemesini imzalama anahtarınızla yapılandırdığınız için "yükleme" görevi bu derleme türü için kullanılabilir. Böylece, installRelease
görevini kullanarak sürüm APK'sını derleyebilir, uyumlu hale getirebilir, imzalayabilir ve bir emülatöre veya cihaza yükleyebilirsiniz.
Özel anahtarınızla imzalanan bir uygulama dağıtıma hazırdır ancak önce uygulamanızı yayınlama hakkında daha fazla bilgi edinip Google Play lansman yapılacaklar listesini incelemeniz gerekir.