Android Kuralları

Kurallar

android_binary

Kural kaynağını görüntüleme
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.

Örtülü çıkış hedefleri

  • name.apk: Hata ayıklama anahtarlarıyla imzalanmış ve zipaligned olan bir Android uygulama paket dosyasıdır. Uygulamanızı geliştirmek ve hatalarını ayıklamak için kullanılabilir. Uygulamanızı hata ayıklama anahtarlarıyla imzalandığında yayınlayamazsınız.
  • name_unsigned.apk: Yukarıdaki dosyanın, herkese açık olarak yayınlanmadan önce sürüm anahtarlarıyla imzalanabilecek imzasız bir sürümü.
  • name_deploy.jar: Bu hedefin geçişli kapanımını içeren bir Java arşivi.

    Dağıtım JAR'ı, bu hedefin çalışma zamanı sınıf yolunda baştan sona arama yapan bir sınıf yükleyicisi tarafından bulunabilecek tüm sınıfları içerir.

  • name_proguard.jar: name_deploy.jar üzerinde ProGuard çalıştırma sonucunu içeren bir Java arşivi. Bu çıkış yalnızca proguard_specs özelliği belirtilmişse oluşturulur.
  • name_proguard.map: name_deploy.jar üzerinde ProGuard çalıştırmanın eşleme dosyası sonucu. Bu çıkış yalnızca proguard_specs özelliği belirtilmişse ve proguard_generate_mapping veya shrink_resources ayarlanmışsa oluşturulur.

Örnekler

Android kurallarına ilişkin örnekleri Bazel kaynak ağacının examples/android dizininde bulabilirsiniz.

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan değer []'dir.

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

Etiket listesi; varsayılan değer []'dir.

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

.java türünde srcs dosya derlenir. Okunabilirlik açısından, oluşturulan .java kaynak dosyasının adını srcs içine yerleştirmek iyi değildir. Bunun yerine, aşağıda açıklandığı gibi, bağımlı kural adını srcs içine yerleştirin.

.srcjar türündeki srcs dosyaları çıkarılıp derlenir. (Bu, bir genrule veya derleme uzantısıyla bir dizi .java dosyası oluşturmanız gerektiğinde kullanışlıdır.)

assets

Etiket listesi; varsayılan değer []'dir.

Paketlenecek öğelerin listesi. Bu genellikle assets dizinindeki tüm dosyaların glob'sıdır. Ayrıca, diğer paketlerdeki diğer kurallara (dosya oluşturan tüm kurallar) veya dışa aktarılan dosyalara da başvurabilirsiniz. Ancak bu dosyaların ilgili paketteki assets_dir dizini altında olması gerekir.
assets_dir

Dize; varsayılan değer ""

assets içindeki dosyaların yolunu veren dize. assets ve assets_dir çifti, paketlenmiş öğeleri tanımlar. Bu özelliklerin ikisi de sağlanmalı veya ikisi de sağlanmamalıdır.
crunch_png

Boole değeri; varsayılan değer True'dır.

PNG sıkıştırması yapın (veya yapmayın). Bu, her zaman yapılan dokuz parçalı işleme işleminden bağımsızdır. Bu, aapt2'de düzeltilen bir aapt hatası için kullanımdan kaldırılmış bir 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 çıkarılır. Farklı bir paket belirtebilirsiniz ancak bu, 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"'dir.

Hata ayıklama APK'sını 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. Bu anahtarlar kesinlikle korunmalı ve kaynak ağacınızda saklanmamalıdır.

debug_signing_keys

Etiket listesi; varsayılan değer []'dir.

Dosya listesi, hata ayıklama APK'sını 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. Bu anahtarlar kesinlikle korunmalı ve kaynak ağacınızda saklanmamalıdır.

debug_signing_lineage_file

Etiket; varsayılan değer None'dir.

debug_signing_keys için imza soyunu 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. Bu anahtarlar kesinlikle korunmalı ve kaynak ağacınızda saklanmamalıdır.

densities

Dize listesi; varsayılan değer []'dır.

APK oluşturulurken filtrelenecek yoğunluklar. Bu işlem, APK boyutunu küçültmek için belirtilen ekran yoğunluklarına sahip bir cihaz tarafından yüklenmeyecek raster çizilebilir kaynakları kaldırır. Manifestte zaten bir üst küme listesi yoksa manifeste ilgili bir compatible-screens bölümü de eklenir.
dex_shards

Tam sayı; varsayılan değer 1

