Uygulamanızı komut satırından oluşturma

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 taskskomutunu 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:

  1. 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.

  2. 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çin install 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 bundletoolkullanabilirsiniz. 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:

  1. Depo dizininde com.android.tools.build > aapt2'ye gidin.
  2. AAPT2'nin en son sürümünün adını kopyalayın.
  3. 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

  4. Tarayıcınızda URL'ye gidin. AAPT2 kısa süre içinde indirilmeye başlar.

  5. Az önce indirdiğiniz JAR dosyasının paketini açın.

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.

  1. 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.
  2. İ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.

  3. 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çin apksigner 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.

  4. 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.