Android Kuralları

Sorun bildirin Kaynağı göster

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.

Örtük çıkış hedefleri

  • name.apk: Hata ayıklama anahtarlarıyla imzalanan ve sıkıştırılmış bir Android uygulama paketi dosyası, uygulamanızı geliştirmek ve hata ayıklamak için kullanılabilir. Hata ayıklama anahtarlarıyla imzalandığında uygulamanızı serbest bırakamazsınız.
  • name_unsigned.apk: Yukarıdaki dosyanın herkese açık olarak yayınlanmadan önce, sürüm anahtarlarıyla imzalanabilecek imzalanmamış bir sürümüdür.
  • name_deploy.jar: Bu hedefin geçici olarak kapatılmasını içeren bir Java arşivi.

    Dağıtım havuzu, bu hedefin çalışma zamanı sınıf yolunu başından sonuna kadar arayan bir sınıf yükleyici tarafından bulunabilecek tüm sınıfları içerir.

  • name_proguard.jar: ProGuard'ı name_deploy.jar üzerinde çalıştırmanın sonucunu içeren Java arşivi. Bu çıkış yalnızca proGuard_specs özelliği belirtilirse oluşturulur.
  • name_proguard.map: ProGuard'ı name_deploy.jar üzerinde çalıştırmanın bir eşleme dosyası sonucu. Bu çıkış yalnızca proGuard_specs özelliği belirtildiğinde ve proGuard_generate_mapping veyashrink_resources ayarlanmışsa oluşturulur.

Örnekler

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

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

deps

List of labels; optional

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

List of labels; optional

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

.java türündeki srcs dosya derlendi. Okunabilirlik açısından, oluşturulan bir .java kaynak dosyasının adını srcs öğesine yerleştirmek uygun değildir. Bunun yerine, bağımlı kural adını aşağıda açıklandığı gibi srcs bölümüne yerleştirin.

.srcjar türündeki srcs dosya paketinden çıkarıldı ve derlendi. (Bu, Gengenle veya derleme uzantısıyla bir dizi .java dosyası oluşturmanız gerektiğinde yararlıdır.)

assets

List of labels; optional

Paketlenecek öğelerin listesi. Bu, genellikle assets dizini altındaki tüm dosyaların glob kadarıdır. Ayrıca, diğer paketlerde (dosya üreten herhangi bir kural) veya diğer paketlerde dışa aktarılan dosyalara da başvuruda bulunabilirsiniz. Bunun için bu dosyaların tümü, ilgili paketteki assets_dir dizininin altında olmalıdır.
assets_dir

String; optional

assets konumundaki dosyaların yolunu gösteren dize. assets ve assets_dir çiftleri, paketlenmiş öğeleri açıklar ve her iki özelliğin de sağlanması veya ikisinin de sağlanması gerekir.
crunch_png

Boolean; optional; default is True

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

String; optional

Java kaynaklarının oluşturulacağı Java paketi. Paket, kuralı içeren DERLE dosyasının olduğu dizinden varsayılan olarak belirlenir. Farklı bir paket belirtebilirsiniz ancak bu, yalnızca çalışma zamanında algılanacak diğer kitaplıklarla sınıf yolu çakışmalarını sağlayabileceği için kesinlikle önerilmez.
debug_key

Label; optional; default is @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 istemediğiniz için bu özellik atlanmalıdır.

UYARI: Üretim anahtarlarınızı kullanmayın. Anahtarlarınız kesinlikle korunmalıdır ve kaynak ağacınızda saklanmamalıdır.

debug_signing_keys

List of labels; optional

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

UYARI: Üretim anahtarlarınızı kullanmayın. Anahtarlarınız kesinlikle korunmalıdır ve kaynak ağacınızda saklanmamalıdır.

debug_signing_lineage_file

Label; optional

hata ayıklama_işareti_anahtarları için imzalama sırasını içeren dosya. Genellikle, varsayılan anahtar dışında anahtar kullanmak istemediğiniz için bu özellik atlanmalıdır.