Dexing'in ayrıştırılması gereken parça sayısı. Bu, uygulama yükleme ve başlatma süresini uzatarak dexing işlemini çok daha hızlı hale getirir. İkili dosya ne kadar büyük olursa o kadar fazla parça kullanılmalıdır. 25, denemeye başlamak için iyi bir değerdir.

Her parçanın nihai uygulamada en az bir dex ile sonuçlanacağını unutmayın. Bu nedenle, yayın ikilileri için bu değeri 1'den fazla olarak ayarlamanız önerilmez.

dexopts

Dize listesi; varsayılan değer []'dır.

classes.dex oluşturulurken dx aracı için ek komut satırı işaretleri. "Değişken oluştur" yerine koyma ve Bourne kabuğu belirteçleştirme işlemine tabidir.
enable_data_binding

Boole değeri; varsayılan değer False'dır.

Doğruysa bu kural, resource_files özelliği aracılığıyla dahil edilen düzen kaynaklarındaki veri bağlama ifadelerini işler. Bu ayar olmadan veri bağlama ifadeleri derleme hatalarına neden olur.

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

  1. Bu özelliğe dolaylı olarak bağlı olan 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. Bu nedenle, bu ifadeleri ayrıştırmak için veri bağlama ile de oluşturmaları 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, deponuzun kurulumuna bağlıdır.
incremental_dexing

Tamsayı; yapılandırılamaz; varsayılan değer -1

Hedefin, varsayılanları ve --incremental_dexing işaretini geçersiz kılarak artımlı dexing ile veya artımlı dexing olmadan oluşturulmasını zorlayın.
instruments

Etiket; varsayılan değer None'dir.

Enstrüman için android_binary hedefi.

Bu özellik ayarlanırsa bu android_binary, enstrümantasyon testleri için test uygulaması olarak kabul edilir. Bir android_instrumentation_test hedef daha sonra bu hedefi kendi test_app özelliğinde belirtebilir.

javacopts

Dize listesi; varsayılan değer []'dır.

Bu hedef için ek derleyici seçenekleri. "Değişken oluştur" yerine koyma ve Bourne kabuğu belirteçleştirme işlemine 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 döndürülmüş imzalama anahtarının, APK'nın imzasını oluşturmak için kullanılması gereken minimum Android platform sürümünü (API düzeyi) ayarlar. APK'nın orijinal imzalama anahtarı tüm önceki platform sürümlerinde kullanılır.
main_dex_list

Etiket; varsayılan değer None'dir.

Metin dosyası, sınıf dosyası adlarının listesini içerir. Bu sınıf dosyalarıyla tanımlanan sınıflar, birincil classes.dex dosyasına 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 kullanılmalıdır.
main_dex_list_opts

Dize listesi; varsayılan değer []'dır.

Ana dex listesi oluşturucuya iletilecek 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 değer []'dir.

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

Etiket: zorunlu

Android manifest dosyasının adı (normalde AndroidManifest.xml). resource_files veya assets tanımlanmışsa tanımlanmalıdır.
manifest_values

Sözlük: Dize -> Dize; varsayılan değer {}'dır.

Manifest'te geçersiz kılınacak değerlerin 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, manifest ve uses-sdk etiketlerindeki ilgili özellikleri de geçersiz kılar.

packageName yoksayılır ve belirtilmişse applicationId'den, belirtilmemişse manifest dosyasındaki paketten ayarlanır.

manifest_merger, legacy olarak ayarlandığında yalnızca applicationId, versionCode ve versionName politikalarının etkisi olur.

multidex

Dize; varsayılan değer "native"

Kodun birden fazla dex dosyasına bölünmesi gerekip gerekmediği.
Olası değerler:
  • native: DEX 64K dizin sınırı aşıldığında kodu birden fazla DEX dosyasına bölme. Çoklu dex sınıflarının çalışma zamanında yüklenmesi için platformun doğal desteği olduğunu varsayar. Bu özellik yalnızca Android L ve sonraki sürümlerde kullanılabilir.
  • legacy: DEX 64K dizin sınırı aşıldığında kodu birden fazla DEX dosyasına bölme. Çoklu dex sınıflarının uygulama kodu aracılığıyla yüklendiği varsayılır (yani yerel platform desteği yoktur).
  • manual_main_dex: 64.000 dizinlik DEX sınırı aşıldığında kodu birden fazla DEX dosyasına bölme. Ana dex dosyasının içeriği, main_dex_list özelliği kullanılarak bir metin dosyasında sınıf listesi sağlanarak belirtilmelidir.
  • off: Tüm kodu, dizin sınırını aşsa bile tek bir dex dosyasında derleyin.
