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 (gradlew.bat) için toplu dosya ve Linux ile Mac için kabuk komut dosyası (gradlew.sh) olarak kullanılabilir. Bu dosyaya, Android Studio ile oluşturduğunuz her projenin kök kaynağından erişilebilir.

Sarmalayıcıyla bir görev çalıştırmak için bir Terminal penceresinden şu komutlardan birini kullanın (Android Studio'dan Görünüm > Araç Pencereleri > Terminal'i seçin):

  • Windows'da:
    gradlew task-name
  • Mac veya Linux'ta:
    ./gradlew task-name

Projenizde kullanılabilen tüm derleme görevlerinin listesini görmek için tasks komutunu yürütün:

gradlew tasks

Bu sayfanın geri kalanında, uygulamanızı Gradle sarmalayıcıyla oluşturmak ve çalıştırmak için gereken temel bilgiler açıklanmaktadır. Android derlemenizi nasıl ayarlayacağınız hakkında daha fazla bilgi için Derlemenizi yapılandırma bölümüne bakın.

Komut satırı araçları yerine Android Studio araçlarını kullanmayı tercih ederseniz Uygulamanızı oluşturma ve çalıştırma konusuna bakın.

Derleme türleri hakkında

Varsayılan olarak her Android uygulaması için iki derleme türü vardır: Biri uygulamanızdaki hataları ayıklamak için (hata ayıklama derlemesi), diğeri de uygulamanızı kullanıcılara yayınlamak için sürüm derlemesi. Uygulamanızı bir cihaza dağıtabilmeniz için her derlemeden elde edilen çıkışın 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 bu derlemeyi Google Play Store'da yayınlayamazsınız) ve sürüm derlemesinin kendi özel anahtarınızla imzalanması gerekir.

Uygulamanızı yayınlanmak üzere geliştirmek istiyorsanız uygun imzalama anahtarıyla uygulamanızı imzalamanız da önemlidir. Ancak yeni başlıyorsanız 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 ifadesini ekleyerek bu türü hata ayıklama derlemesi olarak imzalanacak şekilde 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şturmak olsa da APK oluşturmak, hata ayıklama derlemesini hızlı bir şekilde test etmek veya uygulamanızı başkalarıyla dağıtılabilir bir yapı olarak 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ı derleyebilirsiniz. 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ıklamaya 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/ içinde module_name-debug.apk adında bir APK oluşturur. Dosya zaten hata ayıklama anahtarıyla imzalanmış ve zipalign ile uyumlu. Böylece dosyayı bir cihaza hemen yükleyebilirsiniz.

Alternatif olarak, APK'yı oluşturup çalışan bir emülatöre veya bağlı cihaza hemen yüklemek için installDebug yöntemini çağırın:

gradlew installDebug

Yukarıdaki görev adlarında bulunan "Hata Ayıklama" bölümü, derleme varyantı adının yalnızca büyük/küçük harf kullanımıdır. Bu nedenle, derlemek veya yüklemek istediğiniz derleme türü ya da varyantla değiştirilebilir. Örneğin, "demo" ürün çeşidiniz varsa assembleDemoDebug göreviyle hata ayıklama sürümünü oluşturabilirsiniz.

Her bir varyantta mevcut tüm derleme ve yükleme görevlerini (yükleme kaldırma görevleri dahil) görmek için tasks görevini çalıştırın.

Ayrıca uygulamanızı emülatörde çalıştırma ve uygulamanızı bir cihazda çalıştırma bölümlerine 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 bölümüne gidin.

Uygulamanızı emülatöre dağıtma

Android Emülatör'ü kullanmak için Android Studio'yu kullanarak Android Sanal Cihazı (AVD) oluşturmanız gerekir.

Ortalama görüntüleme süresi dolduktan sonra Android Emulator'ı başlatın ve uygulamanızı aşağıdaki gibi yükleyin:

  1. Komut satırında android_sdk/tools/ adresine 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 çalıştırın.

  2. Artık hata ayıklama APK'sı oluşturma bölümünde 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şturulmuşsa (targetSdkVersion bir sayı yerine harfse) test APK'sı yüklemek için install komutuyla birlikte -t seçeneğini eklemeniz gerekir.

    adb install path/to/your_app.apk
    

    Oluşturduğunuz tüm APK'lar project_name/module_name/build/outputs/apk/ dosyasına kaydedilir.

Daha fazla bilgi için Android Emülatör'de Uygulama Çalıştırma başlıklı makaleyi inceleyin.