UYARI: Üretim anahtarlarınızı kullanmayın. Anahtarlarınız kesinlikle korunmalıdır ve kaynak ağacınızda saklanmamalıdır.

densities

List of strings; optional

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, kafes çekilebilir kaynaklarını kaldırır. Ayrıca, halihazırda bir üst küme girişi içermediyse ilgili uyumlu ekranlar bölümü de manifeste eklenir.
dex_shards

Integer; optional; default is 1

Çözülen parçalama sayısı. Bu sayede, uygulamanın yüklenmesi ve başlatılma zamanı pahasına dexing işlemi çok daha hızlı tamamlanır. İkili ne kadar büyükse o kadar çok parça kullanılmalıdır. 25, deneme yapmaya başlamak için iyi bir değerdir.

Her bir parçanın son uygulamada en az bir dex ile sonuçlanacağını unutmayın. Bu nedenle, sürüm ikili programları için bunu 1'den fazla olarak ayarlamanız önerilmez.

dexopts

List of strings; optional

class.dex oluşturulurken dx aracı için ek komut satırı işaretleri. "Değişken oluşturun" yerine ve Bourne kabuk jetonlarının değiştirilmesine tabidir.
enable_data_binding

Boolean; optional; default is False

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 olmadığında, veri bağlama ifadeleri derleme hataları oluşturur.

Veri bağlama özelliğine sahip bir Android uygulaması oluşturmak için ayrıca aşağıdakileri yapmanız gerekir:

  1. Geçiş yapan bu kurala bağlı olan tüm Android kuralları için bu özelliği ayarlayın. Bunun nedeni, bağımlıların kaynak birleştirme aracılığıyla kuralın veri bağlama ifadelerini devralmasıdır. Ayrıca, bu ifadeleri ayrıştırmak için veri bağlama ile derlemeleri de gerekir.
  2. Veri bağlama çalışma zamanı kitaplığı için bu özelliği ayarlayan tüm hedeflere bir deps = girişi ekleyin. Bu kitaplığın konumu deponuzun ayarlarına bağlıdır.
incremental_dexing

Integer; optional; nonconfigurable; default is -1

Hedefin artımlı dexx ile veya standart dışı olarak derlenmesini zorunlu kılın, varsayılanları ve --incremental_dexing işaretini geçersiz kılın.
instruments

Label; optional

Enstrümanın android_binary hedefi.

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

javacopts

List of strings; optional

Bu hedef için ekstra derleyici seçenekleri. "Değişken oluşturun" yerine ve Bourne kabuk jetonlarının değiştirilmesine tabidir.

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

key_rotation_min_sdk

String; optional

APK'nın imzasını oluşturmak için APK'nın rotasyonlu imza anahtarının kullanılması gereken minimum Android platformu 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

Label; optional

Metin dosyası, sınıf dosya adlarının listesini içerir. Bu sınıf dosyaları tarafından tanımlanan sınıflar birincil sınıflar.dex'e yerleştirilir, ör.
          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

List of strings; optional

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

List of labels; optional

Ana proxy'de tutulması gereken sınıfları belirlemek için ProGuard özellikleri olarak kullanılacak dosyalar. Yalnızca multidex özelliği legacy olarak ayarlanmışsa izin verilir.
manifest

Label; required

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

Dictionary: String -> String; optional

Manifest'te geçersiz kılınacak bir değer sözlüğü. Manifest'teki tüm ${name} örnekleri, bu sözlükteki adlara karşılık gelen değerlerle değiştirilir. appId, versionCode, versionName, minSdkVersion, targetSdkVersion ve maxSdkVersion da manifest'in ve use-sdk etiketlerinin karşılık gelen özelliklerini geçersiz kılar. packageName yoksayılır ve manifest'teki ya da manifest'teki paketten ayarlanır. manifest_merger eski olarak ayarlandığında yalnızca appId, versionCode ve versionName etkisini etkiler.
multidex

