Android Kuralları

Sorun bildirin.3 2.02}332}12/}22}18}

Kurallar

android_binary

Kural kaynağını göster
android_binary(name, deps, srcs, assets, assets_dir, compatible_with, crunch_png, custom_package, debug_key, debug_signing_keys, debug_signing_lineage_file, densities, deprecation, dex_shards, dexopts, distribs, enable_data_binding, exec_compatible_with, exec_properties, features, incremental_dexing, instruments, javacopts, key_rotation_min_sdk, licenses, main_dex_list, main_dex_list_opts, main_dex_proguard_specs, manifest, manifest_values, multidex, nocompress_extensions, package_id, plugins, proguard_apply_dictionary, proguard_apply_mapping, proguard_generate_mapping, proguard_specs, resource_configuration_filters, resource_files, restricted_to, shrink_resources, tags, target_compatible_with, testonly, visibility)

Android uygulama paketi dosyaları (.apk) oluşturur.

Dolaylı çıkış hedefleri

  • name.apk: Hata ayıklama anahtarlarıyla imzalanmış ve zipalign uygulanmış bir Android uygulama paketi dosyası. Bu dosya, uygulamanızı geliştirmek ve hata ayıklamak için kullanılabilir. Hata ayıklama anahtarlarıyla imzalandığında uygulamanızı bırakamazsınız.
  • name_unsigned.apk: Herkese açık olarak yayınlanmadan önce sürüm anahtarlarıyla imzalanabilen, yukarıdaki dosyanın imzalanmamış bir sürümüdür.
  • name_deploy.jar: Bu hedefin geçişli kapanışını içeren bir Java arşivi.

    Dağıtım deposu, bu hedefin çalışma zamanı sınıf yolunu baştan sona arayan bir classloader'ın bulabileceği tüm sınıfları içerir.

  • name_proguard.jar: name_deploy.jar üzerinde ProGuard'ı çalıştırmanın sonucunu içeren bir Java arşivi. Bu çıkış yalnızca proguard_specs özelliği belirtilirse üretilir.
  • name_proguard.map: name_deploy.jar üzerinde ProGuard'ın çalıştırılmasıyla elde edilen bir eşleme dosyası sonucu. Bu çıkış yalnızca proguard_specs özelliği belirtilirse ve proguard_generate_mapping veya shrink_resources ayarlanmışsa üretilir.

Örnekler

Android kuralı örneklerini, Bazel kaynak ağacının examples/android dizininde bulabilirsiniz.

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan []

İkili hedefe bağlanacak diğer kitaplıkların listesi. İzin verilen kitaplık türleri şunlardır: android_library, android kısıtlamasıyla java_library ve Android hedef platformu için cc_library sarmalama veya .so yerel kitaplıklar.
srcs

Etiket listesi; varsayılan []

Hedefi oluşturmak için işlenen kaynak dosyaların listesi.

.java türündeki srcs dosyaları derlendi. Okunabilirlik açısından, oluşturulmuş bir .java kaynak dosyasının adının srcs içine yerleştirilmesi uygun değildir. Bunun yerine, bağımlı kural adını aşağıda açıklandığı gibi srcs içine yerleştirin.

.srcjar türündeki srcs dosyaları paketten çıkarılır ve derlenir. (Bu, bir genrule veya derleme uzantısına sahip .java dosyaları kümesi oluşturmanız gerekirse yararlı olur.)

assets

Etiket listesi; varsayılan []

Paketlenecek öğelerin listesi. Bu, genellikle assets dizini altındaki tüm dosyalar için glob değerindedir. Ayrıca, tüm bu dosyalar ilgili pakette assets_dir dizini altında olduğu sürece, diğer kurallara (dosya oluşturan tüm kurallar) başvurabilir ya da diğer paketlerdeki dosyaları dışa aktarabilirsiniz.
assets_dir

Dize; varsayılan değer ""

assets içindeki dosyaların yolunu belirten dize. assets ve assets_dir çifti, paketlenmiş öğeleri tanımlar ve her iki özellik de sağlanmalıdır veya hiçbiri sağlanmamalıdır.
crunch_png

Boole; varsayılan değer True

PNG uygulaması yapın (veya kullanmayın). Bu, her zaman yapılan dokuz yama işlemeden bağımsızdır. Bu, aapt2'de düzeltilmiş bir aapt hatası için desteği sonlandırılmış geçici çözümdür.
custom_package

Dize; varsayılan değer ""

Java kaynaklarının oluşturulacağı Java paketi. Varsayılan olarak paket, kuralı içeren BUILD dosyasının bulunduğu dizinden belirlenir. Farklı bir paket belirtebilirsiniz ancak bu yöntem, yalnızca çalışma zamanında algılanacak diğer kitaplıklarla sınıf yolu çakışmalarına neden olabileceğinden kesinlikle önerilmez.
debug_key

Etiket; varsayılan değer "@bazel_tools//tools/android:debug_keystore"

Hata ayıklama apk'sini imzalamak için kullanılacak hata ayıklama anahtar deposunu içeren dosya. Genellikle varsayılan anahtar dışında bir anahtar kullanmak istemezsiniz. Bu nedenle bu özellik atlanmalıdır.

UYARI: Üretim anahtarlarınızı kullanmayın, bunlar sıkı bir şekilde korunmalı ve kaynak ağacınızda tutulmamalıdır.

debug_signing_keys

Etiket listesi; varsayılan []

Dosya listesi, hata ayıklama apk'sini imzalamak için kullanılacak hata ayıklama anahtar depoları. Genellikle varsayılan anahtar dışında anahtar kullanmak istemezsiniz. Bu nedenle bu özellik atlanmalıdır.

UYARI: Üretim anahtarlarınızı kullanmayın, bunlar sıkı bir şekilde korunmalı ve kaynak ağacınızda tutulmamalıdır.

debug_signing_lineage_file

Etiket; varsayılan değer None

error_signing_keys için imzalama sırasını içeren dosya. Genellikle varsayılan anahtar dışında anahtar kullanmak istemezsiniz. Bu nedenle bu özellik atlanmalıdır.

UYARI: Üretim anahtarlarınızı kullanmayın, bunlar sıkı bir şekilde korunmalı ve kaynak ağacınızda tutulmamalıdır.

densities

Dize listesi; varsayılan değer: []

Apk oluşturulurken filtrelenecek yoğunluklar. Bu işlem, APK boyutunu azaltmak için belirtilen ekran yoğunluklarına sahip bir cihaz tarafından yüklenmeyecek olan kafes çekilebilir kaynakları ortadan kaldırır. İlgili uyumlu ekranlar bölümü de üst küme girişi içermiyorsa manifeste eklenir.
dex_shards

Tam sayı; varsayılan değer 1

Ayrıştırılması gereken kırık sayısı. Bu da uygulama yükleme ve başlatma süresi pahasına, dexing işlemini çok daha hızlı hale getirir. İkili program ne kadar büyükse o kadar fazla parça kullanılmalıdır. 25, deneme yapmaya başlamak için iyi bir değerdir.

Her kırığın son uygulamada en az bir dex olacağını unutmayın. Bu nedenle, yayın ikili programları için bu değerin 1'den yüksek bir değere ayarlanması önerilmez.

