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. Hata ayıklama anahtarlarıyla imzalandığında uygulamanızı bırakamazsı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 deposu, bu hedefin çalışma zamanı sınıf yolunu baştan sona arayan bir classloader'ın bulabileceği tüm sınıfları içerir.
name_proguard.jar
:name_deploy.jar
üzerinde ProGuard çalıştırmanın sonucunu içeren bir Java arşivi. Bu çıkış yalnızca proguard_specs özelliği 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 belirtilirse ve proguard_generate_mapping veya shrink_resources ayarlanmışsa üretilir.
Ö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 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, bunlar sıkı bir şekilde 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 oluşturulduğunda çalışı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 belirtilmişse 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
|
Etiket listesi; varsayılan |
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.
Gradle kaynak daraltıcı ile büyük ölçüde aynı şekilde çalışır (https://developer.android.com/studio/build/shrink-code.html#shrink-resources).
Önemli farklılıklar:
name_files/resource_shrinker.log da oluşturulur.
Olası değerler:
|
aar_import
Kural kaynağını görüntüleaar_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üleandroid_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.jar
Android çalışma zamanı kitaplığı, derleme sınıfı yoluna dolaylı olarak yerleştirilmiş.
Ö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 kapatmayı 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
şunları içeriyor:
android_library( name = "parcelable", srcs = ["MyParcelable.java"], # bazel.helloandroid.MyParcelable # MyParcelable.aidl will be used as import for other .aidl # files that depend on it, but will not be compiled. idl_parcelables = ["MyParcelable.aidl"] # bazel.helloandroid.MyParcelable # We don't need to specify idl_import_root since the aidl file # which declares bazel.helloandroid.MyParcelable # is present at java/bazel/helloandroid/MyParcelable.aidl # underneath a java root (java/). ) android_library( name = "foreign_parcelable", srcs = ["src/android/helloandroid/OtherParcelable.java"], # android.helloandroid.OtherParcelable idl_parcelables = [ "src/android/helloandroid/OtherParcelable.aidl" # android.helloandroid.OtherParcelable ], # We need to specify idl_import_root because the aidl file which # declares android.helloandroid.OtherParcelable is not positioned # at android/helloandroid/OtherParcelable.aidl under a normal java root. # Setting idl_import_root to "src" in //java/bazel/helloandroid # adds java/bazel/helloandroid/src to the list of roots # the aidl compiler will search for imported types. idl_import_root = "src", ) # Here, OtherInterface.aidl has an "import android.helloandroid.CallbackInterface;" statement. android_library( name = "foreign_interface", idl_srcs = [ "src/android/helloandroid/OtherInterface.aidl" # android.helloandroid.OtherInterface "src/android/helloandroid/CallbackInterface.aidl" # android.helloandroid.CallbackInterface ], # As above, idl_srcs which are not correctly positioned under a java root # must have idl_import_root set. Otherwise, OtherInterface (or any other # interface in a library which depends on this one) will not be able # to find CallbackInterface when it is imported. idl_import_root = "src", ) # MyParcelable.aidl is imported by MyInterface.aidl, so the generated # MyInterface.java requires MyParcelable.class at compile time. # Depending on :parcelable ensures that aidl compilation of MyInterface.aidl # specifies the correct import roots and can access MyParcelable.aidl, and # makes MyParcelable.class available to Java compilation of MyInterface.java # as usual. android_library( name = "idl", idl_srcs = ["MyInterface.aidl"], deps = [":parcelable"], ) # Here, ServiceParcelable uses and thus depends on ParcelableService, # when it's compiled, but ParcelableService also uses ServiceParcelable, # which creates a circular dependency. # As a result, these files must be compiled together, in the same android_library. android_library( name = "circular_dependencies", srcs = ["ServiceParcelable.java"], idl_srcs = ["ParcelableService.aidl"], idl_parcelables = ["ServiceParcelable.aidl"], )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiket listesi; varsayılan 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
|
Etiket listesi; varsayılan .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 pakette assets_dir dizini altında olduğu sürece, başka kurallara (dosya oluşturan tüm kurallar) başvurabilir ya da diğer paketlerdeki dosyaları dışa aktarabilirsiniz.
|
assets_dir
|
Dize; varsayılan değer assets 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şlemcileri) 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 yol, bu kitaplığa bağlı boşl kaynakları işlenirken 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 edinmek için idl_import_root 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 derlenirler.
Bu dosyalar, bu kitaplığa bağlı olan herhangi bir 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 ö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ımlanırsa 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
|
Etiket listesi; varsayılan java_plugin , bu hedef oluşturulduğunda çalışır. Eklenti tarafından oluşturulan kaynaklar, hedefin sonuç jar'ı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 dosyalara (genrules'tan) buradaki Etiket aracılığıyla da referans verilebilir. Tek kısıtlama, oluşturulan çıkışların, dahil edilen diğer tüm kaynak dosyalarıyla aynı " res " dizininde olması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)
Bir android_instrumentation_test
kuralı, Android araç testlerini çalıştırır. Bir emülatör başlatır, test edilen uygulamayı, test uygulamasını ve 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
ise instruments özelliği aracılığıyla test edilen android_binary
uygulamasını belirtir.
Örnek
# java/com/samples/hello_world/BUILD android_library( name = "hello_world_lib", srcs = ["Lib.java"], manifest = "LibraryManifest.xml", resource_files = glob(["res/**"]), ) # The app under test android_binary( name = "hello_world_app", manifest = "AndroidManifest.xml", deps = [":hello_world_lib"], )
# javatests/com/samples/hello_world/BUILD android_library( name = "hello_world_test_lib", srcs = ["Tests.java"], deps = [ "//java/com/samples/hello_world:hello_world_lib", ... # test dependencies such as Espresso and Mockito ], ) # The test app android_binary( name = "hello_world_test_app", instruments = "//java/com/samples/hello_world:hello_world_app", manifest = "AndroidManifest.xml", deps = [":hello_world_test_lib"], ) android_instrumentation_test( name = "hello_world_uiinstrumentation_tests", target_device = ":some_target_device", test_app = ":hello_world_test_app", )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; 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()Bu işlem, Robolectric için gereken
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
|
Etiket listesi; varsayılan
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 öğesini de kullanmanız gerekecektir.
|
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 olur).
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 ve use-sdk etiketlerinin karşılık gelen özelliklerini de geçersiz kılar. packageName yoksayılır ve belirtilmişse applicationId 'ten veya manifest'teki paketten ayarlanır.
manifest_values parametresi kullanmak için kuralda bir manifest dosyası olması 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 eklentiler de 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
Belirtilen 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 içinde görünen hedefleri yoksaymalı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. Bunun ayarlanması nadiren gerekir. 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üleandroid_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 yürütülerek başlatılabilir. Kendi kurallarınızı tanımlamak yerine mevcut android_device kurallarına bağlı kalmanız önerilir.
Bu kural, bazel testi ve blaze çalıştırması amacıyla --run_under işareti için uygun bir hedeftir. Bir emülatör başlatır, test edilen/çalıştırılan hedefi emülatöre kopyalar ve uygun şekilde test eder veya çalıştırır.
Temel system_image X86 tabanlıysa ve en fazla I686 CPU mimarisi için optimize edilmişse android_device
, KVM görüntüleri oluşturmayı destekler. KVM 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ün telnet yönetim konsolunun açık olacağı 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. Bunun minimum değeri 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
|
Etiket listesi; varsayılan |
ram
|
Tam sayı; zorunlu Cihaz için taklit edilecek RAM miktarı (megabayt cinsinden). Bu, yalnızca cihazda yüklü olan 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österandroid_ndk_repository(name, api_level, path, repo_mapping)
Yerel kodla Android hedefleri oluşturmayı desteklemek için Bazel'i Android NDK kullanacak şekilde yapılandırır.
android_ndk_repository
için kullanılan bu uygulamanın Starlark'ta bir uygulamayla değiştirildiğini unutmayın. Sürüm 25 ve sonraki sürümler dahil olmak üzere NDK'nın gelecekteki sürümleri için destek, android_ndk_repository
ürününün Starlark sürümünde uygulanacaktır. Starlark sürümü için rules_android_ndk bölümüne bakın.
Android için 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'nızı $ANDROID_NDK_HOME
içinde 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 Bazel ile cpuözelliklerin nasıl kullanılacağı gösterilmektedir.
# jni.cc #include "ndk/sources/android/cpufeatures/cpu-features.h" ...
# BUILD cc_library( name = "jni", srcs = ["jni.cc"], deps = ["@androidndk//:cpufeatures"], )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; 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 Örneğin, |
android_sdk_repository
Kural kaynağını görüntüleandroid_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; gerekli 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, derleme araçları için 30.0.0 veya sonraki sürümlerin kullanılmasını gerektirir. |
path
|
Dize; yapılandırılamaz; varsayılan değer $ANDROID_HOME ortam değişkeni ayarlanmalıdır.
Android SDK'yı Android geliştirici sitesinden indirebilirsiniz. |
repo_mapping
|
Sözlük: Dize -> Dize; varsayılan Örneğin, |