String; optional; default is "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ölün. Çalışma zamanında multidex sınıflarını yüklemeyle ilgili yerel platform desteğini varsayar. Bu özellik yalnızca Android L ve daha yeni sürümlerde çalışır.
  • legacy: Dex 64K dizin sınırı aşıldığında kodu birden fazla dex dosyasına bölün. Multidex sınıflarının uygulama kodu üzerinden yüklendiğini (yerel platform desteği olmadığını) varsayarız.
  • manual_main_dex: Dex 64K dizin sınırı aşıldığında kodu birden fazla dex dosyasına bölün. Ana dex dosyasının içeriği, main_dex_list özelliği kullanılarak metin dosyasındaki sınıfların bir listesi sağlanarak belirtilmelidir.
  • off: Dizin sınırını aşsa bile tüm kodu tek bir dex dosyasında derleyin.
nocompress_extensions

List of strings; optional

APK'da sıkıştırılmamış olarak kalacak dosya uzantısı listesi.
package_id

Integer; optional; default is 0

Bu ikili programdaki kaynaklara atanacak paket kimliği.

Daha fazla bilgi için AAPT2'nin --package-id bağımsız değişkenine bakın. Bu ayar genellikle ayarlanmadan bırakılabilir. Bunun sonucunda varsayılan değer 127 (0x7F) olur.

plugins

List of labels; optional

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

Label; optional

ProGuard için eşleme olarak kullanılacak dosya. Kod karartma işlemi sırasında sınıfları ve üyeleri yeniden adlandırırken satırlardan ayrılmış "kelimeler" dosyası.
proguard_apply_mapping

Label; optional

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

Boolean; optional; nonconfigurable; default is False

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

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

proguard_specs

List of labels; optional

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Bu dosyada ProGuard tarafından kullanılacak özellik grubu açıklanmaktadır.
resource_configuration_filters

List of strings; optional

Apk'daki kaynakları yalnızca "en" yapılandırmasındaki kaynaklarla 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ı ekleyin.
resource_files

List of labels; optional

Paketlenecek kaynakların listesi. Bu, genellikle res dizini altındaki tüm dosyaların glob kadarıdır.
Oluşturulan dosyalara (gengen kurallarından) buradan Etiket ile de referans verilebilir. Tek kısıtlama, oluşturulan çıkışların dahil edilen diğer kaynak dosyalarıyla aynı "res" dizininin altında olmasıdır.
shrink_resources

Integer; optional; default is -1

Kaynak küçültme işleminin gerçekleştirilip gerçekleştirilmeyeceği. İkili program tarafından kullanılmayan kaynaklar APK'dan kaldırılır. Bu özellik yalnızca yerel kaynakları (ör. manifest ve resource_files özellikleri) kullanan kurallar için desteklenir ve ProGuard gerektirir. Çoğunlukla Gradle kaynak daraltıcıyla aynı şekilde çalışır (https://developer.android.com/studio/build/shrink-code.html#shrink-resources).

Ö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 etkinleştirilirse name_files/resource_shrinker.log da oluşturulur ve yapılan analiz ve silme işlemlerinin ayrıntıları verilir.

Olası değerler:

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

aar_içe aktarma

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

Name; required

Bu hedef için benzersiz bir ad.

aar

Label; required

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

List of labels; optional

Bu kurala bağlı kurallara dışa aktarılacak hedefler. Bkz. java_library.exports.
srcjar

Label; optional

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

android_kitaplığı

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 çalışma zamanı kitaplığı android.jar, dolaylı olarak derleme sınıfı yoluna yerleştirilir.

Örtük çıkış hedefleri

  • libname.jar: Bir Java arşivi.
  • libname-src.jar: Kaynakları içeren bir arşiv ("kaynak jar").
  • name.aar: Bu hedefin java arşivini ve kaynaklarını içeren bir Android "aar" paketi. Toplu taşıma kapalı değildir.

Örnekler

Android kural örneklerini Basiel 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çermelidir:

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

Name; required

Bu hedef için benzersiz bir ad.

deps

List of labels; optional

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

List of labels; optional

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