Uygulamanızı bir fiziksel cihaza dağıtma

Uygulamanızı bir cihazda çalıştırmadan önce cihazınızda USB hata ayıklama'yı etkinleştirmeniz gerekir. Bu seçeneği Ayarlar > Geliştirici seçenekleri altında bulabilirsiniz.

Not: Android 4.2 ve daha yeni sürümlerde Geliştirici seçenekleri varsayılan olarak gizlidir. Bu özelliği kullanılabilir hale getirmek için Ayarlar > Telefon hakkında'ya gidip Derleme numarası'na yedi kez dokunun. Geliştirici seçenekleri'ni bulmak için önceki ekrana dönün.

Cihazınız ayarlanıp USB ile bağlandıktan sonra, hata ayıklama APK'sı oluşturma bölümünde bahsedilen Gradle yükleme görevlerini veya adb aracını kullanarak uygulamanızı yükleyebilirsiniz:

adb -d install path/to/your_app.apk

Oluşturduğunuz tüm APK'lar project_name/module_name/build/outputs/apk/ dosyasına kaydedilir.

Daha fazla bilgi için Uygulamaları Donanım Cihazında Çalıştırma bölümüne göz atın.

Uygulama paketi oluşturma

Android App Bundle, uygulamanızın tüm derlenmiş kodlarını ve kaynaklarını içerir ancak APK oluşturma ve Google Play'de imzalamayı erteler. APK'ların aksine, uygulama paketini doğrudan bir cihaza dağıtamazsınız. Dolayısıyla, bir APK'yı hızlı bir şekilde test etmek veya başka biriyle paylaşmak isterseniz bunun yerine bir APK oluşturmanız gerekir.

Uygulama paketi oluşturmanın en kolay yolu Android Studio'yu kullanmaktır. Ancak komut satırından bir uygulama paketi oluşturmanız gerekiyorsa bunu, aşağıdaki bölümlerde açıklandığı gibi Gradle veya bundletool kullanarak yapabilirsiniz.

Gradle ile uygulama paketi oluşturma

Komut satırından uygulama paketi oluşturmayı tercih ederseniz 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 üzere imzalı bir paket oluşturmak istiyorsanız önce 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'ı uygulamanızı imzalamak üzere yapılandırma konulu bölüme gidin. Ardından, örneğin, uygulamanızın sürüm sürümünü oluşturabilirsiniz. Ardından, Gradle otomatik olarak bir uygulama paketi oluşturur ve build.gradle.kts dosyasında sağladığınız imzalama bilgileriyle bunu imzalar.

Bunun yerine, uygulama paketini ayrı bir adım olarak imzalamak isterseniz jarsigner kullanarak uygulama paketinizi komut satırından imzalayabilirsiniz. Uygulama paketi oluşturma komutu şudur:

jarsigner -keystore pathToKeystore app-release.aab keyAlias

Bundletool 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, uygulama paketlerini bundletool ile test etmek ve Google Play'in APK'ları oluşturma biçimini yerel olarak yeniden oluşturmak yararlı olsa da genellikle uygulama paketini oluşturmak için bundletool yöntemini çağırmanız gerekmez. Bunun yerine, önceki bölümlerde açıklandığı gibi Android Studio veya Gradle görevlerini kullanmanız gerekir.

Bununla birlikte, paket oluşturmak için Android Studio veya Gradle görevlerini kullanmak istemiyorsanız (örneğin, özel bir derleme araç zinciri kullanıyorsanız) önceden derlenmiş kod ve kaynaklardan uygulama paketi oluşturmak için komut satırında bundletool kullanabilirsiniz. Henüz yapmadıysanız GitHub deposundan bundletool dosyasını indirin.

Bu bölümde, uygulamanızın derlenmiş kod ve kaynaklarını nasıl paketleyeceğiniz ve bunları bir Android App Bundle'a dönüştürmek için komut satırından bundletool hizmetinin nasıl kullanılacağı açıklanmaktadır.

Manifest'i ve kaynakları proto biçiminde oluştur

bundletool, uygulama projenizle ilgili belirli bilgilerin (uygulamanın manifesti ve kaynakları gibi) Google'ın Protokol Arabelleği biçiminde olmasını gerektirir. Bu biçim, "protobuf" olarak da bilinir ve *.pb dosya uzantısını kullanır. Protobuf'lar, yapılandırılmış verileri serileştirmek için dilden bağımsız, platformdan bağımsız ve genişletilebilir bir mekanizma sunar. XML'e benzer ancak daha küçük, daha hızlı ve daha basittir.