nocompress_extensions

Dize listesi; varsayılan değer []'dır.

APK'da sıkıştırılmadan bırakılacak dosya uzantılarının listesi.
package_id

Tam sayı; varsayılan değer 0

Bu ikilideki kaynaklara atanacak paket kimliği.

Daha fazla bilgi için AAPT2'nin --package-id bağımsız değişkenine bakın. Bu değer genellikle ayarlanmadan bırakılabilir (ve bırakılmalıdır). Bu durumda varsayılan değer olan 127 (0x7F) kullanılır.

plugins

Etiket listesi; varsayılan değer []'dir.

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

Etiket; varsayılan değer None'dir.

Proguard için eşleme olarak kullanılacak dosya. Karartma sırasında sınıfları ve üyeleri yeniden adlandırırken kullanılacak, satırlarla ayrılmış bir "kelime" dosyası.
proguard_apply_mapping

Etiket; varsayılan değer None'dir.

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

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

Proguard eşleme dosyasının oluşturulup oluşturulmayacağı. Eşleme dosyası yalnızca proguard_specs belirtilirse oluşturulur. Bu dosyada, orijinal ve karartılmış sınıf, yöntem ve alan adları arasındaki eşleme listelenir.

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

proguard_specs

Etiket listesi; varsayılan değer []'dir.

Proguard spesifikasyonu olarak kullanılacak dosyalar. Bu dosya, Proguard tarafından kullanılacak özellikler kümesini açıklar.
resource_configuration_filters

Dize listesi; varsayılan değer []'dır.

Kaynak yapılandırma filtrelerinin listesi (ör. "en"), APK'daki kaynakları yalnızca "en" yapılandırmasındaki kaynaklarla sınırlar. 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 değer []'dir.

Paketlenecek kaynakların listesi. Bu genellikle res dizinindeki tüm dosyaların glob'sıdır.
Oluşturulan dosyalar (genrules'dan) burada da Etiket ile referans verilebilir. Tek kısıtlama, oluşturulan çıktıların, dahil edilen diğer kaynak dosyalarıyla aynı "res" dizininde olmasıdır.
shrink_resources

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

Kullanılmayan kaynakların kaldırılıp kaldırılmayacağını belirler. İkili tarafından kullanılmayan kaynaklar APK'dan kaldırılır. Bu özellik yalnızca yerel kaynakları kullanan kurallar (ör. manifest ve resource_files özellikleri) için desteklenir ve ProGuard gerektirir. Çoğunlukla Gradle kaynak küçültücüyle (https://developer.android.com/studio/build/shrink-code.html#shrink-resources) aynı şekilde çalışır.

Önemli farklılıklar:

  • values/ içindeki kaynaklar ve dosya tabanlı kaynaklar kaldırılacak
  • varsayılan olarak strict mode kullanır
  • Kullanılmayan kimlik kaynaklarının kaldırılması yalnızca aapt2 ile desteklenir
Kaynak küçültme etkinse name_files/resource_shrinker.log da oluşturulur. Bu dosya, gerçekleştirilen analiz ve silme işlemlerini ayrıntılı olarak açıklar.

Olası değerler:

  • shrink_resources = 1: Android kaynak küçültmeyi etkinleştirir.
  • shrink_resources = 0: Android kaynak küçültmeyi devre dışı bırakır.
  • shrink_resources = -1: Küçültme, --android_resource_shrinking işaretiyle kontrol edilir.

aar_import

Kural kaynağını görüntüleme
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; zorunlu

Bu hedef için benzersiz bir ad.

aar

Etiket: zorunlu

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

Etiket listesi; varsayılan değer []'dir.

Bu kurala bağlı kurallara aktarılacak hedefler. java_library.exports konusuna bakın.
srcjar

Etiket; varsayılan değer None'dir.

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

android_library

Kural kaynağını görüntüleme
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ı derleyip .jar dosyası olarak arşivler. Android çalışma zamanı kitaplığı android.jar, derleme sınıfı yoluna örtülü olarak yerleştirilir.

Örtülü çıkış hedefleri

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

Örnekler

Android kurallarına ilişkin örnekleri Bazel kaynak ağacının examples/android dizininde bulabilirsiniz.

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

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; zorunlu

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan değer []'dir.

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

Etiket listesi; varsayılan değer []'dir.

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

.java türünde srcs dosya derlenir. Okunabilirlik açısından, oluşturulan .java kaynak dosyasının adını srcs içine yerleştirmek iyi değildir. Bunun yerine, aşağıda açıklandığı gibi, bağlı olunan kural adını srcs içine yerleştirin.

.srcjar türündeki srcs dosyaları çıkarılıp derlenir. (Bu, bir genrule veya derleme uzantısıyla bir dizi .java dosyası oluşturmanız gerektiğinde kullanışlıdır.)

srcs atlanırsa deps içinde 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 aktarmaları bölümüne bakın). Ancak bu davranışın desteği yakında sonlandırılacak. Bu nedenle, bu davranışa güvenmemeye çalışın.