.java türündeki srcs dosya derlendi. Okunabilirlik açısından, oluşturulan bir .java kaynak dosyasının adını srcs öğesine yerleştirmek uygun değildir. Bunun yerine, bağımlı kural adını aşağıda açıklandığı gibi srcs bölümüne yerleştirin.

.srcjar türündeki srcs dosya paketinden çıkarıldı ve derlendi. (Bu, Gengenle veya derleme uzantısıyla bir dizi .java dosyası oluşturmanız gerektiğinde yararlıdır.)

srcs atlanırsa deps içinde belirtilen bağımlılık bu kuraldan dışa aktarılır (bağımlılıkları dışa aktarma hakkında daha fazla bilgi için java_library dışa aktarmaları konusuna bakın). Ancak bu davranış yakında kullanımdan kaldırılacaktır. Bu yönteme güvenmemeye çalışın.

assets

List of labels; optional

Paketlenecek öğelerin listesi. Bu, genellikle assets dizini altındaki tüm dosyaların glob kadarıdır. Ayrıca, diğer paketlerde (dosya üreten herhangi bir kural) veya diğer paketlerde dışa aktarılan dosyalara da başvuruda bulunabilirsiniz. Bunun için bu dosyaların tümü, ilgili paketteki assets_dir dizininin altında olmalıdır.
assets_dir

String; optional

assets konumundaki dosyaların yolunu gösteren dize. assets ve assets_dir çiftleri, paketlenmiş öğeleri açıklar ve her iki özelliğin de sağlanması veya ikisinin de sağlanması gerekir.
custom_package

String; optional

Java kaynaklarının oluşturulacağı Java paketi. Paket, kuralı içeren DERLE dosyasının olduğu dizinden varsayılan olarak belirlenir. Farklı bir paket belirtebilirsiniz ancak bu, yalnızca çalışma zamanında algılanacak diğer kitaplıklarla sınıf yolu çakışmalarını sağlayabileceği için kesinlikle önerilmez.
enable_data_binding

Boolean; optional; default is False

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 olmadığında, veri bağlama ifadeleri derleme hataları oluşturur.

Veri bağlama özelliğine sahip bir Android uygulaması oluşturmak için ayrıca aşağıdakileri yapmanız gerekir:

  1. Geçiş yapan bu kurala bağlı olan tüm Android kuralları için bu özelliği ayarlayın. Bunun nedeni, bağımlıların kaynak birleştirme aracılığıyla kuralın veri bağlama ifadelerini devralmasıdır. Ayrıca, bu ifadeleri ayrıştırmak için veri bağlama ile derlemeleri de gerekir.
  2. Veri bağlama çalışma zamanı kitaplığı için bu özelliği ayarlayan tüm hedeflere bir deps = girişi ekleyin. Bu kitaplığın konumu deponuzun ayarlarına bağlıdır.
exported_plugins

List of labels; optional

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

Belirtilen java_plugin listesi, doğrudan bu kitaplığa bağımlı olan kitaplıklara uygulanır (ör. bu kitaplık plugins etiketinde bu etiketleri açıkça beyan etmiş gibi).

exports

List of labels; optional

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

exports, ait olduğu kuralın doğrudan ayrımı değildir.

exports_manifest

Integer; optional; default is 1

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

String; optional

Bu kitaplıkta yer alan idl kaynaklarını içeren java paket ağacının köküne giden pakete özgü yol.

Bu kitaplığa bağımlı olan boşta kalma kaynakları işlenirken bu kök, 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 paketleri tarafından belirtilen yolda olmalıdır.

Örnekleri inceleyin.

idl_parcelables

List of labels; optional

İçe aktarma olarak sunulacak Android IDL tanımlarının listesi. Bu dosyalar, doğrudan veya geçişli kapalı aracılığıyla bu kitaplığa bağımlı olan tüm android_library hedefleri için içe aktarma olarak sunulacak ancak Java'ya çevrilmeyecek veya derlenmeyecektir.

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

Bu dosyalar, usta derleyicinin 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

List of labels; optional