dexopts

Dize listesi; varsayılan değer: []

sınıflar.dex oluşturulurken dx aracı için ek komut satırı işaretleri. "Değişken oluşturma" değişikliğine ve Bourne kabuk belirtkelemeye tabidir.
enable_data_binding

Boole; varsayılan değer False

Doğru değerine ayarlanırsa bu kural, resource_files özelliği aracılığıyla eklenen düzen kaynaklarındaki veri bağlama ifadelerini işler. Bu ayar kullanılmadığında, veri bağlama ifadeleri derleme hataları oluşturur.

Veri bağlama ile Android uygulaması oluşturmak için aşağıdakileri de yapmanız gerekir:

  1. Geçişli olarak buna bağlı tüm Android kuralları için bu özelliği ayarlayın. Bunun nedeni, bağımlıların kaynak birleştirme yoluyla kuralın veri bağlama ifadelerini devralmasıdır. Dolayısıyla, bu ifadeleri ayrıştırmak için veri bağlama ile derlemeleri de gerekir.
  2. Bu özelliği ayarlayan tüm hedeflere, veri bağlama çalışma zamanı kitaplığı için bir deps = girişi ekleyin. Bu kitaplığın konumu, depo kurulumunuza bağlıdır.
incremental_dexing

Tam sayı; yapılandırılmamış; varsayılan değer -1

Varsayılanları ve --incremental_dexing işaretini geçersiz kılarak, hedefi artımlı dexing ile veya kademeli olarak oluşturulmaya zorlayın.
instruments

Etiket; varsayılan değer None

android_binary aracı hedefi.

Bu özellik ayarlanırsa bu android_binary, araç testleri için bir test uygulaması olarak değerlendirilir. Daha sonra bir android_instrumentation_test hedefi, bu hedefi test_app özelliğinde belirtebilir.

javacopts

Dize listesi; varsayılan değer: []

Bu hedef için ek derleyici seçenekleri. "Değişken oluşturma" değişikliğine ve Bourne kabuk belirtkelemeye tabidir.

Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'a iletilir.

key_rotation_min_sdk

Dize; varsayılan değer ""

APK'nın imzasını oluşturmak için APK'nın dönüşümlü imzalama anahtarının kullanılması gereken minimum Android platform sürümünü (API Düzeyi) belirler. APK'nın orijinal imzalama anahtarı, önceki tüm platform sürümleri için kullanılır.
main_dex_list

Etiket; varsayılan değer None

Bir metin dosyası, sınıf dosyası adlarının listesini içerir. Bu sınıf dosyalarıyla tanımlanan sınıflar, birincil sınıflar.dex içine yerleştirilir. Örneğin:
          android/support/multidex/MultiDex$V19.class
          android/support/multidex/MultiDex.class
          android/support/multidex/MultiDexApplication.class
          com/google/common/base/Objects.class
                    
multidex="manual_main_dex" ile birlikte kullanılmalıdır.
main_dex_list_opts

Dize listesi; varsayılan değer: []

Ana dex listesi oluşturucuya aktarılacak komut satırı seçenekleri. Ana dex listesinde yer alan sınıfları etkilemek için bu seçeneği kullanın.
main_dex_proguard_specs

Etiket listesi; varsayılan []

Ana dex'te tutulması gereken sınıfları belirlemek için ProGuard spesifikasyonları olarak kullanılacak dosyalar. Yalnızca multidex özelliği legacy olarak ayarlanırsa izin verilir.
manifest

Label; zorunlu

Android manifest dosyasının adı (normal olarak AndroidManifest.xml). resource_files veya assets tanımlanırsa tanımlanmalıdır.
manifest_values

Sözlük: Dize -> Dize; varsayılan {}

Manifest'te geçersiz kılınacak değerler sözlüğü.

Manifest'teki tüm ${name} örnekleri, bu sözlükteki ada karşılık gelen değerle değiştirilir.

applicationId, versionCode, versionName, minSdkVersion, targetSdkVersion ve maxSdkVersion de manifest ve uses-sdk etiketlerindeki karşılık gelen özellikleri geçersiz kılar.

packageName yoksayılır ve belirtilirse applicationId veya manifestteki paketten ayarlanır.

manifest_merger, legacy olarak ayarlandığında yalnızca applicationId, versionCode ve versionName geçerli olur.

multidex

Dize; varsayılan değer "native"

Kodun birden fazla dex dosyasına bölünüp bölünmeyeceği.
Olası değerler:
  • native: Dex 64K dizin sınırı aşıldığında kodu birden fazla dex dosyasına bölebilirsiniz. Çalışma zamanında multidex sınıflarını yüklemek için yerel platform desteği olduğunu varsayar. Bu özellik yalnızca Android L ve sonraki modellerde çalışır.
  • legacy: Dex 64K dizin sınırı aşıldığında kodu birden fazla dex dosyasına bölebilirsiniz. Multidex sınıflarının uygulama kodu üzerinden yüklendiği varsayılır (yerel platform desteği yoktur).
  • manual_main_dex: Dex 64K dizin sınırı aşıldığında kodu birden fazla dex dosyasına böler. Ana dex dosyasının içeriği, main_dex_list özelliği kullanılarak bir metin dosyasında sınıfların listesi sağlanarak belirtilmelidir.
  • off: Dizin sınırını aşsa bile tüm kodu tek bir dex dosyasında derleyin.
nocompress_extensions

Dize listesi; varsayılan değer: []

Apk'de sıkıştırılmamış halde bırakılacak dosya uzantılarının bir listesi.
package_id

Tam sayı; varsayılan değer 0

Bu ikili programdaki kaynaklara atanacak paket kimliği.

Daha fazla bilgi için AAPT2'nin --package-id bağımsız değişkenini inceleyin. Bu ayar genellikle ayarlanmadan bırakılırsa varsayılan değer 127 (0x7F) olur.

plugins

Etiket listesi; varsayılan []

Derleme zamanında çalışacak Java derleyici eklentileri. Eklentiler özelliğinde belirtilen her java_plugin, bu hedef oluşturulduğunda çalışır. Eklenti tarafından oluşturulan kaynaklar, hedefin sonuç jar'ına dahil edilir.
proguard_apply_dictionary

Etiket; varsayılan değer None

ProGuard için eşleme olarak kullanılacak dosya. Kod karartma sırasında sınıfları ve üyeleri yeniden adlandırırken çıkarılacak "kelimeleri" içeren, satırla ayrılmış bir dosya.
proguard_apply_mapping

Etiket; varsayılan değer None

ProGuard için eşleme olarak kullanılacak dosya. proguard_generate_mapping tarafından oluşturulan eşleme dosyası, aynı eşlemeyi yeni bir derlemeye uygulamak için yeniden kullanılacak.
proguard_generate_mapping

Boole; yapılandırılmamış; varsayılan değer False

ProGuard eşleme dosyası oluşturulup oluşturulmayacağı. Eşleme dosyası yalnızca proguard_specs belirtilmişse oluşturulur. Bu dosya orijinal ile kodu karartılmış sınıf, yöntem ve alan adları arasındaki eşlemeyi listeler.