assets

Etiket listesi; varsayılan değer []'dir.

Paketlenecek öğelerin listesi. Bu genellikle assets dizinindeki tüm dosyaların glob'sıdır. Ayrıca, diğer paketlerdeki diğer kurallara (dosya oluşturan tüm kurallar) veya dışa aktarılan dosyalara da başvurabilirsiniz. Ancak bu dosyaların ilgili paketteki assets_dir dizini altında olması gerekir.
assets_dir

Dize; varsayılan değer ""

assets içindeki dosyaların yolunu veren dize. assets ve assets_dir çifti, paketlenmiş öğeleri tanımlar. Bu özelliklerin ikisi de sağlanmalı veya ikisi de 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 çıkarılır. Farklı bir paket belirtebilirsiniz ancak bu, 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 değeri; varsayılan değer False'dır.

Doğruysa bu kural, resource_files özelliği aracılığıyla dahil edilen düzen kaynaklarındaki veri bağlama ifadelerini işler. Bu ayar olmadan veri bağlama ifadeleri derleme hatalarına neden olur.

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

  1. Bu özelliğe dolaylı olarak bağlı olan 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. Bu nedenle, bu ifadeleri ayrıştırmak için veri bağlama ile de oluşturmaları 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, deponuzun kurulumuna bağlıdır.
exported_plugins

Etiket listesi; varsayılan değer []'dir.

Bu kitaplığa doğrudan bağımlı kitaplıklara aktarılacak java_plugin listesi (ör. ek açıklama işlemcileri).

Belirtilen java_plugin listesi, bu kitaplığa doğrudan bağımlı olan tüm kitaplıklara, bu kitaplıklar plugins içinde bu etiketleri açıkça tanımlamış gibi uygulanır.

exports

Etiket listesi; varsayılan değer []'dir.

exports özellikleri aracılığıyla ulaşılan tüm kuralların kapanması, exports ile hedefi doğrudan kullanan tüm kuralların doğrudan bağımlılıkları olarak kabul edilir.

exports, ait oldukları kuralın doğrudan bağımlıları değildir.

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 bulunan idl kaynaklarını içeren java paketi ağacının köküne giden, pakete göreli yol.

Bu kitaplığa bağlı idl kaynakları işlenirken bu yol, 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ındaki paketleri tarafından belirtilen yolda olmalıdır.

Örnekleri inceleyin.

idl_parcelables

Etiket listesi; varsayılan değer []'dir.

İçe aktarma olarak sağlanacak Android IDL tanımlarının listesi. Bu dosyalar, doğrudan veya geçişli kapanımı aracılığıyla bu kitaplığa bağlı olan tüm android_library hedefler için içe aktarma olarak kullanılabilir ancak Java'ya çevrilmez veya derlenmez.

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

Bu dosyalar, aidl derleyicisinin bulabilmesi için uygun şekilde yerleştirilmelidir. 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 değer []'dir.

İçe aktarma olarak sağlanacak önceden işlenmiş Android IDL tanımlarının listesi. Bu dosyalar, doğrudan veya geçişli kapanımı aracılığıyla bu kitaplığa bağlı olan tüm android_library hedefler için içe aktarma olarak kullanılabilir ancak Java'ya çevrilmez veya derlenmez.