İçe aktarma olarak sunulacak önceden işlenmiş Android IDL tanımlarının listesi. Bu dosyalar, doğrudan veya geçişli kapalı aracılığıyla bu kitaplığa bağımlı olan tüm android_library hedefleri için içe aktarma olarak sunulacak ancak Java'ya çevrilmeyecek veya derlenmeyecektir.

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

idl_srcs

List of labels; optional

Java arayüzlerine dönüştürülecek Android IDL tanımlarının listesi. Java arayüzleri oluşturulduktan sonra, bu arayüzler srcs içeriğiyle birlikte derlenir.

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

Bu dosyalar, usta derleyicinin 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

List of strings; optional

Bu hedef için ekstra derleyici seçenekleri. "Değişken oluşturun" yerine ve Bourne kabuk jetonlarının değiştirilmesine tabidir.

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

manifest

Label; optional

Android manifest dosyasının adı (genellikle AndroidManifest.xml). source_files veya assets tanımlanırsa tanımlanmalıdır.

Boolean; optional; default is False

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

List of labels; optional

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

List of labels; optional

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Bunlar, ProGuard tarafından kullanılacak özellik grubunu tanımlar. Belirtilirse bu kitaplığa bağlı olarak tüm android_binary hedeflerine eklenir. Burada yer alan dosyaların yalnızca kimliği tanımlayabilecek kuralları (-dontnote, -dontwarn, varsanosideimpacts) ve -keep ile başlayan kurallar olmalıdır. Diğer seçenekler, otomatik olmayan birleşmeleri sağlamak için yalnızca android_binary proGuard_specs'inde gösterilebilir.
resource_files

List of labels; optional

Paketlenecek kaynakların listesi. Bu, genellikle res dizini altındaki tüm dosyaların glob kadarıdır.
Oluşturulan dosyalara (gengen kurallarından) buradan Etiket ile de referans verilebilir. Tek kısıtlama, oluşturulan çıkışların dahil edilen diğer kaynak dosyalarıyla aynı "res" dizininin altında olmasıdır.

Android_Araçları_Testi

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)

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 ve test paketinde tanımlanan testleri çalıştırır.

test_app özelliği, testi içeren android_binary özelliğini belirtir. Buna karşılık, bu android_binary, tools ö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

Name; required

Bu hedef için benzersiz bir ad.

support_apks

List of labels; optional

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

Label; required

Testin çalışması gereken android_device.

Testi zaten çalışan bir emülatörde veya fiziksel 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; required

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ın yerel olarak (cihaz üzerinde değil) yerel olarak test edilmesi için geçerlidir. Android Robolectric test çerçevesiyle çalışır. Robolectric testlerini yazmayla ilgili ayrıntılar için Android Robolectric sitesine bakın.

Örtük çı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 istendiğinde oluşturulur).

Örnekler

Robolectric'i android_local_test ile kullanmak için robolectric'in deposunu WORKSPACE dosyanıza 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 öğesine dayalı 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

Name; required

Bu hedef için benzersiz bir ad.

deps

List of labels; optional

Test edilecek kitaplıkların listesi ve hedefe bağlanacak ek kitaplıklar. Bu özelliğin geçici olarak kapatılması sırasında Android kurallarında belirtilen tüm kaynaklar, öğeler ve manifest dosyaları testte kullanılabilir hale gelir.

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

srcs

List of labels; optional

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

.java türündeki srcs dosya derlendi. Okunabilirlik açısından, oluşturulan bir .java kaynak dosyasının adını srcs öğesine yerleştirmek uygun değildir. Bunun yerine, bağımlı kural adını aşağıda açıklandığı gibi srcs bölümüne yerleştirin.

.srcjar türündeki srcs dosya paketinden çıkarıldı ve derlendi. (Bu, Gengenle veya derleme uzantısıyla bir dizi .java dosyası oluşturmanız gerektiğinde yararlıdır.)

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 hata oluşur.

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

custom_package

String; optional

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

List of strings; optional