UYARI: Bu özellik kullanılıyorsa ProGuard spesifikasyonu -dontobfuscate veya -printmapping içermemelidir.

proguard_specs

Etiket listesi; varsayılan []

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Bu dosya, ProGuard tarafından kullanılacak spesifikasyonları açıklar.
resource_configuration_filters

Dize listesi; varsayılan değer: []

Apk'deki kaynakları yalnızca "en" yapılandırmasındakilerle sınırlayan "en" gibi kaynak yapılandırma filtrelerinin listesi. Sözde yerelleştirmeyi etkinleştirmek için en_XA ve/veya ar_XB sözde yerel ayarlarını ekleyin.
resource_files

Etiket listesi; varsayılan []

Paketlenecek kaynakların listesi. Bu, genellikle res dizini altındaki tüm dosyalar için glob değerindedir.
Oluşturulan dosyalara (genrules'tan) buradaki Etiket aracılığıyla da referans verilebilir. Tek kısıtlama, oluşturulan çıkışların, dahil edilen diğer tüm kaynak dosyalarıyla aynı "res" dizininde olması gerektiğidir.
shrink_resources

Tam sayı; varsayılan değer -1

Kaynak daraltmanın yapılıp yapılmayacağı. İkili program tarafından kullanılmayan kaynaklar APK'dan kaldırılır. Bu, yalnızca yerel kaynakları (ör. manifest ve resource_files özellikleri) kullanan kurallar için desteklenir ve ProGuard gerektirir. Gradle kaynak daraltıcı ile büyük ölçüde aynı şekilde çalışır (https://developer.android.com/studio/build/shrink-code.html#shrink-resources).

Önemli farklılıklar:

  • values/ kaynakları ve dosya tabanlı kaynaklar kaldırılacak
  • varsayılan olarak strict mode değerini kullanır
  • Kullanılmayan kimlik kaynaklarını kaldırma işlemi yalnızca aapt2 ile desteklenir
Kaynak küçültme etkinse gerçekleştirilen analiz ve silme işlemlerinin ayrıntılarını içeren name_files/resource_shrinker.log da oluşturulur.

Olası değerler:

  • shrink_resources = 1: Android kaynak daraltma özelliğini açar
  • shrink_resources = 0: Android kaynak daraltma özelliğini devre dışı bırakır
  • shrink_resources = -1: Daraltma, --android_resource_shrinking işareti ile kontrol edilir.

aar_import

Kural kaynağını göster
aar_import(name, deps, data, aar, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, licenses, restricted_to, srcjar, tags, target_compatible_with, testonly, visibility)

Bu kural, .aar dosyalarının android_library ve android_binary kuralları için kitaplık olarak kullanılmasına izin verir.

Örnekler

    aar_import(
        name = "google-vr-sdk",
        aar = "gvr-android-sdk/libraries/sdk-common-1.10.0.aar",
    )

    android_binary(
        name = "app",
        manifest = "AndroidManifest.xml",
        srcs = glob(["**.java"]),
        deps = [":google-vr-sdk"],
    )

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

aar

Label; zorunlu

Bu hedefe bağlı Android hedeflerine sağlanacak .aar dosyası.
exports

Etiket listesi; varsayılan []

Bu kurala bağlı olan kurallara aktarılacak hedefler. Bkz. java_library.exports.
srcjar

Etiket; varsayılan değer None

AAR'daki derlenmiş JAR dosyalarının kaynak kodunu içeren bir JAR dosyası.

android_library

Kural kaynağını göster
android_library(name, deps, srcs, data, assets, assets_dir, compatible_with, custom_package, deprecation, distribs, enable_data_binding, exec_compatible_with, exec_properties, exported_plugins, exports, exports_manifest, features, idl_import_root, idl_parcelables, idl_preprocessed, idl_srcs, javacopts, licenses, manifest, neverlink, plugins, proguard_specs, resource_files, restricted_to, tags, target_compatible_with, testonly, visibility)

Bu kural, kaynaklarını bir .jar dosyasında derler ve arşivler. android.jar Android çalışma zamanı kitaplığı, derleme sınıfı yoluna dolaylı olarak yerleştirilmiş.

Dolaylı çıkış hedefleri

  • libname.jar: Bir Java arşivi.
  • libname-src.jar: Kaynakları içeren bir arşiv ("kaynak jar").
  • name.aar: Java arşivini ve bu hedefin kaynaklarını içeren bir Android "aar" paketi. Geçişli kapatmayı içermez.

Örnekler

Android kuralı örneklerini, Bazel kaynak ağacının examples/android dizininde bulabilirsiniz.

Aşağıdaki örnekte idl_import_root öğesinin nasıl ayarlanacağı gösterilmektedir. //java/bazel/helloandroid/BUILD şunları içeriyor:

android_library(
    name = "parcelable",
    srcs = ["MyParcelable.java"], # bazel.helloandroid.MyParcelable

    # MyParcelable.aidl will be used as import for other .aidl
    # files that depend on it, but will not be compiled.
    idl_parcelables = ["MyParcelable.aidl"] # bazel.helloandroid.MyParcelable

    # We don't need to specify idl_import_root since the aidl file
    # which declares bazel.helloandroid.MyParcelable
    # is present at java/bazel/helloandroid/MyParcelable.aidl
    # underneath a java root (java/).
)

android_library(
    name = "foreign_parcelable",
    srcs = ["src/android/helloandroid/OtherParcelable.java"], # android.helloandroid.OtherParcelable
    idl_parcelables = [
        "src/android/helloandroid/OtherParcelable.aidl" # android.helloandroid.OtherParcelable
    ],

    # We need to specify idl_import_root because the aidl file which
    # declares android.helloandroid.OtherParcelable is not positioned
    # at android/helloandroid/OtherParcelable.aidl under a normal java root.
    # Setting idl_import_root to "src" in //java/bazel/helloandroid
    # adds java/bazel/helloandroid/src to the list of roots
    # the aidl compiler will search for imported types.
    idl_import_root = "src",
)

# Here, OtherInterface.aidl has an "import android.helloandroid.CallbackInterface;" statement.
android_library(
    name = "foreign_interface",
    idl_srcs = [
        "src/android/helloandroid/OtherInterface.aidl" # android.helloandroid.OtherInterface
        "src/android/helloandroid/CallbackInterface.aidl" # android.helloandroid.CallbackInterface
    ],

    # As above, idl_srcs which are not correctly positioned under a java root
    # must have idl_import_root set. Otherwise, OtherInterface (or any other
    # interface in a library which depends on this one) will not be able
    # to find CallbackInterface when it is imported.
    idl_import_root = "src",
)

# MyParcelable.aidl is imported by MyInterface.aidl, so the generated
# MyInterface.java requires MyParcelable.class at compile time.
# Depending on :parcelable ensures that aidl compilation of MyInterface.aidl
# specifies the correct import roots and can access MyParcelable.aidl, and
# makes MyParcelable.class available to Java compilation of MyInterface.java
# as usual.
android_library(
    name = "idl",
    idl_srcs = ["MyInterface.aidl"],
    deps = [":parcelable"],
)

# Here, ServiceParcelable uses and thus depends on ParcelableService,
# when it's compiled, but ParcelableService also uses ServiceParcelable,
# which creates a circular dependency.
# As a result, these files must be compiled together, in the same android_library.
android_library(
    name = "circular_dependencies",
    srcs = ["ServiceParcelable.java"],
    idl_srcs = ["ParcelableService.aidl"],
    idl_parcelables = ["ServiceParcelable.aidl"],
)

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan []

Bağlantı oluşturulacak diğer kitaplıkların listesi. İzin verilen kitaplık türleri şunlardır: android_library, android kısıtlamasıyla java_library ve Android hedef platformu için cc_library sarmalama veya .so yerel kitaplık oluşturma.
srcs

Etiket listesi; varsayılan []

Hedefi oluşturmak için işlenen .java veya .srcjar dosyalarının listesi.

.java türündeki srcs dosyaları derlendi. Okunabilirlik açısından, oluşturulmuş bir .java kaynak dosyasının adının srcs içine yerleştirilmesi uygun değildir. Bunun yerine, bağımlı kural adını aşağıda açıklandığı gibi srcs içine yerleştirin.

.srcjar türündeki srcs dosyaları paketten çıkarılır ve derlenir. (Bu, bir genrule veya derleme uzantısına sahip .java dosyaları kümesi oluşturmanız gerekirse yararlı olur.)

srcs atlanırsa deps politikasında belirtilen tüm bağımlılıklar bu kuraldan dışa aktarılır (bağımlılıkları dışa aktarma hakkında daha fazla bilgi için Java_library'nin dışa aktarma işlemlerine bakın). Ancak bu davranış yakında kullanımdan kaldırılacağı için bu yaklaşıma güvenmemeye çalışın.

assets

Etiket listesi; varsayılan []

Paketlenecek öğelerin listesi. Bu, genellikle assets dizini altındaki tüm dosyalar için glob değerindedir. Ayrıca, tüm bu dosyalar ilgili pakette assets_dir dizini altında olduğu sürece, diğer kurallara (dosya oluşturan tüm kurallar) başvurabilir ya da diğer paketlerdeki dosyaları dışa aktarabilirsiniz.
assets_dir

Dize; varsayılan değer ""

assets içindeki dosyaların yolunu belirten dize. assets ve assets_dir çifti, paketlenmiş öğeleri tanımlar ve her iki özellik de sağlanmalıdır veya hiçbiri sağlanmamalıdır.
custom_package

Dize; varsayılan değer ""

Java kaynaklarının oluşturulacağı Java paketi. Varsayılan olarak paket, kuralı içeren BUILD dosyasının bulunduğu dizinden belirlenir. Farklı bir paket belirtebilirsiniz ancak bu yöntem, yalnızca çalışma zamanında algılanacak diğer kitaplıklarla sınıf yolu çakışmalarına neden olabileceğinden kesinlikle önerilmez.
enable_data_binding

Boole; varsayılan değer False

Doğru değerine ayarlanırsa bu kural, resource_files özelliği aracılığıyla eklenen düzen kaynaklarındaki veri bağlama ifadelerini işler. Bu ayar kullanılmadığında, veri bağlama ifadeleri derleme hataları oluşturur.

Veri bağlama ile Android uygulaması oluşturmak için aşağıdakileri de yapmanız gerekir:

  1. Geçişli olarak buna bağlı tüm Android kuralları için bu özelliği ayarlayın. Bunun nedeni, bağımlıların kaynak birleştirme yoluyla kuralın veri bağlama ifadelerini devralmasıdır. Dolayısıyla, bu ifadeleri ayrıştırmak için veri bağlama ile derlemeleri de gerekir.
  2. Bu özelliği ayarlayan tüm hedeflere, veri bağlama çalışma zamanı kitaplığı için bir deps = girişi ekleyin. Bu kitaplığın konumu, depo kurulumunuza bağlıdır.
exported_plugins

Etiket listesi; varsayılan []

Doğrudan bu kitaplığa bağlı kitaplıklara aktarılacak java_plugin'lerin (ör. ek açıklama işlemcileri) listesi.

Belirtilen java_plugin listesi, doğrudan bu kitaplığa bağlı olan herhangi bir kitaplığa, sanki o kitaplık bu etiketleri plugins içinde açıkça bildirmiş gibi uygulanır.

exports

Etiket listesi; varsayılan []

exports özellikleri aracılığıyla erişilen tüm kuralların kapatılması, exports ile hedefe doğrudan bağlı olan herhangi bir kuralın doğrudan bağımlılığı olarak kabul edilir.

exports, ait olduğu kuralın doğrudan noktası değil.

exports_manifest

Tam sayı; varsayılan değer 1

Manifest girişlerinin bu hedefe bağlı olan android_binary hedeflerine dışa aktarılıp aktarılmayacağı. uses-permissions özellikleri hiçbir zaman dışa aktarılmaz.
idl_import_root

Dize; varsayılan değer ""

Bu kitaplıkta yer alan idl kaynaklarını içeren Java paket ağacının köküne pakete bağlı yol.

Bu yol, bu kitaplığa bağlı boşl kaynakları işlenirken içe aktarma kökü olarak kullanılır.

idl_import_root belirtildiğinde hem idl_parcelables hem de idl_srcs, idl_import_root altında temsil ettikleri nesnenin Java paketi tarafından belirtilen yolda olmalıdır. idl_import_root belirtilmediğinde hem idl_parcelables hem de idl_srcs, Java kökü altında paketlerinin belirttiği yolda olmalıdır.

Örnekleri inceleyin.

idl_parcelables

Etiket listesi; varsayılan []

İçe aktarma olarak sağlanacak Android IDL tanımlarının listesi. Bu dosyalar, doğrudan veya geçişli kapatma aracılığıyla bu kitaplığa bağlı olan herhangi bir android_library hedefi için içe aktarma olarak kullanıma sunulur ancak Java'ya çevrilmez veya derlenmez.

Yalnızca bu kitaplıktaki .java kaynaklarına doğrudan karşılık gelen .aidl dosyaları dahil edilmelidir (ör. Parcelable'ın özel uygulamaları), aksi takdirde idl_srcs kullanılmalıdır.

Bu dosyaların, yardımcı derleyici tarafından bulunabilmesi için uygun şekilde yerleştirilmesi gerekir. Bunun ne anlama geldiği hakkında bilgi edinmek için idl_import_root açıklamasına bakın.

idl_preprocessed

Etiket listesi; varsayılan []

İçe aktarma olarak sağlanacak ön işlenmiş Android IDL tanımlarının listesi. Bu dosyalar, doğrudan veya geçişli kapatma aracılığıyla bu kitaplığa bağlı olan herhangi bir android_library hedefi için içe aktarma olarak kullanıma sunulur ancak Java'ya çevrilmez veya derlenmez.

Yalnızca bu kitaplıktaki .java kaynaklarına doğrudan karşılık gelen önceden işlenmiş .aidl dosyaları dahil edilmelidir (ör. Parcelable'ın özel uygulamaları), aksi takdirde Java arayüzlerine çevrilmesi gereken Android IDL tanımları için idl_srcs, ön işlenmemiş AIDL dosyaları için ise idl_parcelable kullanılır.

idl_srcs

Etiket listesi; varsayılan []

Java arayüzlerine çevrilecek Android IDL tanımlarının listesi. Java arayüzleri oluşturulduktan sonra srcs içeriğiyle birlikte derlenirler.

Bu dosyalar, bu kitaplığa bağlı olan herhangi bir android_library hedefi için doğrudan veya geçişli kapatma aracılığıyla içe aktarma olarak kullanıma sunulacaktır.

Bu dosyaların, yardımcı derleyici tarafından bulunabilmesi için uygun şekilde yerleştirilmesi gerekir. Bunun ne anlama geldiği hakkında bilgi edinmek için idl_import_root açıklamasına bakın.

javacopts

Dize listesi; varsayılan değer: []

Bu hedef için ek derleyici seçenekleri. "Değişken oluşturma" değişikliğine ve Bourne kabuk belirtkelemeye tabidir.

Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'a iletilir.

manifest

Etiket; varsayılan değer None

Android manifest dosyasının adı (normal olarak AndroidManifest.xml). resource_files veya assets tanımlanırsa tanımlanmalıdır.

Boole; varsayılan değer False

Bu kitaplığı yalnızca derleme için kullanın, çalışma zamanında kullanmayın. neverlink olarak işaretlenen bir kuralın çıktıları .apk oluşturma işleminde kullanılmaz. Kitaplık, yürütme sırasında çalışma zamanı ortamı tarafından sağlanacaksa kullanışlıdır.
plugins

Etiket listesi; varsayılan []

Derleme zamanında çalışacak Java derleyici eklentileri. Eklentiler özelliğinde belirtilen her java_plugin, bu hedef oluşturulduğunda çalışır. Eklenti tarafından oluşturulan kaynaklar, hedefin sonuç jar'ına dahil edilir.
proguard_specs

Etiket listesi; varsayılan []

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Burada, ProGuard tarafından kullanılacak spesifikasyonlar açıklanır. Belirtilirse bu kitaplığa bağlı olarak herhangi bir android_binary hedefine eklenir. Buraya dahil edilen dosyaların yalnızca idempotent kuralları, yani -dontnote, -dontwarn, kindnosideeffects ve -keep ile başlayan kuralları olmalıdır. Diğer seçenekler, totoolojik olmayan birleştirmeleri sağlamak için yalnızca android_binary proGuard_specs içinde görünebilir.
resource_files

Etiket listesi; varsayılan []

Paketlenecek kaynakların listesi. Bu, genellikle res dizini altındaki tüm dosyalar için glob değerindedir.
Oluşturulan dosyalara (genrules'tan) buradaki Etiket aracılığıyla da referans verilebilir. Tek kısıtlama, oluşturulan çıkışların, dahil edilen diğer tüm kaynak dosyalarıyla aynı "res" dizininde olması gerektiğidir.

android_instrumentation_test

Kural kaynağını göster
android_instrumentation_test(name, data, args, compatible_with, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, licenses, local, restricted_to, shard_count, size, support_apks, tags, target_compatible_with, target_device, test_app, testonly, timeout, toolchains, visibility)

Bir android_instrumentation_test kuralı, Android araç testlerini çalıştırır. Bir emülatörü başlatır, test edilen uygulamayı, test uygulamasını ve diğer gerekli uygulamaları yükler, test paketinde tanımlanan testleri çalıştırır.

test_app özelliği, testi içeren android_binary özelliğini belirtir. Bu android_binary ise instruments özelliği aracılığıyla test edilen android_binary uygulamasını belirtir.

Örnek

# java/com/samples/hello_world/BUILD

android_library(
    name = "hello_world_lib",
    srcs = ["Lib.java"],
    manifest = "LibraryManifest.xml",
    resource_files = glob(["res/**"]),
)

# The app under test
android_binary(
    name = "hello_world_app",
    manifest = "AndroidManifest.xml",
    deps = [":hello_world_lib"],
)
# javatests/com/samples/hello_world/BUILD

android_library(
    name = "hello_world_test_lib",
    srcs = ["Tests.java"],
    deps = [
      "//java/com/samples/hello_world:hello_world_lib",
      ...  # test dependencies such as Espresso and Mockito
    ],
)

# The test app
android_binary(
    name = "hello_world_test_app",
    instruments = "//java/com/samples/hello_world:hello_world_app",
    manifest = "AndroidManifest.xml",
    deps = [":hello_world_test_lib"],
)

android_instrumentation_test(
    name = "hello_world_uiinstrumentation_tests",
    target_device = ":some_target_device",
    test_app = ":hello_world_test_app",
)

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

support_apks

Etiket listesi; varsayılan []

Araç testi başlamadan önce cihaza yüklenecek diğer APK'lar.
target_device

Label; zorunlu

Testin çalıştırılacağı android_device cihazı.

Testi, çalışan bir emülatörde veya fiziksel bir cihazda çalıştırmak için şu bağımsız değişkenleri kullanın: --test_output=streamed --test_arg=--device_broker_type=LOCAL_ADB_SERVER --test_arg=--device_serial_number=$device_identifier

test_app

Label; zorunlu

Test sınıflarını içeren android_binary hedefi. android_binary hedefi, instruments özelliği aracılığıyla hangi hedefi test ettiğini belirtmelidir.

android_local_test

Kural kaynağını göster
android_local_test(name, deps, srcs, data, args, compatible_with, custom_package, densities, deprecation, enable_data_binding, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, licenses, local, manifest, manifest_values, nocompress_extensions, plugins, resource_configuration_filters, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, shard_count, size, stamp, tags, target_compatible_with, test_class, testonly, timeout, toolchains, use_launcher, visibility)

Bu kural, android_library kurallarını yerel olarak (cihazda değil) test etmek içindir. Android Robolectric test çerçevesiyle çalışır. Robolectric testleri yazmayla ilgili ayrıntılar için Android Robolectric sitesine bakın.

Dolaylı çıkış hedefleri

  • name.jar: Testin Java arşivi.
  • name-src.jar: Kaynakları içeren bir arşiv ("kaynak jar").
  • name_deploy.jar: Dağıtıma uygun bir Java dağıtım arşivi (yalnızca açıkça talep edildiğinde oluşturulur).

Örnekler

Robolectric'i android_local_test ile kullanmak için WORKSPACE dosyanıza Robolectric'in deposunu ekleyin:

http_archive(
    name = "robolectric",
    urls = ["https://github.com/robolectric/robolectric-bazel/archive/<COMMIT>.tar.gz"],
    strip_prefix = "robolectric-bazel-<COMMIT>",
    sha256 = "<HASH>",
)
load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories")
robolectric_repositories()
Bu işlem, Robolectric için gereken maven_jar kurallarını alır. Daha sonra her android_local_test kuralı, @robolectric//bazel:robolectric bağımlılığına bağlı olmalıdır. Aşağıdaki örneğe bakın.

android_local_test(
    name = "SampleTest",
    srcs = [
        "SampleTest.java",
    ],
    manifest = "LibManifest.xml",
    deps = [
        ":sample_test_lib",
        "@robolectric//bazel:android-all",
    ],
)

android_library(
    name = "sample_test_lib",
    srcs = [
         "Lib.java",
    ],
    resource_files = glob(["res/**"]),
    manifest = "AndroidManifest.xml",
)

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan []

Test edilecek kitaplıkların ve hedefe bağlanacak ek kitaplıkların listesi. Bu özelliğin geçişli kapatılmasında Android kurallarında belirtilen tüm kaynaklar, öğeler ve manifest dosyaları testte kullanıma sunulmuştur.

deps içinde izin verilen kurallar listesi şunlardır: android_library, aar_import, java_import, java_library ve java_lite_proto_library.

srcs

Etiket listesi; varsayılan []

Hedefi oluşturmak için işlenen kaynak dosyaların listesi. Aşağıda açıklanan özel durumlar dışında gereklidir.

.java türündeki srcs dosyaları derlendi. Okunabilirlik açısından, oluşturulmuş bir .java kaynak dosyasının adının srcs içine yerleştirilmesi uygun değildir. Bunun yerine, bağımlı kural adını aşağıda açıklandığı gibi srcs içine yerleştirin.

.srcjar türündeki srcs dosyaları paketten çıkarılır ve derlenir. (Bu, bir genrule veya derleme uzantısına sahip .java dosyaları kümesi oluşturmanız gerekirse yararlı olur.)

Yukarıda açıklanan dosya türünde en az bir dosya olduğu sürece diğer tüm dosyalar yoksayılır. Aksi takdirde bir hata oluşur.

srcs özelliği zorunludur ve runtime_deps belirtilmediği sürece boş bırakılamaz.

custom_package

Dize; varsayılan değer ""

R sınıfının oluşturulacağı Java paketi. Varsayılan olarak paket, kuralı içeren BUILD dosyasının bulunduğu dizinden belirlenir. Bu özelliği kullanıyorsanız muhtemelen test_class öğesini de kullanmanız gerekecektir.
densities

Dize listesi; varsayılan değer: []

Apk oluşturulurken filtrelenecek yoğunluklar. Üst küme StarlarkListing içermiyorsa ilgili uyumlu ekranlar bölümü de manifeste eklenir.
enable_data_binding

Boole; varsayılan değer False

True (doğru) ise bu kural, bu test tarafından kullanılan veri bağlamanın etkin olduğu bağımlılıklarda kullanılan veri bağlama referanslarını işler. Bu ayar kullanılmadığında, veri bağlama bağımlılıkları ikili düzeyde kod oluşturma işlemi gerçekleştirmez ve derleme hatalarına neden olabilir.
javacopts

Dize listesi; varsayılan değer: []

Bu kitaplık için ek derleyici seçenekleri. "Değişken oluşturma" değişikliğine ve Bourne kabuk belirtkelemeye tabidir.

Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'a iletilir.

jvm_flags

Dize listesi; varsayılan değer: []

Bu ikili programı çalıştırmak için oluşturulmuş sarmalayıcı komut dosyasına yerleştirilecek işaretlerin listesi. $(location) ve "Değişken yap" değişikliği ile Bourne kabuk belirtkeleme'ye tabidir.

Java ikili programı için sarmalayıcı komut dosyası, bir CLASSPATH tanımı içerir (tüm bağımlı jar'ları bulmak için) ve doğru Java yorumlayıcısını çağırır. Sarmalayıcı komut dosyası tarafından oluşturulan komut satırı, ana sınıfın adını ve ardından bir "$@" içerir. Böylece sınıf adından sonra diğer bağımsız değişkenleri iletebilirsiniz. Bununla birlikte, JVM tarafından ayrıştırılması amaçlanan bağımsız değişkenler, komut satırında sınıf adından önce belirtilmelidir. jvm_flags içeriği, sınıf adı listelenmeden önce sarmalayıcı komut dosyasına eklenir.

Bu özelliğin *_deploy.jar çıkışları üzerinde etkisi olmadığını unutmayın.

manifest

Etiket; varsayılan değer None

Android manifest dosyasının adı (normal olarak AndroidManifest.xml). resource_files veya öğeler tanımlanırsa ya da test edilen kitaplıklardaki manifestlerin herhangi birinde minSdkVersion etiketi varsa tanımlanmalıdır.
manifest_values

Sözlük: Dize -> Dize; varsayılan {}

Manifest'te geçersiz kılınacak değerler sözlüğü. Manifest'teki herhangi bir ${name} örneği, bu sözlükteki ada karşılık gelen değerle değiştirilir. applicationId, versionCode, versionName, minSdkVersion, targetSdkVersion ve maxSdkVersion, manifest ve use-sdk etiketlerinin karşılık gelen özelliklerini de geçersiz kılar. packageName yoksayılır ve belirtilirse applicationId veya manifestteki paketten ayarlanır. manifest_values parametresi kullanmak için kuralda bir manifest dosyası olması gerekmez.
nocompress_extensions

Dize listesi; varsayılan değer: []

Kaynak apk'de sıkıştırılmamış halde bırakılacak dosya uzantılarının listesi.
plugins

Etiket listesi; varsayılan []

Derleme zamanında çalışacak Java derleyici eklentileri. Bu özellikte belirtilen her java_plugin, bu kural oluşturulduğunda çalışır. Bir kitaplık, exported_plugins kullanan bağımlılıklardan eklentiler de devralabilir. Eklenti tarafından oluşturulan kaynaklar, bu kuralın ortaya çıkan jar dosyasına dahil edilir.
resource_configuration_filters

Dize listesi; varsayılan değer: []

Apk'deki kaynakları yalnızca "en" yapılandırmasındakilerle sınırlayacak "en" gibi bir kaynak yapılandırma filtreleri listesi.
resource_jars

Etiket listesi; varsayılan []

Desteği sonlandırıldı: Bunun yerine java_import ve deps veyaworkspace_deps öğelerini kullanın.
resource_strip_prefix

Dize; varsayılan değer ""

Java kaynaklarından çıkarılacak yol ön eki.

Belirtilirse bu yol ön eki, resources özelliğindeki her dosyadan çıkarılır. Bu, kaynak dosyasının bu dizinde olmamasıyla ilgili bir hatadır. Belirtilmezse (varsayılan) kaynak dosyasının yolu, Java paketinin kaynak dosyalarıyla aynı mantığa göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt konumundaki bir kaynak dosya foo/bar/a.txt konumunda bulunur.

runtime_deps

Etiket listesi; varsayılan []

Son ikili program veya yalnızca çalışma zamanında test için kullanılacak kitaplıklar. Normal deps gibi bu komutlar da çalışma zamanı sınıf yolunda görünür ancak bunlardan farklı olarak derleme zamanı sınıf yolunda görünmez. Yalnızca çalışma zamanında gereken bağımlılıklar burada listelenmelidir. Bağımlılık analizi araçları hem runtime_deps hem de deps içinde görünen hedefleri yoksaymalıdır.
stamp

Tam sayı; varsayılan değer 0

Derleme bilgilerinin ikili programda kodlanıp kodlanmayacağını belirler. Olası değerler:
  • stamp = 1: --nostamp derlemelerinde bile, derleme bilgilerini her zaman ikili programda damgalayın. Potansiyel olarak ikili program ve buna bağlı tüm aşağı akış işlemleri için uzaktan önbelleğe almayı sonlandıracağından bu ayardan kaçınılmalıdır.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu yöntem, derleme sonucunu önbelleğe alma konusunda iyi bir sonuç verir.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi --[no]stamp işaretiyle kontrol edilir.

Bağımlılıkları değişmediği sürece damgalı ikili programlar yeniden oluşturulmaz.

test_class

Dize; varsayılan değer ""

Test çalıştırıcısı tarafından yüklenecek Java sınıfı.

Bu özellik, bu test tarafından çalıştırılacak bir Java sınıfının adını belirtir. Bunun ayarlanması nadiren gerekir. Bu bağımsız değişken atlanırsa adı, bu android_local_test kuralının name değerine karşılık gelen Java sınıfı kullanılır. Test sınıfına org.junit.runner.RunWith ile ek açıklama eklenmesi gerekiyor.

use_launcher

Boole; varsayılan değer True

İkili programın özel bir başlatıcı kullanıp kullanmayacağı.

Bu özellik false (yanlış) değerine ayarlanırsa Başlatıcı özelliği ve ilgili --java_launcher işareti bu hedef için yoksayılır.

android_device

Kural kaynağını göster
android_device(name, cache, compatible_with, default_properties, deprecation, distribs, exec_compatible_with, exec_properties, features, horizontal_resolution, licenses, platform_apks, ram, restricted_to, screen_density, system_image, tags, target_compatible_with, testonly, vertical_resolution, visibility, vm_heap)

Bu kural, belirtilen özelliklerle yapılandırılmış bir Android emülatörü oluşturur. Bu emülatör, bazel run komutuyla veya oluşturulan komut dosyası doğrudan yürütülerek başlatılabilir. Kendi kurallarınızı tanımlamak yerine mevcut android_device kurallarına bağlı kalmanız önerilir.

Bu kural, bazel testi ve blaze çalıştırması amacıyla --run_under işareti için uygun bir hedeftir. Bir emülatör başlatır, test edilen/çalıştırılan hedefi emülatöre kopyalar, ardından uygun şekilde test eder veya çalıştırır.

Temel system_image X86 tabanlıysa ve en fazla I686 CPU mimarisi için optimize edilmişse android_device, KVM görüntüleri oluşturmayı destekler. KVM'yi kullanmak için android_device kuralına tags = ['requires-kvm'] ekleyin.

Dolaylı çıkış hedefleri

  • name_images/userdata.dat: Resim dosyalarını ve emülatörü başlatacak anlık görüntüleri içerir
  • name_images/emulator-meta-data.pb: Yeniden başlatmak için emülatöre iletilmesi gereken serileştirilmiş bilgileri içerir.

Örnekler

Aşağıdaki örnekte android_device özelliğinin nasıl kullanılacağı gösterilmektedir. //java/android/helloandroid/BUILD şunu içerir:

android_device(
    name = "nexus_s",
    cache = 32,
    default_properties = "nexus_s.properties",
    horizontal_resolution = 480,
    ram = 512,
    screen_density = 233,
    system_image = ":emulator_images_android_16_x86",
    vertical_resolution = 800,
    vm_heap = 32,
)

filegroup(
    name = "emulator_images_android_16_x86",
    srcs = glob(["androidsdk/system-images/android-16/**"]),
)

//java/android/helloandroid/nexus_s.properties şunu içerir:

ro.product.brand=google
ro.product.device=crespo
ro.product.manufacturer=samsung
ro.product.model=Nexus S
ro.product.name=soju

Bu kural, resimler ve bir başlangıç komut dosyası oluşturur. bazel run :nexus_s -- --action=start komutunu çalıştırarak emülatörü yerel olarak başlatabilirsiniz. Komut dosyası aşağıdaki işaretleri gösterir:

  • --adb_port: adb'nin açılacağı bağlantı noktası. Emülatöre adb komutları yayınlamak istiyorsanız bu bağlantı noktası adb'nin bağlanacağı bağlantı noktasıdır.
  • --emulator_port: Emülatörün telnet yönetim konsolunun açık olacağı bağlantı noktası.
  • --enable_display: Doğru değerine ayarlanırsa emülatörü bir ekranla başlatır (varsayılan olarak false).
  • --action: Ya başlat ya da sonlandır.
  • --apks_to_install: Emülatöre yüklenecek apk'lerin listesi.

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

cache

Tam sayı; zorunlu

Emülatörün önbellek bölümünün megabayt cinsinden boyutu. Bunun minimum değeri 16 megabayttır.
default_properties

Etiket; varsayılan değer None

Emülatörde /default.prop içine yerleştirilecek tek bir özellikler dosyası. Bu, kural yazarının emülatörü gerçek bir cihaz gibi görünecek şekilde daha ayrıntılı yapılandırmasına olanak tanır (özellikle UserAgent dizelerinin ve bir uygulamanın ya da sunucunun belirli bir cihaza farklı davranmasına neden olabilecek diğer davranışların kontrol edilmesi). Bu dosyadaki özellikler, genellikle ro.product.model gibi emülatör tarafından ayarlanan salt okunur özellikleri geçersiz kılar.
horizontal_resolution

Tam sayı; zorunlu

Taklit edilecek piksel cinsinden yatay ekran çözünürlüğü. Minimum değer 240'tır.
platform_apks

Etiket listesi; varsayılan []

Başlatma sırasında cihaza yüklenecek APK'ların listesi.
ram

Tam sayı; zorunlu

Cihaz için emüle edilecek ram cinsinden megabayt cinsinden ram miktarı. Bu, yalnızca cihazda yüklü belirli bir uygulama için değil, cihazın tamamı için geçerlidir. Minimum değer 64 megabayttır.
screen_density

Tam sayı; zorunlu

Emüle edilen ekranın inç başına piksel cinsinden yoğunluğu. Bunun minimum değeri 30 ppi'dır.
system_image

Label; zorunlu

Aşağıdaki dosyaları içeren bir dosya grubu:
  • system.img: Sistem bölümü
  • kernel-qemu: Emülatörün yükleneceği Linux çekirdeği
  • ramdisk.img: Başlatma sırasında kullanılacak başlangıç görüntüsü
  • userdata.img: İlk kullanıcı verisi bölümü
  • source.properties: Resimler hakkında bilgi içeren bir özellikler dosyası
Bu dosyalar Android SDK'nın bir parçasıdır veya üçüncü taraflarca sağlanır (örneğin, Intel x86 görüntüleri sağlar).
vertical_resolution

Tam sayı; zorunlu

Taklit edilecek piksel cinsinden dikey ekran çözünürlüğü. Minimum değer 240'tır.
vm_heap

Tam sayı; zorunlu

Android'in her işlem için kullanacağı sanal makine yığınının megabayt cinsinden boyutu. Minimum değer 16 megabayttır.

android_ndk_repository

Kural kaynağını göster
android_ndk_repository(name, api_level, path, repo_mapping)

Yerel kodla Android hedefleri oluşturmayı desteklemek için Bazel'i Android NDK kullanacak şekilde yapılandırır.

Bu android_ndk_repository uygulamasının Starlark'taki bir uygulamayla değiştirildiğini unutmayın. Sürüm 25 ve sonraki sürümler dahil olmak üzere NDK'nın gelecekteki sürümleri için destek, android_ndk_repository ürününün Starlark sürümünde uygulanacaktır. Starlark sürümü için rules_android_ndk bölümüne bakın.

Android için uygulama geliştirmenin WORKSPACE dosyanızda bir android_sdk_repository kuralının da gerektirdiğini unutmayın.

Daha fazla bilgi için Android NDK'yı Bazel ile kullanma hakkındaki tüm dokümanları okuyun.

Örnekler

android_ndk_repository(
    name = "androidndk",
)

Yukarıdaki örnek, Android NDK'nızı $ANDROID_NDK_HOME cihazında bulup desteklediği en yüksek API düzeyini algılar.

android_ndk_repository(
    name = "androidndk",
    path = "./android-ndk-r20",
    api_level = 24,
)

Yukarıdaki örnekte, ./android-ndk-r20 alanındaki çalışma alanınızda bulunan Android NDK kullanılır. JNI kodunuzu derlerken API düzey 24 kitaplıklarını kullanır.

cpuözellikleri

Android NDK, çalışma zamanında cihazın CPU'sunu algılamak için kullanılabilen cpufeatures kitaplığını içerir. Aşağıdaki örnekte Bazel ile cpuözelliklerin nasıl kullanılacağı gösterilmektedir.

# jni.cc
#include "ndk/sources/android/cpufeatures/cpu-features.h"
...
# BUILD
cc_library(
    name = "jni",
    srcs = ["jni.cc"],
    deps = ["@androidndk//:cpufeatures"],
)

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

api_level

Tam sayı; yapılandırılmamış; varsayılan değer 0

Temel alınan Android API düzeyi. Belirtilmezse yüklü en yüksek API düzeyi kullanılır.
path

Dize; yapılandırılmamış; varsayılan değer ""

Android NDK'ya giden mutlak veya göreceli bir yol. Bu özellik veya $ANDROID_NDK_HOME ortam değişkeni ayarlanmalıdır.

Android NDK'yı Android geliştirici sitesinden indirebilirsiniz.

repo_mapping

Sözlük: Dize -> Dize; varsayılan {}

Yerel depo adından genel depo adına bir sözlük. Bu sayede, bu deponun bağımlılıkları için çalışma alanı bağımlılık çözümü üzerinde kontrol sahibi olursunuz.

Örneğin bir "@foo": "@bar" girişi, bu deponun "@foo" öğesine bağlı olduğu her an ("@foo//some:target" bağımlılığı gibi) aslında genel olarak tanımlanan "@bar" ("@bar//some:target") içinde bu bağımlılığı çözmesi gerektiğini belirtir.

android_sdk_repository

Kural kaynağını göster
android_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)

Android hedefleri oluşturmayı desteklemek için Bazel'i yerel Android SDK'sı kullanacak şekilde yapılandırır.

Örnekler

Bazel için Android SDK oluşturmak üzere minimum değer, WORKSPACE dosyanıza "androidsdk" adlı bir android_sdk_repository kuralı yerleştirmek ve $ANDROID_HOME ortam değişkenini Android SDK'nızın yoluna ayarlamaktır. Bazel varsayılan olarak en yüksek Android API düzeyini kullanır ve Android SDK'da yüklü araç araçlarını geliştirir.
android_sdk_repository(
    name = "androidsdk",
)

Yeniden oluşturulabilir derlemeler sağlamak için path, api_level ve build_tools_version özellikleri belirli değerlere ayarlanabilir. Android SDK'da belirtilen API düzeyi veya derleme araçları sürümü yüklü değilse derleme başarısız olur.

android_sdk_repository(
    name = "androidsdk",
    path = "./sdk",
    api_level = 19,
    build_tools_version = "25.0.0",
)

Yukarıdaki örnekte, Android SDK'ya çalışma alanına bağlı bir yolun kullanımı da gösterilmektedir. Bu, Android SDK Bazel çalışma alanınızın bir parçasıysa (ör. sürüm kontrolünde işaretlenmişse) yararlıdır.

Destek Kitaplıkları

Destek Kitaplıkları, Android SDK Yöneticisi'nde "Android Destek Deposu" olarak bulunur. Bu, yerel Maven deposu olarak paketlenmiş Support ve AppCompat kitaplıkları gibi sürümlü bir ortak Android kitaplık grubudur. android_sdk_repository, bu kitaplıkların her biri için android_binary ve android_library hedeflerinin bağımlılıklarında kullanılabilecek Bazel hedefleri oluşturur.

Oluşturulan hedeflerin adları, Android Destek Deposu'ndaki @androidsdk//${group}:${artifact}-${version} olarak biçimlendirilmiş kitaplıkların Maven koordinatlarından türetilir. Aşağıdaki örnekte, bir android_library öğesinin v7 appcompat kitaplığının 25.0.0 sürümüne nasıl bağlı olabileceği gösterilmektedir.

android_library(
    name = "lib",
    srcs = glob(["*.java"]),
    manifest = "AndroidManifest.xml",
    resource_files = glob(["res/**"]),
    deps = ["@androidsdk//com.android.support:appcompat-v7-25.0.0"],
)

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

api_level

Tam sayı; yapılandırılmamış; varsayılan değer 0

Varsayılan olarak temel alınacak Android API düzeyi. Belirtilmezse yüklü en yüksek API düzeyi kullanılır.

Belirli bir derleme için kullanılan API düzeyi, android_sdk işareti ile geçersiz kılınabilir. android_sdk_repository, bu özelliğin belirtilmesinden bağımsız olarak @androidsdk//:sdk-${level} adlı SDK'da yüklü her API düzeyi için bir android_sdk hedefi oluşturur. Örneğin, varsayılan olmayan bir API düzeyinde derleme yapmak için: bazel build --android_sdk=@androidsdk//:sdk-19 //java/com/example:app.

android_sdk_repository tarafından oluşturulan android_sdk hedefin tümünü görüntülemek için bazel query "kind(android_sdk, @androidsdk//...)" komutunu çalıştırabilirsiniz.

build_tools_version

Dize; yapılandırılmamış; varsayılan değer ""

Android SDK içinden kullanılacak Android derleme araçları sürümü. Belirtilmezse en son derleme aracı sürümü kullanılır.

Bazel için derleme araçları 30.0.0 veya sonraki sürümleri gerekir.

path

Dize; yapılandırılmamış; varsayılan değer ""

Android SDK'nın mutlak veya göreli yolu. Bu özellik veya $ANDROID_HOME ortam değişkeni ayarlanmalıdır.

Android SDK'yı Android geliştirici sitesinden indirebilirsiniz.

repo_mapping

Sözlük: Dize -> Dize; varsayılan {}

Yerel depo adından genel depo adına bir sözlük. Bu sayede, bu deponun bağımlılıkları için çalışma alanı bağımlılık çözümü üzerinde kontrol sahibi olursunuz.

Örneğin bir "@foo": "@bar" girişi, bu deponun "@foo" öğesine bağlı olduğu her an ("@foo//some:target" bağımlılığı gibi) aslında genel olarak tanımlanan "@bar" ("@bar//some:target") içinde bu bağımlılığı çözmesi gerektiğini belirtir.