AAPT2'yi indir

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.

Google'ın Maven deposundan AAPT2'yi indirmek için aşağıdaki adımları uygulayın:

  1. Depo dizininde com.android.tools.build > aapt2 bölümüne gidin.
  2. AAPT2'nin en son sürümünün adını kopyalayın.
  3. Kopyaladığınız sürüm adını şu URL'ye ekleyip 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 için şu bağlantıyı kullanmanız gerekir: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/3.2.0-alpha18-4804415/aapt2-3.2.54-alpha18-jar-alpha18

  4. Bir tarayıcıda URL'ye gidin. AAPT2 kısa süre içinde indirilmeye başlayacaktır.

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

Aşağıdaki komutla 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 derlenen çeşitli kaynaklarınızı tek bir APK'ya bağladığı bağlantı aşamasında, AAPT2'ye aşağıda gösterildiği gibi --proto-format işaretini ekleyerek uygulamanızın manifestini ve derlenmiş kaynaklarını protobuf biçimine dönüştürmesi için talimat verin:

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

Daha sonra, çıkış APK'sından uygulamanızın AndroidManifest.xml, resources.pb ve diğer kaynak dosyaları gibi içerikleri artık protobuf biçiminde çıkarabilirsiniz. Aşağıdaki bölümde açıklandığı gibi, bundletool tarafından uygulama paketinizi oluşturmanız için gereken girişi hazırlarken bu dosyalara ihtiyacınız olacaktır.

Önceden derlenmiş kod ve kaynakları paketleyin

Uygulamanız için uygulama paketi oluşturmak üzere bundletool uygulamasını kullanmadan önce, önce belirli bir uygulama modülüne ait derlenmiş kod ve kaynakları içeren ZIP dosyalarını 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şturup içeriğini aşağıdaki gibi düzenlemeniz gerekir:

Dosya veya dizin Açıklama
manifest/AndroidManifest.xml Modülün protobuf biçimindeki manifesti.
dex/... Uygulamanızın derlenmiş DEX dosyalarından birini veya birkaçını içeren 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 protobuf biçiminde modül kaynaklarını içerir. Alt dizinler ve dosyalar, tipik bir APK'nınkine benzer şekilde düzenlenmelidir.
root/..., assets/... ve lib/... Bu dizinler, Android App Bundle biçimi ile ilgili bölümde açıklananlarla aynıdır.
resources.pb Uygulamanızın protobuf biçimindeki kaynak tablosu.

Uygulamanızın her bir modülü için ZIP dosyasını hazırladıktan sonra, uygulama paketinizi oluşturmak için aşağıdaki bölümde açıklandığı gibi bunları bundletool adlı iş ortağına iletebilirsiniz.

Bundletool kullanarak uygulama paketinizi oluşturma

Uygulama paketinizi oluşturmak için aşağıda gösterildiği gibi bundletool build-bundle komutunu kullanırsınız:

bundletool build-bundle --modules=base.zip --output=mybundle.aab

Aşağıdaki tabloda build-bundle komutu için işaretler daha ayrıntılı olarak açıklanmaktadır:

İşaretle Açıklama
--modules=path-to-base.zip, path-to-module2.zip,path-to-module3.zip bundletool tarafından uygulama paketinizi oluşturmak için kullanması gereken 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 işlemini ö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şumunu özelleştirme hakkındaki bölüme bakın.
--metadata-file=target-bundle-path:local-file-path bundletool komutuna uygulama paketinizin içinde isteğe bağlı meta veri dosyası paketlemesi talimatı verilir. 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 eklemek için bu dosyayı kullanabilirsiniz.

target-bundle-path, meta veri dosyasının paketlenmesini istediğiniz uygulama paketinin kök dizinine göre bir yol, local-file-path ise yerel meta veri dosyasının yolunu belirtir.

Aşağı akış APK oluşturmayı özelleştirin

Uygulama paketleri, paketten APK oluştururken Google Play gibi uygulama depolarının gerektirdiği meta verileri sağlayan bir BundleConfig.pb dosyası içerir. bundletool bu dosyayı sizin için oluştursa da BundleConfig.json dosyasında meta verilerin bazı yönlerini yapılandırabilir ve dosyayı bundletool build-bundle komutuna aktarabilirsiniz. bundletool daha sonra bu dosyayı dönüştürür ve her uygulama paketinde yer alan protobuf sürümüyle birleştirir.