APK oluşturulurken filtrelenecek yoğunluklar. Ayrıca, halihazırda üst küme StarlarkListing içermiyorsa manifeste karşılık gelen bir uyumlu ekranlar bölümü de eklenir.
enable_data_binding

Boolean; optional; default is False

Doğruysa bu kural, bu test tarafından kullanılan veri bağlamanın etkin olduğu bağımlılıklarda kullanılan veri bağlama başvurularını işler. Bu ayar olmadan, veri bağlama bağımlılıkları gerekli ikili düzey kod oluşturma özelliğine sahip olmaz ve derleme hataları oluşturabilir.
javacopts

List of strings; optional

Bu kitaplık için ekstra derleyici seçenekleri. "Değişken oluşturun" yerine ve Bourne kabuk jetonlarının değiştirilmesine tabidir.

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

jvm_flags

List of strings; optional

Bu ikili programın çalıştırılması için oluşturulan sarmalayıcı komut dosyasına yerleştirilen işaretlerin listesi. $(location), "Değişken oluştur" değişikliği ve Bourne kabuk jetonları geçerlidir.

Java ikili programının sarmalayıcı komut dosyası, bağımlı tüm jar'ları bulmak için bir CLASSPATH tanımı içerir ve doğru Java çevirmeni çağırır. Sarmalayıcı komut dosyası tarafından oluşturulan komut satırında, ana sınıfın adı ve ardından bir "$@" adı bulunur. Böylece sınıf adından sonra diğer bağımsız değişkenleri de 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 çıkışları üzerinde etkisi olmadığını unutmayın.

manifest

Label; optional

Android manifest dosyasının adı (genellikle AndroidManifest.xml). source_files veya öğeler tanımlanırsa veya test edilen kitaplıklardaki manifestlerden herhangi birinde minSdkVersion etiketi varsa tanımlanmalıdır.
manifest_values

Dictionary: String -> String; optional

Manifest'te geçersiz kılınacak bir değer sözlüğü. Manifest'teki tüm ${name} örnekleri, bu sözlükteki adlara karşılık gelen değerlerle değiştirilir. applicationId, versionCode, versionName, minSdkVersion, targetSdkVersion ve maxSdkVersion de manifestin ve use-sdk etiketlerinin karşılık gelen özelliklerini geçersiz kılar. Belirtilirse packageName yok sayılır ve manifestteki applicationId öğesinden veya manifest'teki paketten ayarlanır. manifest_values değerini kullanmak için kuralda bir manifest olması gerekmez.
nocompress_extensions

List of strings; optional

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

List of labels; optional

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

List of strings; optional

APK'daki kaynakları yalnızca "en" yapılandırmasındaki kaynaklarla sınırlayan "en" gibi kaynak yapılandırma filtrelerinin listesi.
resource_jars

List of labels; optional

Kullanımdan kaldırıldı: Bunun yerine java_import ve deps ya da çalışma zamanı_deps seçeneklerini kullanın.
resource_strip_prefix

String; optional

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

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

runtime_deps

List of labels; optional

Nihai ikili programın veya çalışma zamanında test edilmesi için kullanılacak kitaplıklar. Normal deps gibi bunlar da çalışma zamanı sınıf yolunda görünür ancak derleme zamanı yol 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

Integer; optional; default is 0

Derleme bilgilerinin ikili program için kodlanıp kodlanmayacağını belirler. Olası değerler:
  • stamp = 1: --nostamp derlemelerinde bile derleme bilgilerini her zaman ikili programa damgalayın. İkili ayarlar ve ona bağlı tüm aşağı akış işlemleri için uzaktan önbelleğe alma potansiyelini kaldırabileceğinden bu ayardan kaçınılmalıdır.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu sayede derleme sonuçlarını iyi bir şekilde önbelleğe alabilirsiniz.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi --[no]stamp işareti tarafından kontrol edilir.

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

test_class

String; optional

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