Bu kitaplıktaki .aidl kaynaklarıyla doğrudan eşleşen yalnızca önceden işlenmiş .java dosyaları eklenmelidir (ör.Parcelable'ın özel uygulamaları). Aksi takdirde, Java arayüzlerine çevrilmesi gereken Android IDL tanımları için idl_srcs, önceden işlenmemiş AIDL dosyaları için ise idl_parcelable kullanılmalıdır.

idl_srcs

Etiket listesi; varsayılan değer []'dir.

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

Bu dosyalar, doğrudan veya geçişli kapanımı aracılığıyla bu kitaplığa bağlı olan tüm android_library hedefler için içe aktarma olarak kullanılabilir.

Bu dosyalar, aidl derleyicisinin bulabilmesi için uygun şekilde yerleştirilmelidir. 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 []'dır.

Bu hedef için ek derleyici seçenekleri. "Değişken oluştur" yerine koyma ve Bourne kabuğu belirteçleştirme işlemine tabidir.

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

manifest

Etiket; varsayılan değer None'dir.

Android manifest dosyasının adı (normalde AndroidManifest.xml). resource_files veya assets tanımlanmışsa tanımlanmalıdır.

Boole değeri; varsayılan değer False'dır.

Bu kitaplığı yalnızca derleme için kullanın, çalışma zamanında kullanmayın. neverlink olarak işaretlenen bir kuralın çıkışları .apk oluşturulurken 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 değer []'dir.

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

Etiket listesi; varsayılan değer []'dir.

Proguard spesifikasyonu olarak kullanılacak dosyalar. Bu dosyalar, ProGuard tarafından kullanılacak özellikler grubunu tanımlar. Belirtilmişse bu kitaplığa bağlı olarak herhangi bir android_binary hedefine eklenirler. Burada yer alan dosyalar yalnızca idempotent kurallar içermelidir. Bu kurallar şunlardır: -dontnote, -dontwarn, assumenosideeffects ve -keep ile başlayan kurallar. Diğer seçenekler, çelişkili olmayan birleştirme işlemleri için yalnızca android_binary'nın proguard_specs dosyasında görünebilir.
resource_files

Etiket listesi; varsayılan değer []'dir.

Paketlenecek kaynakların listesi. Bu genellikle res dizinindeki tüm dosyaların glob'sıdır.
Oluşturulan dosyalar (genrules'dan) burada da Etiket ile referans verilebilir. Tek kısıtlama, oluşturulan çıktıların, dahil edilen diğer kaynak dosyalarıyla aynı "res" dizininde olmasıdır.

android_instrumentation_test

Kural kaynağını görüntüleme
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)

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 gerekli diğer uygulamaları yükler ve test paketinde tanımlanan testleri çalıştırır.

test_app özelliği, testi içeren android_binary değerini belirtir. Bu android_binary, 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; zorunlu

Bu hedef için benzersiz bir ad.

support_apks

Etiket listesi; varsayılan değer []'dir.

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

Etiket: zorunlu

Testin üzerinde çalıştırılacağı android_device.

Testi zaten çalışan bir emülatörde veya fiziksel bir cihazda çalıştırmak için şu argümanları kullanın: --test_output=streamed --test_arg=--device_broker_type=LOCAL_ADB_SERVER --test_arg=--device_serial_number=$device_identifier

test_app

Etiket: 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örüntüleme
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ın yerel olarak (cihazda değil) birim testine yöneliktir. Android Robolectric test çerçevesiyle çalışır. Robolectric testleri yazma hakkında ayrıntılı bilgi için Android Robolectric sitesini inceleyin.

Örtülü çı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 istenirse 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, Robolectric için gereken maven_jar kurallarını getirir. Ardından her android_local_test kuralı @robolectric//bazel:robolectric'e 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; zorunlu

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan değer []'dir.

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

deps içinde izin verilen kurallar android_library, aar_import, java_import, java_library ve java_lite_proto_library'dır.

srcs

Etiket listesi; varsayılan değer []'dir.

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

.java türünde srcs dosya derlenir. Okunabilirlik açısından, oluşturulan .java kaynak dosyasının adını srcs içine yerleştirmek iyi değildir. Bunun yerine, aşağıda açıklandığı gibi, bağlı olunan kural adını srcs içine yerleştirin.

.srcjar türündeki srcs dosyaları çıkarılıp derlenir. (Bu, bir genrule veya derleme uzantısıyla bir dizi .java dosyası oluşturmanız gerektiğinde kullanışlıdır.)

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

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

custom_package

Dize; varsayılan değer ""

R sınıfının oluşturulacağı Java paketi. Paket, kuralı içeren BUILD dosyasının bulunduğu dizinden varsayılan olarak çıkarılır. Bu özelliği kullanırsanız büyük olasılıkla test_class özelliğini de kullanmanız gerekir.
densities

Dize listesi; varsayılan değer []'dır.

APK oluşturulurken filtrelenecek yoğunluklar. Manifestte henüz bir üst küme StarlarkListing yoksa manifeste karşılık gelen bir compatible-screens bölümü de eklenir.
enable_data_binding

Boole değeri; varsayılan değer False'dır.

Doğruysa bu kural, bu test tarafından kullanılan veri bağlama etkin bağımlılıklarda kullanılan veri bağlama referanslarını işler. Bu ayar olmadan, veri bağlama bağımlılıkları gerekli ikili düzeyde kod oluşturmaya sahip olmaz ve derleme hatalarına neden olabilir.
javacopts

Dize listesi; varsayılan değer []'dır.

Bu kitaplık için ek derleyici seçenekleri. "Değişken oluştur" yerine koyma ve Bourne kabuğu belirteçleştirme işlemine tabidir.

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

jvm_flags

Dize listesi; varsayılan değer []'dır.

Bu ikiliyi çalıştırmak için oluşturulan sarmalayıcı komut dosyasına yerleştirilecek işaretlerin listesi. $(location) ve "Make variable" yerine koyma ve Bourne shell belirteçleştirme işlemlerine tabidir.

Bir Java ikilisi için sarmalayıcı komut dosyası, 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 "$@" karakterini içerir. Böylece, sınıf adından sonra diğer bağımsız değişkenleri iletebilirsiniz. Ancak JVM tarafından ayrıştırılması amaçlanan bağımsız değişkenler, komut satırındaki 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 çıktıları üzerinde hiçbir etkisi olmadığını unutmayın.

manifest

Etiket; varsayılan değer None'dir.

Android manifest dosyasının adı (normalde AndroidManifest.xml). resource_files veya assets tanımlanmışsa ya da test edilen kitaplıkların manifest dosyalarından herhangi birinde minSdkVersion etiketi varsa tanımlanmalıdır.
manifest_values

Sözlük: Dize -> Dize; varsayılan değer {}'dır.

Manifest'te geçersiz kılınacak değerlerin sözlüğü. Manifest'teki ${name} örneği, bu sözlükteki adla eşleşen değerle değiştirilir. applicationId, versionCode, versionName, minSdkVersion, targetSdkVersion ve maxSdkVersion, manifest ve uses-sdk etiketlerinin ilgili özelliklerini de geçersiz kılar. packageName yoksayılır ve belirtilmişse applicationId'den, belirtilmemişse manifestteki paketten ayarlanır. manifest_values kullanmak için kuralda manifest olması gerekmez.
nocompress_extensions

Dize listesi; varsayılan değer []'dır.

Kaynak APK'sında sıkıştırılmadan bırakılacak dosya uzantılarının listesi.
plugins

Etiket listesi; varsayılan değer []'dir.

Derleme sırasında çalıştırılacak Java derleyici eklentileri. Bu özellik içinde belirtilen her java_plugin, bu kural her oluşturulduğunda çalıştırılır. Kitaplıklar, exported_plugins kullanan bağımlılıklardan da eklentileri devralabilir. Eklenti tarafından oluşturulan kaynaklar, bu kuralın ortaya çıkan JAR'ına dahil edilir.
resource_configuration_filters

Dize listesi; varsayılan değer []'dır.

Kaynak yapılandırma filtrelerinin listesi (ör. "en"), APK'daki kaynakları yalnızca "en" yapılandırmasındaki kaynaklarla sınırlar.
resource_jars

Etiket listesi; varsayılan değer []'dir.

Kullanımdan kaldırıldı: Bunun yerine java_import ve deps veya runtime_deps kullanın.
resource_strip_prefix

Dize; varsayılan değer ""

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

Belirtilirse bu yol öneki, resources özelliğindeki her dosyadan kaldırılır. Kaynak dosyasının bu dizinde olmaması hatadır. Belirtilmezse (varsayılan), kaynak dosyanın yolu, kaynak dosyaların Java paketiyle aynı mantığa göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt konumundaki bir kaynak dosya, foo/bar/a.txt konumunda yer alır.

runtime_deps

Etiket listesi; varsayılan değer []'dir.

Yalnızca son ikili dosyada veya çalışma zamanında test için kullanılabilir hale getirilecek kitaplıklar. Normal deps gibi bunlar 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 dosyaya kodlanıp kodlanmayacağı. Olası değerler:
  • stamp = 1: Derleme bilgileri, --nostamp derlemelerinde bile her zaman ikiliye damgalanır. Bu ayardan kaçınılmalıdır. Bu ayar, ikili dosya ve buna bağlı tüm aşağı akış işlemleri için uzaktan önbelleğe almayı devre dışı bırakabilir.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu, iyi bir derleme sonucu önbelleğe alma sağlar.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi, --[no]stamp işaretiyle kontrol edilir.

Damgalı ikili dosyalar, bağımlılıkları değişmediği sürece yeniden oluşturulmaz.

test_class

Dize; varsayılan değer ""

Test çalıştırıcı 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. Bu ayarın yapılması nadiren gerekir. Bu bağımsız değişken atlanırsa bu android_local_test kuralının name öğesine karşılık gelen ada sahip Java sınıfı kullanılır. Test sınıfı, org.junit.runner.RunWith ile açıklama eklenmiş olmalıdır.

use_launcher

Boole değeri; varsayılan değer True'dır.

İkilinin özel başlatıcı kullanıp kullanmayacağı.

Bu özellik yanlış olarak ayarlanırsa bu hedef için launcher özelliği ve ilgili --java_launcher işareti yoksayılır.

android_device

Kural kaynağını görüntüleme
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ını doğrudan çalıştırarak başlatılabilir. Kendi kurallarınızı tanımlamak yerine mevcut android_device kurallarını kullanmanız önerilir.

Bu kural, bazel test ve blaze run için --run_under işaretiyle kullanılmaya uygundur. Bir emülatör başlatır, test edilen/çalıştırılan hedefi emülatöre kopyalar ve uygun şekilde test eder veya çalıştırır.

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

Örtülü çıkış hedefleri

  • name_images/userdata.dat: Emülatörü başlatmak için resim dosyaları ve anlık görüntüler içerir.
  • name_images/emulator-meta-data.pb: Emülatöre aktarılıp yeniden başlatılması için gerekli olan seri hale getirilmiş bilgileri içerir.

Örnekler

Aşağıdaki örnekte android_device'ın 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 şunları 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ıç senaryosu 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 kullanıma sunar:

  • --adb_port: adb'nin kullanıma açılacağı bağlantı noktası. Emülatöre adb komutları göndermek istiyorsanız adb connect komutunu bu bağlantı noktasına gönderebilirsiniz.
  • --emulator_port: Emülatörün telnet yönetim konsolunun gösterileceği bağlantı noktası.
  • --enable_display: Doğruysa emülatörü ekranla başlatır (varsayılan olarak yanlıştır).
  • --action: Başlatma veya sonlandırma.
  • --apks_to_install: Emülatöre yüklenecek APK'ların listesi.

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

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'dir.

Emülatörde /default.prop konumuna yerleştirilecek tek bir özellikler dosyası. Bu, kuralı yazan kişinin emülatörü gerçek bir cihaza daha çok benzeyecek şekilde yapılandırmasına olanak tanır (özellikle UserAgent dizelerini ve bir uygulamanın veya sunucunun belirli bir cihaza göre farklı davranmasına neden olabilecek diğer davranışları kontrol etme). Bu dosyadaki özellikler, genellikle emülatör tarafından ayarlanan salt okunur özellikleri (ör. ro.product.model) geçersiz kılar.
horizontal_resolution

Tam sayı; zorunlu

Emüle edilecek yatay ekran çözünürlüğü (piksel). Minimum değer 240'tır.
platform_apks

Etiket listesi; varsayılan değer []'dir.

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

Tam sayı; zorunlu

Cihaz için emüle edilecek RAM miktarı (megabayt cinsinden). Bu ayar, 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'dir.
system_image

Etiket: zorunlu

Aşağıdaki dosyaları içeren bir dosya grubu:
  • system.img: Sistem bölümü
  • kernel-qemu: Emülatörün yükleyeceği Linux çekirdeği
  • ramdisk.img: Başlatma sırasında kullanılacak initrd görüntüsü
  • userdata.img: İlk kullanıcı verileri bölümü
  • source.properties: Resimlerle ilgili bilgileri içeren bir özellikler dosyası
Bu dosyalar Android SDK'sı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

Emüle edilecek dikey ekran çözünürlüğü (piksel). 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örüntüleme
android_ndk_repository(name, api_level, path, repo_mapping)

Android hedeflerinin yerel kodla oluşturulmasını desteklemek için Bazel'i Android NDK kullanacak şekilde yapılandırır.

android_ndk_repository öğesinin bu uygulamasının Starlark'taki bir uygulamayla değiştirildiğini unutmayın. 25 ve sonraki sürümler de dahil olmak üzere NDK'nın gelecekteki sürümleri için destek, android_ndk_repository'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 derleme yapmanın, android_sdk_repository dosyanızda bir WORKSPACE kuralı gerektirdiğini unutmayın.

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

Örnekler

android_ndk_repository(
    name = "androidndk",
)

Yukarıdaki örnek, Android NDK'nizi $ANDROID_NDK_HOME konumunda bulur ve 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, çalışma alanınızın ./android-ndk-r20 bölümünde bulunan Android NDK kullanılır. JNI kodunuzu derlerken API düzeyi 24 kitaplıklarını kullanır.

cpufeatures

Android NDK, bir cihazın CPU'sunu çalışma zamanında algılamak için kullanılabilecek cpufeatures kitaplığını içerir. Aşağıdaki örnekte, Bazel ile cpufeatures'ın 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; zorunlu

Bu hedef için benzersiz bir ad.

api_level

Tamsayı; yapılandırılamaz; varsayılan değer 0

Derleme için kullanılacak Android API düzeyi. Belirtilmezse yüklü en yüksek API düzeyi kullanılır.
path

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

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

Android NDK'yı Android Developers sitesinden indirebilirsiniz.

repo_mapping

Sözlük: Dize -> Dize; varsayılan değer {}'dır.

Yerel depo adından genel depo adına kadar olan sözlük. Bu, bu depodaki bağımlılıklar için çalışma alanı bağımlılığı çözümlemesi üzerinde kontrol sağlar.

Örneğin, "@foo": "@bar" girişi, bu depoda "@foo"'ye bağlı olunan her durumda (ör. "@foo//some:target"'ye bağlılık) bu bağımlılığın aslında genel olarak tanımlanmış "@bar" ("@bar//some:target") içinde çözülmesi gerektiğini belirtir.