Örneğin, hangi yapılandırma APK'sı kategorilerini etkinleştireceğinizi veya devre dışı bırakacağınızı 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ılmıştı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ı glob kalıpları kullanarak paketlerken hangi dosya türlerinin sıkıştırılmadan bırakılacağını da aşağıdaki şekilde belirtebilirsiniz:

{
  "compression": {
    "uncompressedGlob": ["res/raw/**", "assets/**.uncompressed"]
  }
}

Varsayılan olarak bundletool, uygulamanızın yerel kitaplıkları (Android 6.0 veya sonraki sürümlerde) ve kaynak tablosunu (resources.arsc) sıkıştırmaz. BundleConfig.json dosyanızda yapılandırabileceklerinizin tam açıklaması için Proto3 söz dizimi kullanılarak yazılan bundletool config.proto dosyasını inceleyin.

Uygulamanızı bir uygulama paketinden dağıtma

Bir uygulama paketi oluşturup imzaladıysanız APK'lar oluşturmak ve bunları bir cihaza dağıtmak için bundletool kullanın.

Uygulamanızı komut satırından imzalama

Uygulamanızı imzalamak için Android Studio'ya ihtiyacınız yoktur. Uygulamanızı komut satırından, APK'lar için apksigner veya uygulama paketleri için jarsigner kullanarak imzalayabilir ya da Gradle'ı derleme sırasında sizin için imzalayacak şekilde yapılandırabilirsiniz. Her iki durumda da önce aşağıda gösterildiği gibi keytool kullanarak ö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, anahtarınız için de "Ayırt Edici Ad" alanları için şifreler girmeniz istenir. Daha sonra anahtar deposunu my-release-key.jks adlı bir dosya olarak oluşturup geçerli dizine kaydeder (İstediğiniz yere taşıyabilirsiniz). Anahtar deposu,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ığı gibi Gradle'ı, 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 kullanabilirsiniz. Bunun yerine bir APK'yı imzalamak isterseniz aşağıda açıklandığı gibi zipalign ve apksigner kullanmanız gerekir.

  1. Bir komut satırı açın (Android Studio'dan Görünüm > Araç Pencereleri > Terminal'i seçin ve imzalanmamış APK'nızın bulunduğu dizine gidin.
  2. İmzalanmamış 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şlangıcına göre belirli bir bayt hizalamasıyla başlamasını sağlar. Bu, uygulamanın tükettiği RAM miktarını azaltabilir.

  3. APK'nızı apksigner kullanarak özel anahtarınızla imzalayın:

    apksigner sign --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk
    

    Bu örnek, imzalı APK'yı tek bir KeyStore dosyasında depolanan bir özel anahtar ve sertifika ile imzaladıktan sonra my-app-release.apk konumunda verir: my-release-key.jks.

    apksigner aracı, ayrı özel anahtar ve sertifika dosyaları kullanarak APK dosyası imzalama ve birden fazla imzalayan kullanarak APK imzalama gibi diğer imzalama seçeneklerini destekler. Ayrıntılı bilgi için apksigner referansını inceleyin.

    Not: apksigner aracını kullanmak için Android SDK Derleme Araçlarının 24.0.3 düzeltmesini veya sonraki bir sürümünü yüklemiş olmanız gerekir. SDK Yöneticisi'ni kullanarak bu paketi güncelleyebilirsiniz.

  4. APK'nızın imzalı olduğunu doğrulayın:

    apksigner verify my-app-release.apk
    

Gradle'ı uygulamanızı imzalayacak şekilde yapılandırın

Modül düzeyindeki build.gradle.kts dosyasını açın ve storeFile, storePassword, keyAlias ve keyPassword girişleriyle signingConfigs {} blokunu ekleyin, ardından bu nesneyi derleme türünüzdeki signingConfig mülküne iletin. Örneğin:

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")
            ...
        }
    }
}

Modern

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 sizin için uygulamanızı imzalar (ve zipalign'ı çalıştırır).

Ayrıca, sürüm derlemesini imzalama anahtarınızla yapılandırdığınızdan, "yükleme" görevi bu derleme türü için kullanılabilir. Böylece installRelease göreviyle sürüm APK'sını bir emülatöre veya cihaza oluşturabilir, uyumlu hale getirebilir, imzalayabilir ve yükleyebilirsiniz.

Özel anahtarınızla imzalanmış bir uygulama dağıtıma hazırdır, ancak öncelikle uygulamanızı yayınlama hakkında daha fazla bilgi edinmeniz ve Google Play lansman listesini incelemeniz gerekir.