Bu özellik, bu test tarafından çalıştırılacak Java sınıfının adını belirtir. Bunu ayarlamak çok ender rastlanan bir durum. Bu bağımsız değişken atlanırsa adı bu android_local_test kuralının name öğesine karşılık gelen Java sınıfı kullanılır. Test sınıfının org.junit.runner.RunWith ile açıklanması gerekir.

use_launcher

Boolean; optional; default is True

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

Bu özellik yanlış değerine ayarlanırsa launch özelliği ve ilgili --java_launcher işareti bu hedef için yok sayılır.

android_cihazı

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 spesifikasyonlarla yapılandırılmış bir Android emülatörü oluşturur. Bu emülatör, bir bazel çalıştırma komutuyla veya oluşturulan komut dosyası doğrudan yürütülerek başlatılabilir. Kendi android cihazınızı tanımlamak yerine mevcut android_device kurallarına güvenmeniz önerilir.

Bu kural, test ve son test çalıştırması için --run_under işareti için uygun bir hedeftir. Bir emülatör başlatır, test edilen/çalıştırılan hedefi kopyalar ve emülatöre kopyalar, test eder veya uygun şekilde ç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.

Örtük çı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örü yeniden başlatmak için gereken serileştirilmiş bilgileri içerir.

Örnekler

Aşağıdaki örnekte android_device cihazını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 başlangıç komut dosyası oluşturur. bazel çalıştırma: :nexus_s -- --action=start komutunu çalıştırarak emülatörü yerel olarak başlatabilirsiniz. Komut dosyası aşağıdaki işaretleri açığa çıkarır:

  • --adb_port: Adb'nin gösterildiği bağlantı noktası. Emülatöre adb komutları yayınlamak isterseniz adb'ye bağlanacağınız bağlantı noktası budur.
  • --emulator_port: Emülatörün telnet yönetim konsolunun gösterildiği bağlantı noktası.
  • --enable_display: Doğruysa (emülatörü yanlış) varsayılan olarak emülatörü başlatır.
  • --action: Başlatın veya öldürün.
  • --apks_to_install: emülatöre yüklenecek apk'lerin listesi.

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

cache

Integer; required

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

Label; optional

Emülatörde /default.prop'a yerleştirilecek tek bir özellik dosyası. Bu, kural yazarının, emülatörü daha çok gerçek bir cihaza benzeyecek şekilde yapılandırmasını sağlar (özellikle de UserAgent dizelerini ve uygulamanın ya da sunucunun belirli bir cihazla farklı davranmasına neden olabilecek diğer davranışları kontrol etmesi). Bu dosyadaki özellikler, ro.product.model gibi genellikle emülatör tarafından ayarlanan salt okunur özellikleri geçersiz kılar.
horizontal_resolution

Integer; required

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

List of labels; optional

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

Integer; required

Cihazın emülasyonu için 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

Integer; required

Öykünülen ekranın inç başına piksel cinsinden yoğunluğu. Bunun minimum değeri 30 ppi'dir.
system_image

Label; required

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

Integer; required

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

Integer; required

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_depo

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

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

android_ndk_repository uygulamasının bu sürümünün yerini Starlark uygulamasında bir uygulama aldığını unutmayın. NDK'nın 25 ve sonraki sürümleri dahil olmak üzere 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 sayfasına göz atın.

Android için derlemenin WORKSPACE dosyanızda de bir android_sdk_repository kuralı gerektiğini unutmayın.

Daha fazla bilgi için Android NDK'yı Bazel ile kullanma hakkındaki belgelerin tamamını okuyun.

Örnekler

android_ndk_repository(
    name = "androidndk",
)

Yukarıdaki örnek, $ANDROID_NDK_HOME cihazından Android NDK'nızı bulur ve desteklediği en yüksek API düzeyini tespit eder.

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

Yukarıdaki örnekte, ./android-ndk-r20 içindeki çalışma alanınızın içinde bulunan Android NDK kullanılacak. JNI kodunuzu derlerken API düzeyi 24 kitaplıklarını kullanır.

cpuözellikleri

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

Name; required

Bu hedef için benzersiz bir ad.

api_level

