Kurallar
- android_binary
- aar_import
- android_library
- android_instrumentation_test
- android_local_test
- android_device
- android_ndk_repository
- android_sdk_repository
android_binary
Kural kaynağını görüntülemeandroid_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 paketi dosyası. Uygulamanızı geliştirmek ve hata ayıklamak için kullanılabilir. Uygulamanızı hata ayıklama anahtarlarıyla imzaladığınızda yayınlayamazsınız.name_unsigned.apk
: Yukarıdaki dosyanın, herkese açık olarak yayınlanmadan önce sürüm anahtarlarıyla imzalanabilen imzasız sürümü.name_deploy.jar
: Bu hedefin geçişli kapatmasını içeren bir Java arşivi.Dağıtım jar'ı, bu hedefin çalışma zamanı sınıf yolunu baştan sona arayan bir sınıf yükleyici tarafından bulunacak tüm sınıfları içerir.
name_proguard.jar
:name_deploy.jar
üzerinde ProGuard çalıştırmanın sonucunu içeren bir Java arşivi. Bu çıkış yalnızca proguard_specs özelliği 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 ö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
|
Etiketler listesi; varsayılan değer android_library ,
java_library android kısıtlaması ile ve
cc_library Android hedef platform için .so yerel kitaplıklarını sarmalayan veya üreten.
|
srcs
|
Etiketler listesi; varsayılan değer
|
assets
|
Etiketler listesi; varsayılan değer assets dizininin altındaki tüm dosyaların glob 'sidir. Ayrıca, tüm bu dosyalar ilgili paketteki assets_dir dizininde olduğu sürece diğer paketlerdeki diğer kurallara (dosya oluşturan tüm kurallar) veya dışa aktarılan dosyalara da referans verebilirsiniz.
|
assets_dir
|
Dize; varsayılan değer assets klasöründeki dosyaların yolunu veren dize.
assets ve assets_dir çifti, paketlenmiş öğeleri tanımlar ve bu özelliklerin ikisi de veya hiçbiri sağlanmalıdır.
|
crunch_png
|
Boole; varsayılan değer |
custom_package
|
Dize; varsayılan değer |
debug_key
|
Etiket; varsayılan değer UYARI: Üretim anahtarlarınızı kullanmayın. Bu anahtarlar kesinlikle korunmalı ve kaynak ağacınızda tutulmamalıdır. |
debug_signing_keys
|
Etiketler listesi; varsayılan değer UYARI: Üretim anahtarlarınızı kullanmayın. Bu anahtarlar kesinlikle korunmalı ve kaynak ağacınızda tutulmamalıdır. |
debug_signing_lineage_file
|
Etiket; varsayılan değer UYARI: Üretim anahtarlarınızı kullanmayın. Bu anahtarlar kesinlikle korunmalı ve kaynak ağacınızda tutulmamalıdır. |
densities
|
Dize listesi; varsayılan değer |
dex_shards
|
Tam sayı; varsayılan değer Her bir parçanın nihai uygulamada en az bir dex dosyasına yol açacağını unutmayın. Bu nedenle, bu değerin 1'den fazla olarak ayarlanması, sürüm ikili dosyaları için önerilmez. |
dexopts
|
Dize listesi; varsayılan değer |
enable_data_binding
|
Boole; varsayılan değer Veri bağlama özelliğine sahip bir Android uygulaması oluşturmak için aşağıdakileri de yapmanız gerekir:
|
incremental_dexing
|
Tamsayı; yapılandırılamaz; varsayılan değer |
instruments
|
Etiket; varsayılan değer Ölçüm yapılacak Bu özellik ayarlanırsa bu |
javacopts
|
Dize listesi; varsayılan değer Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'a iletilir. |
key_rotation_min_sdk
|
Dize; varsayılan değer |
main_dex_list
|
Etiket; varsayılan değer 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 |
main_dex_proguard_specs
|
Etiketler listesi; varsayılan değer multidex özelliği legacy olarak ayarlandıysa izin verilir.
|
manifest
|
Etiket; zorunlu Android manifest dosyasının adı (genellikleAndroidManifest.xml ).
resource_files veya assets tanımlanmışsa tanımlanmalıdır.
|
manifest_values
|
Sözlük: Dize -> Dize; varsayılan değer
Manifest'teki tüm
|
multidex
|
Dize; varsayılan değer Olası değerler:
|
nocompress_extensions
|
Dize listesi; varsayılan değer |
package_id
|
Tam sayı; varsayılan değer Daha fazla bilgi için AAPT2'nin |
plugins
|
Etiketler listesi; varsayılan değer java_plugin , bu hedef derlendiğinde çalıştırılır. Eklenti tarafından oluşturulan kaynaklar, hedefin sonuç jar dosyasına dahil edilir.
|
proguard_apply_dictionary
|
Etiket; varsayılan değer |
proguard_apply_mapping
|
Etiket; varsayılan değer proguard_generate_mapping tarafından oluşturulan ve aynı eşlemeyi yeni bir derlemeye uygulamak için yeniden kullanılacak bir eşleme dosyası.
|
proguard_generate_mapping
|
Boole; yapılandırılamaz; varsayılan değer proguard_specs belirtilirse oluşturulur. Bu dosyada, orijinal ile karartılmış sınıf, yöntem ve alan adları arasındaki eşleme listelenir.
UYARI: Bu özellik kullanılıyorsa Proguard spesifikasyonu |
proguard_specs
|
Etiketler listesi; varsayılan değer |
resource_configuration_filters
|
Dize listesi; varsayılan değer en_XA ve/veya ar_XB sanal yerel ayarlarını ekleyin.
|
resource_files
|
Etiketler listesi; varsayılan değer res dizininin altındaki tüm dosyaların glob 'sidir.
Oluşturulan dosyalar (genrules'den) buradaki Etiket ile de referans verilebilir. Tek kısıtlama, oluşturulan çıkışların, dahil edilen diğer tüm kaynak dosyalarıyla aynı " res " dizininde olmasıdır.
|
shrink_resources
|
Tam sayı; varsayılan değer manifest ve resource_files özellikleri) kullanan kurallar için desteklenir ve ProGuard gerektirir.
Çoğunlukla Gradle kaynak sıkıştırıcısıyla (https://developer.android.com/studio/build/shrink-code.html#shrink-resources) aynı şekilde çalışır.
Önemli farklılıklar:
name_files/resource_shrinker.log da oluşturulur. Bu dosya, yapılan analizleri ve silme işlemlerini ayrıntılı olarak belirtir.
Olası değerler:
|
aar_import
Kural kaynağını görüntülemeaar_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, android_library
ve android_binary
kuralları için .aar
dosyalarının kitaplık olarak kullanılmasına olanak tanır.
Ö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
|
Etiketler listesi; varsayılan değer |
srcjar
|
Etiket; varsayılan değer |
android_library
Kural kaynağını görüntülemeandroid_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ında arşivler.
Android çalışma zamanı kitaplığı android.jar
, derleme sınıf yoluna dolaylı olarak yerleştirilir.
Örtülü çıkış hedefleri
libname.jar
: Java arşivi.libname-src.jar
: Kaynakları ("source 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 kapatma içermez.
Örnekler
Android kurallarına örnekleri Bazel kaynak ağacının examples/android
dizininde bulabilirsiniz.
Aşağıdaki örnekte idl_import_root
değerinin nasıl ayarlanacağı gösterilmektedir.
//java/bazel/helloandroid/BUILD
şunu 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
|
Etiketler listesi; varsayılan değer android_library ,
java_library android kısıtlaması ile ve
cc_library Android hedef platformu için .so yerel kitaplıklarını sarmalayan veya üreten.
|
srcs
|
Etiketler listesi; varsayılan değer .java veya .srcjar dosyalarının listesi.
|
assets
|
Etiketler listesi; varsayılan değer assets dizininin altındaki tüm dosyaların glob 'sidir. Ayrıca, tüm bu dosyalar ilgili paketteki assets_dir dizininde olduğu sürece diğer paketlerdeki diğer kurallara (dosya oluşturan tüm kurallar) veya dışa aktarılan dosyalara da referans verebilirsiniz.
|
assets_dir
|
Dize; varsayılan değer assets klasöründeki dosyaların yolunu veren dize.
assets ve assets_dir çifti, paketlenmiş öğeleri tanımlar ve bu özelliklerin ikisi de veya hiçbiri sağlanmalıdır.
|
custom_package
|
Dize; varsayılan değer |
enable_data_binding
|
Boole; varsayılan değer Veri bağlama özelliğine sahip bir Android uygulaması oluşturmak için aşağıdakileri de yapmanız gerekir:
|
exported_plugins
|
Etiketler listesi; varsayılan değer java_plugin 'lerin (ör. ek açıklama işleyiciler) listesi.
Belirtilen |
exports
|
Etiketler listesi; varsayılan değer exports özellikleri aracılığıyla erişilen tüm kuralların kapatılması, exports ile doğrudan hedefe bağlı olan tüm kuralların doğrudan bağımlılıkları olarak kabul edilir.
|
exports_manifest
|
Tam sayı; varsayılan değer android_binary hedeflerine 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ığa bağlı idl kaynakları işlenirken bu yol, içe aktarma kökü olarak kullanılır.
Örneğine bakın. |
idl_parcelables
|
Etiketler listesi; varsayılan değer android_library hedefleri için içe aktarma dosyası olarak kullanılabilir ancak Java'ya çevrilmez veya derlenmez.
Yalnızca bu kitaplıktaki Bu dosyalar, aidl derleyicisinin bulabilmesi için uygun şekilde yerleştirilmelidir. Bunun ne anlama geldiği hakkında bilgi için idl_import_root özelliğinin açıklamasına bakın. |
idl_preprocessed
|
Etiketler listesi; varsayılan değer android_library hedefleri için içe aktarma dosyası olarak kullanılabilir ancak Java'ya çevrilmez veya derlenmez.
Yalnızca bu kitaplıktaki |
idl_srcs
|
Etiketler listesi; varsayılan değer srcs içeriğiyle birlikte derlenir.
Bu dosyalar, bu kitaplığa doğrudan veya geçişli kapatma yoluyla bağlı olan tüm Bu dosyalar, aidl derleyicisinin bulabilmesi için uygun şekilde yerleştirilmelidir. Bunun ne anlama geldiği hakkında bilgi için idl_import_root özelliğinin açıklamasına bakın. |
javacopts
|
Dize listesi; varsayılan değer Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'a iletilir. |
manifest
|
Etiket; varsayılan değer AndroidManifest.xml ).
resource_files veya assets tanımlanmışsa tanımlanmalıdır.
|
neverlink
|
Boole; varsayılan değer neverlink olarak işaretlenen 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 kullanışlıdır.
|
plugins
|
Etiketler listesi; varsayılan değer java_plugin , bu hedef derlendiğinde çalıştırılır. Eklenti tarafından oluşturulan kaynaklar, hedefin sonuç jar dosyasına dahil edilir.
|
proguard_specs
|
Etiketler listesi; varsayılan değer android_binary hedeflerine eklenir.
Buraya dahil edilen dosyalarda yalnızca idempotent kurallar (ör. -dontnote, -dontwarn, assumenosideeffects ve -keep ile başlayan kurallar) bulunmalıdır. Diğer seçenekler, tautolojik olmayan birleştirmelerden emin olmak için yalnızca android_binary 'nın proguard_specs dosyasında görünebilir.
|
resource_files
|
Etiketler listesi; varsayılan değer res dizininin altındaki tüm dosyaların glob 'sidir.
Oluşturulan dosyalar (genrules'den) buradaki Etiket ile de referans verilebilir. Tek kısıtlama, oluşturulan çıkışların, dahil edilen diğer tüm kaynak dosyalarıyla aynı " res " dizininde olmasıdır.
|
android_instrumentation_test
Kural kaynağını görüntülemeandroid_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
|
Etiketler listesi; varsayılan değer |
target_device
|
Etiket; zorunlu Testin çalıştırılması gereken android_device. Testi, çalışan bir emülatörde veya fiziksel bir cihazda çalıştırmak için şu bağımsız değişkenleri kullanın:
|
test_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ülemeandroid_local_test(name, deps, srcs, data, args, compatible_with, custom_package, densities, deprecation, enable_data_binding, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, licenses, local, manifest, manifest_values, nocompress_extensions, plugins, resource_configuration_filters, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, shard_count, size, stamp, tags, target_compatible_with, test_class, testonly, timeout, toolchains, use_launcher, visibility)
Bu kural, android_library
kurallarını yerel olarak (cihaz üzerinde değil) birim testi içindir.
Android Robolectric test çerçevesiyle çalışır.
Robolectric testi yazma hakkında ayrıntılı bilgi için Android Robolectric sitesine bakın.
Örtülü çıkış hedefleri
name.jar
: Testin Java arşivi.name-src.jar
: Kaynakları içeren bir arşiv ("source 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()
maven_jar
kurallarını getirir.
Ardından her android_local_test
kuralı @robolectric//bazel:robolectric
'a 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
|
Etiketler listesi; varsayılan değer
|
srcs
|
Etiketler listesi; varsayılan değer
Yukarıda açıklanan dosya türünde en az bir dosya bulunduğu sürece diğer tüm dosyalar yoksayılır. Aksi takdirde bir hata meydana gelir.
|
custom_package
|
Dize; varsayılan değer test_class özelliğini de kullanmanız gerekir.
|
densities
|
Dize listesi; varsayılan değer |
enable_data_binding
|
Boole; varsayılan değer |
javacopts
|
Dize listesi; varsayılan değer Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'a iletilir. |
jvm_flags
|
Dize listesi; varsayılan değer Java ikili dosyası için sarmalayıcı komut dosyası, CLASSPATH tanımı (tüm bağımlı jar dosyalarını bulmak için) içerir 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 Bu özelliğin |
manifest
|
Etiket; varsayılan değer AndroidManifest.xml ).
resource_files veya assets tanımlanmışsa ya da test edilen kütüphanelerdeki manifest dosyalarından herhangi birinde minSdkVersion etiketi varsa tanımlanmalıdır.
|
manifest_values
|
Sözlük: Dize -> Dize; varsayılan değer applicationId , versionCode , versionName ,
minSdkVersion , targetSdkVersion ve
maxSdkVersion , manifest ile uses-sdk etiketlerinin ilgili özelliklerini de geçersiz kılar. packageName yoksayılır ve belirtilmişse applicationId 'ten veya manifest'teki paketten ayarlanır.
manifest_values parametresini kullanmak için kuralda bir manifest dosyasının bulunması gerekmez.
|
nocompress_extensions
|
Dize listesi; varsayılan değer |
plugins
|
Etiketler listesi; varsayılan değer java_plugin , bu kural derlendiğinde çalıştırılır. Bir kitaplık, exported_plugins kullanan bağımlılıklardan da eklentileri devralabilir. Eklenti tarafından oluşturulan kaynaklar, bu kuralın oluşturulan jar dosyasına dahil edilir.
|
resource_configuration_filters
|
Dize listesi; varsayılan değer |
resource_jars
|
Etiketler listesi; varsayılan değer |
resource_strip_prefix
|
Dize; varsayılan değer
Belirtilirse bu yol ön eki, |
runtime_deps
|
Etiketler listesi; varsayılan değer deps gibi bunlar da çalışma zamanı sınıf yolu üzerinde görünür ancak bunların aksine derleme zamanı sınıf yolu üzerinde görünmez. Yalnızca çalışma zamanında ihtiyaç duyulan bağımlılar burada listelenmelidir. Bağımlılık analizi araçları hem runtime_deps hem de deps 'te görünen hedefleri yoksamalıdır.
|
stamp
|
Tam sayı; varsayılan değer
Damgalanmış ikili dosyalar, bağımlılıkları değişmediği sürece yeniden oluşturulmaz. |
test_class
|
Dize; varsayılan değer
Bu özellik, bu test tarafından çalıştırılacak bir Java sınıfının adını belirtir. Bu ayarı yapmanız gerekmez. Bu bağımsız değişken atlanırsa adı bu |
use_launcher
|
Boole; varsayılan değer Bu özellik yanlış değerine ayarlanırsa launcher özelliği ve ilgili |
android_device
Kural kaynağını görüntülemeandroid_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, bazel run komutuyla veya oluşturulan komut dosyası doğrudan çalıştırılarak başlatılabilir. Kendi kurallarınızı tanımlamak yerine mevcut android_device kurallarına bağlı kalmanız önerilir.
Bu kural, bazel testi ve blaze çalıştırma 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 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 resimleri 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ını ve anlık görüntüleri içerirname_images/emulator-meta-data.pb
: Emülatöre aktarılması ve yeniden başlatılması için gereken serileştirilmiş bilgileri içerir.
Örnekler
Aşağıdaki örnekte, android_device özelliğinin nasıl kullanılacağı gösterilmektedir.
//java/android/helloandroid/BUILD
şunu içerir:
android_device( name = "nexus_s", cache = 32, default_properties = "nexus_s.properties", horizontal_resolution = 480, ram = 512, screen_density = 233, system_image = ":emulator_images_android_16_x86", vertical_resolution = 800, vm_heap = 32, ) filegroup( name = "emulator_images_android_16_x86", srcs = glob(["androidsdk/system-images/android-16/**"]), )
//java/android/helloandroid/nexus_s.properties
şunu içerir:
ro.product.brand=google ro.product.device=crespo ro.product.manufacturer=samsung ro.product.model=Nexus S ro.product.name=soju
Bu kural, resimler ve bir başlangıç komut dosyası oluşturur. bazel run :nexus_s -- --action=start komutunu yürüterek emülatörü yerel olarak başlatabilirsiniz. Komut dosyası aşağıdaki işaretçileri gösterir:
- --adb_port: adb'nin kullanılacağı bağlantı noktası. Emülatöre adb komutları göndermek istiyorsanız adb connect komutunu bu bağlantı noktasına gönderirsiniz.
- --emulator_port: Emülatör telnet yönetim konsolunun açılacağı bağlantı noktası.
- --enable_display: Doğruysa emülatörü ekranla başlatır (varsayılan olarak yanlıştır).
- --action: start veya kill.
- --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 önbellek bölümünün megabayt cinsinden boyutu. Minimum değer 16 megabayttır. |
default_properties
|
Etiket; varsayılan değer |
horizontal_resolution
|
Tam sayı; zorunlu Taklit edilecek yatay ekran çözünürlüğü (piksel). Minimum değer 240'tür. |
platform_apks
|
Etiketler listesi; varsayılan değer |
ram
|
Tam sayı; zorunlu Cihaz için taklit edilecek RAM miktarı (megabayt cinsinden). Bu, yalnızca cihazda yüklü belirli bir uygulama için değil, cihazın tamamı için geçerlidir. Minimum değer 64 megabayttır. |
screen_density
|
Tam sayı; zorunlu Emülasyonlu ekranın inç başına piksel cinsinden yoğunluğu. Minimum değer 30 ppi'dir. |
system_image
|
Etiket; zorunlu Aşağıdaki dosyaları içeren bir dosya grubu:
|
vertical_resolution
|
Tam sayı; zorunlu Taklit 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ülemeandroid_ndk_repository(name, api_level, path, repo_mapping)
Bazel'i, Android hedeflerini yerel kodla derlemeyi desteklemek için Android NDK'yı kullanacak şekilde yapılandırır.
android_ndk_repository
için kullanılan bu uygulamanın Starlark'ta bir uygulamayla değiştirildiğini unutmayın. 25 ve sonraki sürümler dahil olmak üzere NDK'nın gelecekteki sürümleri için destek, android_ndk_repository
'ü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 işleminin, WORKSPACE
dosyanızda bir android_sdk_repository
kuralı da gerektirdiğini unutmayın.
Daha fazla bilgi için Android NDK'yi Bazel ile kullanmayla ilgili tüm dokümanları okuyun.
Örnekler
android_ndk_repository( name = "androidndk", )
Yukarıdaki örnek, $ANDROID_NDK_HOME
konumundaki Android NDK'nızı 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, ./android-ndk-r20
alanındaki çalışma alanınızda bulunan Android NDK kullanılır. JNI kodunuzu derlediğinde API düzeyi 24 kitaplıklarını kullanır.
cpufeatures
Android NDK, bir cihazın CPU'sunu çalışma zamanında tespit etmek için kullanılabilen cpufeatures kitaplığını içerir. Aşağıdaki örnekte, cpufeatures özelliğinin 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 |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
api_level
|
Tamsayı; yapılandırılamaz; varsayılan değer |
path
|
Dize; yapılandırılamaz; varsayılan değer $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 Örneğin, |
android_sdk_repository
Kural kaynağını görüntülemeandroid_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)
Android hedeflerini oluşturmayı desteklemek için Bazel'i yerel bir Android SDK'sı kullanacak şekilde yapılandırır.
Örnekler
Bazel için Android SDK'sı oluşturmak için gereken minimum işlem,WORKSPACE
dosyanıza "androidsdk" adlı bir android_sdk_repository
kuralı eklemek ve $ANDROID_HOME
ortam değişkenini Android SDK'nızın yoluna ayarlamaktır. Bazel, varsayılan olarak Android SDK'sına yüklenen en yüksek Android API düzeyini ve derleme araçları sürümünü kullanı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 örnekte, Android SDK'sına Workspace'e göreli bir yol kullanılması da gösterilmektedir. Bu, Android SDK'sı Bazel çalışma alanınızın bir parçasıysa (ör. sürüm kontrolüne eklenmişse) kullanışlıdır.
Destek Kitaplıkları
Destek kitaplıkları, Android SDK Yöneticisi'nde "Android Destek Deposu" olarak bulunur.
Bu, yerel bir Maven deposu olarak paketlenmiş, Support ve AppCompat kitaplıkları gibi yaygın Android kitaplıklarından oluşan sürümlü bir gruptur. android_sdk_repository
, bu kitaplıkların her biri için android_binary
ve android_library
hedeflerinin bağımlılıklarında kullanılabilecek Bazel hedefleri oluşturur.
Oluşturulan hedeflerin adları, Android Destek Deposu'ndaki kitaplıkların Maven koordinatlarından türetilir ve @androidsdk//${group}:${artifact}-${version}
olarak biçimlendirilir.
Aşağıdaki örnekte, bir android_library
'nin v7 uygulama uyumluluğu kitaplığının 25.0.0 sürümüne nasıl bağımlı 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 Belirli bir derleme için kullanılan API düzeyi,
|
build_tools_version
|
Dize; yapılandırılamaz; varsayılan değer Bazel için derleme araçları 30.0.0 veya sonraki bir sürüm gereklidir. |
path
|
Dize; yapılandırılamaz; varsayılan değer $ANDROID_HOME ortam değişkeni ayarlanmalıdır.
Android SDK'sını Android Developers sitesinden indirebilirsiniz. |
repo_mapping
|
Sözlük: Dize -> Dize; varsayılan değer Örneğin, |