android_sdk_repository

Kural kaynağını görüntüleme
android_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)

Android hedeflerinin oluşturulmasını desteklemek için Bazel'i yerel bir Android SDK'sını kullanacak şekilde yapılandırır.

Örnekler

Bazel için bir Android SDK'sı ayarlamak üzere yapmanız gereken minimum işlem, 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 Android SDK'ya yüklenen en yüksek Android API düzeyini ve derleme araçları sürümünü kullanır.
android_sdk_repository(
    name = "androidsdk",
)

Yeniden üretilebilir 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 giden çalışma alanına göreli bir yolun kullanımı da gösterilmektedir. Bu, Android SDK'sı Bazel çalışma alanınızın bir parçasıysa (ör. sürüm kontrolüne dahil edilmişse) kullanışlıdır.

Destek Kitaplıkları

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

Oluşturulan hedeflerin adları, Android Destek Deposu'ndaki kitaplıkların Maven koordinatlarından türetilir ve @androidsdk//${group}:${artifact}-${version} olarak biçimlendirilir. 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; zorunlu

Bu hedef için benzersiz bir ad.

api_level

Tamsayı; yapılandırılamaz; varsayılan değer 0

Varsayılan olarak derleme için kullanılacak Android API düzeyi. Belirtilmezse yüklü olan en yüksek API düzeyi kullanılır.