Integer; optional; nonconfigurable; default is 0

Kendinizi geliştireceğiniz Android API düzeyi. Belirtilmezse en yüksek API düzeyi kullanılır.
path

String; optional; nonconfigurable

Bir Android NDK'ya yönelik mutlak veya göreli 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

Dictionary: String -> String; optional

Yerel kod deposu adından genel depo adına bir sözlük. Bu, bu deponun bağımlılıkları için çalışma alanı bağımlılığı denetimine olanak tanır.

Örneğin, bir giriş "@foo": "@bar" bu deponun "@foo" bağımlılığına ("@foo//some:target" bağımlılığı gibi) yönelik her zaman, dünya genelinde beyan edilen "@bar" ("@bar//some:target") içindeki bu bağımlılığı çözmesi gerektiğini beyan eder.

android_sdk_deposu

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

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

Örnekler

Bazel için Android SDK'yı kurmak üzere en az, WORKSPACE dosyanıza "androidsdk" adlı bir android_sdk_repository kuralı yerleştirmeniz ve $ANDROID_HOME ortam değişkenini Android SDK'nızın yoluna ayarlamanız gerekir. Bazel varsayılan olarak en yüksek Android API düzeyini kullanacak ve Android SDK'da yüklü olan araçlar oluşturacaktır.
android_sdk_repository(
    name = "androidsdk",
)

Tekrarlanabilir 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 örnek, Android SDK'sı için çalışma alanına bağlı bir yol kullanımını da göstermektedir. Bu işlem, Android SDK'sının Bazel çalışma alanınızın bir parçası olması durumunda yararlıdır (ör. sürüm denetimine dahil edilmişse).

Destek Kitaplıkları

Destek Kitaplıkları, Android SDK Manager'da "Android Support Repository" olarak kullanılabilir. Bu, Yerel Maven deposu olarak paketlenmiş olan, Destek ve AppCompat kitaplıkları gibi ortak Android kitaplıklarının oluşturulmuş bir grubudur. android_sdk_repository, bu kitaplıkların her biri için Bazel hedefleri oluşturur. Bu hedefler android_binary ve android_library hedeflerinin bağımlılarında kullanılabilir.

Oluşturulan hedeflerin adları, @androidsdk//${group}:${artifact}-${version} olarak biçimlendirilmiş Android Destek Deposu'ndaki kitaplıkların Maven koordinatlarından türetilir. Aşağıdaki örnekte android_library ürününün 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

Name; required

Bu hedef için benzersiz bir ad.

api_level

Integer; optional; nonconfigurable; default is 0

Varsayılan olarak derleme yapılacak Android API düzeyi. Belirtilmezse en yüksek API düzeyi kullanılır.

Belirli bir derleme için kullanılan API düzeyi, android_sdk işareti tarafından geçersiz kılınabilir. android_sdk_repository, SDK'da @androidsdk//:sdk-${level} adı verilen her API düzeyi için bu özelliğin belirtilmiş olup olmamasına bakılmaksızın bir android_sdk hedefi oluşturur. Örneğin, varsayılan olmayan bir API düzeyine göre derlemek 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

String; optional; nonconfigurable

Android SDK'sında kullanılabilen Android derleme araçlarının sürümü. Belirtilmezse en son derleme araçları sürümü kullanılır.

Bazel, derleme araçları için sürüm 30.0.0 veya sonrası gerektirir.

path

String; optional; nonconfigurable

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

Android SDK'sı Android geliştirici sitesinden indirilebilir.

repo_mapping

Dictionary: String -> String; optional

Yerel kod deposu adından genel depo adına bir sözlük. Bu, bu deponun bağımlılıkları için çalışma alanı bağımlılığı denetimine olanak tanır.

Örneğin, bir giriş "@foo": "@bar" bu deponun "@foo" bağımlılığına ("@foo//some:target" bağımlılığı gibi) yönelik her zaman, dünya genelinde beyan edilen "@bar" ("@bar//some:target") içindeki bu bağımlılığı çözmesi gerektiğini beyan eder.