Belirli bir derleme için kullanılan API düzeyi, android_sdk işaretiyle geçersiz kılınabilir. android_sdk_repository, bu özellik belirtilmiş olsun veya olmasın, SDK'da yüklü her API düzeyi için @androidsdk//:sdk-${level} adlı bir android_sdk hedef oluşturur. Örneğin, varsayılan olmayan bir API düzeyine göre derleme yapmak için: bazel build --android_sdk=@androidsdk//:sdk-19 //java/com/example:app.

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

build_tools_version

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

Android SDK'da kullanılacak Android derleme araçlarının sürümü. Belirtilmezse yüklenen en son derleme araçları sürümü kullanılır.

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

path

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

Android SDK'sına ait mutlak veya göreli yol. Bu özellik veya $ANDROID_HOME ortam değişkeni ayarlanmalıdır.

Android SDK'sı Android Developers sitesinden indirilebilir.

repo_mapping

Sözlük: Dize -> Dize; varsayılan değer {}'dır.

Yerel depo adından genel depo adına kadar olan sözlük. Bu, bu depodaki bağımlılıklar için çalışma alanı bağımlılığı çözümlemesi üzerinde kontrol sağlar.

Örneğin, "@foo": "@bar" girişi, bu depoda "@foo"'ye bağlı olunan her durumda (ör. "@foo//some:target"'ye bağlılık) bu bağımlılığın aslında genel olarak tanımlanmış "@bar" ("@bar//some:target") içinde çözülmesi gerektiğini belirtir.