Kurallar
- android_binary
- aar_import
- android_library
- android_instrumentation_test
- android_local_test
- android_device
- android_ndk_repository
- android_sdk_repository
android_binary
android_binary(name, deps, srcs, assets, assets_dir, compatible_with, crunch_png, custom_package, debug_key, debug_signing_keys, debug_signing_lineage_file, densities, deprecation, dex_shards, dexopts, distribs, enable_data_binding, exec_compatible_with, exec_properties, features, incremental_dexing, instruments, javacopts, key_rotation_min_sdk, licenses, main_dex_list, main_dex_list_opts, main_dex_proguard_specs, manifest, manifest_values, multidex, nocompress_extensions, package_id, plugins, proguard_apply_dictionary, proguard_apply_mapping, proguard_generate_mapping, proguard_specs, resource_configuration_filters, resource_files, restricted_to, shrink_resources, tags, target_compatible_with, testonly, visibility)
Android uygulama paketi dosyaları (.apk) oluşturur.
Örtülü çıkış hedefleri
name.apk
: Hata ayıklama anahtarlarıyla imzalanmış ve zipaligned olarak işaretlenmiş 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ı yayınlayamazsınız.name_unsigned.apk
: Yukarıdaki dosyanın, herkese açık olarak yayınlanmadan önce sürüm anahtarlarıyla imzalanabilen imzalanmamış bir sürümü.name_deploy.jar
: Bu hedefin geçişli kapanışını içeren bir Java arşivi.Dağıtım jar dosyası, bu hedefin çalışma zamanı sınıf yolunu baştan sona arayan bir classloader tarafından bulunacak tüm sınıfları içerir.
name_proguard.jar
:name_deploy.jar
üzerinde ProGuard'ın çalıştırılmasının sonucunu içeren bir Java arşivi. Bu çıkış yalnızca proguard_specs özelliği belirtilirse üretilir.name_proguard.map
:name_deploy.jar
üzerinde ProGuard'ın çalıştırılmasının bir eşleme dosyası sonucu. Bu çıkış yalnızca proguard_specs özelliği belirtilir ve proguard_generate_mapping veya shrink_resources ayarlanırsa oluşturulur.
Örnekler
Android kural örneklerini, Bazel kaynak ağacının examples/android
dizininde bulabilirsiniz.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Bu hedef için benzersiz bir ad. |
deps
|
android kısıtlamasına sahip android_library , java_library ve Android hedef platformu için .so yerel kitaplıkları sarmalama veya oluşturma.cc_library
|
srcs
|
|
assets
|
assets dizinindeki tüm dosyaların glob boyutudur. Ayrıca, tüm bu dosyalar ilgili pakette assets_dir dizininde olduğu sürece diğer kurallara (dosya oluşturan tüm kurallar) veya diğer paketlerdeki dışa aktarılan dosyalara da başvurabilirsiniz.
|
assets_dir
|
assets içindeki dosyaların yolunu veren dize.
assets ve assets_dir çifti, paketlenmiş öğeleri tanımlar ve her iki özellik de sağlanmalı ya da hiçbiri sağlanmamalıdır.
|
crunch_png
|
|
custom_package
|
|
debug_key
|
UYARI: Üretim anahtarlarınızı kullanmayın, bunlar sıkı bir şekilde korunmalı ve kaynak ağacınızda tutulmamalıdır. |
debug_signing_keys
|
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
|
UYARI: Üretim anahtarlarınızı kullanmayın, bunlar sıkı bir şekilde korunmalı ve kaynak ağacınızda tutulmamalıdır. |
densities
|
|
dex_shards
|
Her kırığın, son uygulamada en az bir dex ile sonuçlanacağını unutmayın. Bu nedenle, sürüm ikili programları için bunun 1'den fazla bir değere ayarlanması önerilmez. |
dexopts
|
|
enable_data_binding
|
Veri bağlama özellikli bir Android uygulaması oluşturmak için aşağıdakileri de yapmanız gerekir:
|
incremental_dexing
|
|
instruments
|
Araca Bu özellik ayarlanırsa bu |
javacopts
|
Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'ya aktarılır. |
key_rotation_min_sdk
|
|
main_dex_list
|
android/support/multidex/MultiDex$V19.class android/support/multidex/MultiDex.class android/support/multidex/MultiDexApplication.class com/google/common/base/Objects.class multidex="manual_main_dex" ile birlikte kullanılmalıdır.
|
main_dex_list_opts
|
|
main_dex_proguard_specs
|
multidex özelliği legacy olarak ayarlandıysa izin verilir.
|
manifest
|
AndroidManifest.xml ).
resource_files veya varlıklar tanımlanıyorsa tanımlanmalıdır.
|
manifest_values
|
|
multidex
|
Olası değerler:
|
nocompress_extensions
|
|
package_id
|
Daha fazla bilgi için AAPT2'nin |
plugins
|
java_plugin , bu hedef oluşturulduğunda çalıştırılır. Eklenti tarafından oluşturulan kaynaklar, hedefin sonuç jar dosyasına eklenir.
|
proguard_apply_dictionary
|
|
proguard_apply_mapping
|
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
|
proguard_specs belirtilirse oluşturulur. Bu dosyada orijinal ile kod karartma uygulanmış sınıf, yöntem ve alan adları arasındaki eşleme listelenir.
UYARI: Bu özellik kullanılırsa ProGuard spesifikasyonu ne |
proguard_specs
|
|
resource_configuration_filters
|
en_XA ve/veya ar_XB sözde yerel ayarlarını ekleyin.
|
resource_files
|
res dizinindeki tüm dosyaların glob boyutudur.
Oluşturulan dosyalara (genrules'dan) burada Label aracılığıyla da referans verilebilir. Tek kısıtlama, oluşturulan çıkışların dahil edilen diğer kaynak dosyalarıyla aynı " res " dizininde olması gerektiğidir.
|
shrink_resources
|
manifest ve resource_files özellikleri) kullanan kurallar için desteklenir ve ProGuard'ı gerektirir.
Çoğunlukla Gradle kaynak küçültücüyle (https://developer.android.com/studio/build/shrink-code.html#shrink-resources) aynı şekilde çalışır.
Önemli farklılıklar:
name_files/resource_shrinker.log de oluşturulur.
Olası değerler:
|
aar_import
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, android_library
ve android_binary
kuralları için .aar
dosyalarının 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 |
Bu hedef için benzersiz bir ad. |
aar
|
.aar dosyası.
|
exports
|
|
srcjar
|
|
android_library
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ı bir .jar
dosyasında derleyip arşivler.
Android çalışma zamanı kitaplığı android.jar
, dolaylı yoldan derleme sınıfı yoluna yerleştirilir.
Örtülü çıkış hedefleri
libname.jar
: Bir Java arşivi.libname-src.jar
: Kaynakları içeren bir arşiv ("kaynak jar").name.aar
: Java arşivini ve bu hedefin kaynaklarını içeren bir Android "aar" paketi. Geçişli kapatmayı içermez.
Örnekler
Android kural örneklerini, Bazel kaynak ağacının examples/android
dizininde bulabilirsiniz.
Aşağıdaki örnekte, idl_import_root
öğesinin nasıl ayarlanacağı gösterilmektedir.
//java/bazel/helloandroid/BUILD
şunu 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 |
Bu hedef için benzersiz bir ad. |
deps
|
android_library , android kısıtlamasıyla java_library ve Android hedef platformu için .so yerel kitaplıkları sarmalama veya oluşturma.cc_library
|
srcs
|
.java veya .srcjar dosyalarının listesi.
|
assets
|
assets dizinindeki tüm dosyaların glob boyutudur. Ayrıca, tüm bu dosyalar ilgili pakette assets_dir dizininde olduğu sürece diğer kurallara (dosya oluşturan tüm kurallar) veya diğer paketlerdeki dışa aktarılan dosyalara da başvurabilirsiniz.
|
assets_dir
|
assets içindeki dosyaların yolunu veren dize.
assets ve assets_dir çifti, paketlenmiş öğeleri tanımlar ve her iki özellik de sağlanmalı ya da hiçbiri sağlanmamalıdır.
|
custom_package
|
|
enable_data_binding
|
Veri bağlama özellikli bir Android uygulaması oluşturmak için aşağıdakileri de yapmanız gerekir:
|
exported_plugins
|
java_plugin öğelerinin (ör. ek açıklama işlemcileri) listesi.
Belirtilen |
exports
|
exports özellikleri aracılığıyla erişilen tüm kuralların kapatılması, exports aracılığıyla hedefe doğrudan bağlı olan kuralların doğrudan bağımlılığı olarak kabul edilir.
|
exports_manifest
|
android_binary hedeflerine aktarılıp aktarılmayacağı. uses-permissions özellikleri hiçbir zaman dışa aktarılmaz.
|
idl_import_root
|
Bu yol, bu kitaplığa bağlı olan idl kaynakları işlenirken içe aktarma kökü olarak kullanılır.
Örnekleri inceleyin. |
idl_parcelables
|
android_library hedefleri için içe aktarma olarak kullanıma sunulur, ancak Java'ya çevrilmez veya derlenmez.
Yalnızca bu kitaplıktaki Bu dosyalar, yardımcı derleyicinin onları 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
|
android_library hedefleri için içe aktarma olarak kullanıma sunulur, ancak Java'ya çevrilmez veya derlenmez.
Yalnızca doğrudan bu kitaplıktaki |
idl_srcs
|
srcs içeriğiyle birlikte derlenir.
Bu dosyalar, bu kitaplığa bağlı olan tüm Bu dosyalar, yardımcı derleyicinin onları 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
|
Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'ya aktarılır. |
manifest
|
AndroidManifest.xml ).
resource_files veya varlıklar tanımlanıyorsa tanımlanmalıdır.
|
neverlink
|
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
|
java_plugin , bu hedef oluşturulduğunda çalıştırılır. Eklenti tarafından oluşturulan kaynaklar, hedefin sonuç jar dosyasına eklenir.
|
proguard_specs
|
android_binary hedeflerine eklenirler.
Burada yer alan dosyalarda yalnızca eş anlamlı kuralları (-dontnote, -dontwarn, forcenosideeffects ve -keep ile başlayan kurallar) olmalıdır. Diğer seçenekler, ttolojik olmayan birleştirmeleri sağlamak için yalnızca android_binary ürününün proGuard_specs bölümünde görünebilir.
|
resource_files
|
res dizinindeki tüm dosyaların glob boyutudur.
Oluşturulan dosyalara (genrules'dan) burada Label aracılığıyla da referans verilebilir. Tek kısıtlama, oluşturulan çıkışların dahil edilen diğer kaynak dosyalarıyla aynı " res " dizininde olması gerektiğidir.
|
android_instrumentation_test
android_instrumentation_test(name, data, args, compatible_with, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, licenses, local, restricted_to, shard_count, size, support_apks, tags, target_compatible_with, target_device, test_app, testonly, timeout, toolchains, visibility)
Bir android_instrumentation_test
kuralı, Android enstrümantasyon testlerini çalıştırır. Bu noktada bir emülatör başlatılır, test edilmekte olan uygulamayı, test uygulamasını ve gerekli diğer uygulamaları yükler, test paketinde tanımlanan testleri çalıştırır.
test_app özelliği, testi içeren android_binary
özelliğini belirtir. Bu android_binary
, test edilen android_binary
uygulamasını araçlar özelliğiyle 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 |
Bu hedef için benzersiz bir ad. |
support_apks
|
|
target_device
|
Testin çalıştırılacağı android_device cihazı. Testi, zaten ç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
|
android_binary hedefi, instruments özelliği aracılığıyla test ettiği hedefi belirtmelidir.
|
android_local_test
android_local_test(name, deps, srcs, data, args, compatible_with, custom_package, densities, deprecation, enable_data_binding, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, licenses, local, manifest, manifest_values, nocompress_extensions, plugins, resource_configuration_filters, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, shard_count, size, stamp, tags, target_compatible_with, test_class, testonly, timeout, toolchains, use_launcher, visibility)
Bu kural, android_library
kurallarının yerel olarak (cihazda değil) test edilmesi içindir.
Android Robofactric test çerçevesiyle çalışır.
Robofactric testleri yazma hakkında ayrıntılı bilgi için Android Robofactric sitesine bakın.
Örtülü çıkış hedefleri
name.jar
: Testin Java arşivi.name-src.jar
: Kaynakları içeren bir arşiv ("kaynak jar").name_deploy.jar
: Dağıtıma uygun bir Java dağıtım arşivi (yalnızca açıkça istenirse oluşturulur).
Örnekler
Roboecric'i android_local_test
ile kullanmak için WORKSPACE
dosyanıza Robofactric'in deposunu ekleyin:
http_archive( name = "robolectric", urls = ["https://github.com/robolectric/robolectric/archive/<COMMIT>.tar.gz"], strip_prefix = "robolectric-<COMMIT>", sha256 = "<HASH>", ) load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories") robolectric_repositories()Bu işlem, Robofactric için gereken
maven_jar
kurallarını çeker.
Daha sonra her android_local_test
kuralı, @robolectric//bazel:robolectric
değerine 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:robolectric", ], ) android_library( name = "sample_test_lib", srcs = [ "Lib.java", ], resource_files = glob(["res/**"]), manifest = "AndroidManifest.xml", )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Bu hedef için benzersiz bir ad. |
deps
|
|
srcs
|
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 verilir.
|
custom_package
|
test_class öğesini de kullanmanız gerekir.
|
densities
|
|
enable_data_binding
|
|
javacopts
|
Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'ya aktarılır. |
jvm_flags
|
Java ikilisi için sarmalayıcı komut dosyası, bir CLASSPATH tanımı içerir (tüm bağımlı jar'ları bulmak için) ve doğru Java yorumlayıcısını çağırır.
Sarmalayıcı komut dosyası tarafından oluşturulan komut satırı, ana sınıfın adını ve ardından Bu özelliğin |
manifest
|
AndroidManifest.xml ).
source_files veya öğeler tanımlanmışsa ya da test edilen kitaplıklardaki manifestlerin herhangi birinde minSdkVersion etiketi varsa tanımlanmalıdır.
|
manifest_values
|
applicationId , versionCode , versionName ,
minSdkVersion ,
targetSdkVersion ve
maxSdkVersion , manifestin ve
use-sdk etiketlerinin ilgili özelliklerini de geçersiz kılar. packageName yok sayılır ve belirtilirse applicationId öğesinden veya manifest'teki paketten ayarlanır.
Manifest_values için kuralda bir manifest olması gerekmez.
|
nocompress_extensions
|
|
plugins
|
java_plugin , bu kural oluşturulduğunda ç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 sonuç jar dosyasına eklenir.
|
resource_configuration_filters
|
|
resource_jars
|
|
resource_strip_prefix
|
Belirtilirse bu yol ön eki, |
runtime_deps
|
deps gibi bunlar da çalışma zamanı sınıf yolunda görünür ancak bunların aksine derleme zamanı sınıf yolunda görünmez. Yalnızca çalışma zamanında gereken bağımlılıklar burada listelenmelidir. Bağımlılık analizi araçları hem runtime_deps hem de deps içinde görünen hedefleri yoksaymalıdır.
|
stamp
|
Damgalı ikili programlar, bağımlılıkları değişmediği sürece yeniden oluşturulmaz. |
test_class
|
Bu özellik, bu test tarafından çalıştırılacak Java sınıfının adını belirtir. Bu ayarı yapmak nadiren gerekebilir. Bu bağımsız değişken atlanırsa adı bu |
use_launcher
|
Bu özellik yanlış değerine ayarlanırsa
Başlatıcı özelliği ve ilgili
|
android_device
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ının doğrudan yürütülmesiyle başlatılabilir. Kendi kurallarınızı tanımlamak yerine mevcut android_device kurallarını temel almanız önerilir.
Bu kural, bazel testi ve ateşleme amacıyla --run_under bayrağı için uygun bir hedeftir. Sistem bir emülatör başlatır, test edilen/çalıştırılan hedefi emülatöre kopyalar ve 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ülü çıkış hedefleri
name_images/userdata.dat
: Emülatörü başlatmak için görüntü dosyaları ve anlık görüntüler içerirname_images/emulator-meta-data.pb
: Emülatörü yeniden başlatmak üzere emülatöre iletmek 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. Emülatörü yerel olarak başlatmak için bazel run :nexus_s -- --action=start komutunu çalıştırın. Komut dosyası aşağıdaki işaretleri gösterir:
- --adb_port: Adb'nin açılacağı bağlantı noktası. Emülatöre adb komutları yayınlamak isterseniz adb bağlantısı vereceğiniz bağlantı noktası budur.
- --emulator_port: Emülatörün telnet yönetim konsolunun açılacağı bağlantı noktası.
- --enable_display: Doğru değerine ayarlanırsa emülatörü bir ekranla başlatır (varsayılan değer false'tur).
- --action: Ya başlatın ya da sonlandırın.
- --apks_to_install: emülatöre yüklenecek apk'lerin listesi.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Bu hedef için benzersiz bir ad. |
cache
|
|
default_properties
|
|
horizontal_resolution
|
|
platform_apks
|
|
ram
|
|
screen_density
|
|
system_image
|
|
vertical_resolution
|
|
vm_heap
|
|
android_ndk_repository
android_ndk_repository(name, api_level, path, repo_mapping)
Yerel kodla Android hedefleri oluşturmayı desteklemek için Bazel'ı Android NDK kullanacak şekilde yapılandırır.
Android için geliştirme yapmak için WORKSPACE
dosyanızda android_sdk_repository
kuralının da olması gerektiğini unutmayın.
Daha fazla bilgi için Bazel ile Android NDK'yı kullanma hakkındaki belgelerin tamamını okuyun.
Örnekler
android_ndk_repository( name = "androidndk", )
Yukarıdaki örnek, $ANDROID_NDK_HOME
kaynağından 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
bölgesindeki çalışma alanınızda bulunan Android NDK kullanılır. JNI kodunuzu derlerken API düzeyi 24 kitaplıklarını kullanır.
CPU özellikleri
Android NDK, çalışma zamanında cihazın CPU'sunu algılamak için kullanılabilen cpufeatures kitaplığını içerir. Aşağıdaki örnekte Bazel ile CPU özelliklerinin 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 |
Bu hedef için benzersiz bir ad. |
api_level
|
|
path
|
$ANDROID_NDK_HOME ortam değişkeni ayarlanmalıdır.
Android NDK, Android geliştirici sitesinden indirilebilir. |
repo_mapping
|
Örneğin, bir |
android_sdk_repository
android_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)
Bazel'i, Android hedefleri oluşturmayı desteklemek için yerel bir Android SDK'sını kullanacak şekilde yapılandırır.
Örnekler
Bazel için Android SDK'yı ayarlarkenWORKSPACE
dosyanıza "androidsdk" adlı bir android_sdk_repository
kuralı ekleyip $ANDROID_HOME
ortam değişkenini Android SDK'nızın yoluna ayarlayabilirsiniz. Bazel, varsayılan olarak en yüksek Android API düzeyini kullanır ve Android SDK'da yüklü olan araçları oluşturur.
android_sdk_repository( name = "androidsdk", )
Yeniden oluşturulabilir derlemeler sağlamak için path
, api_level
ve build_tools_version
özellikleri belirli değerlere ayarlanabilir. Android SDK'da belirtilen API düzeyi veya derleme araçları sürümü yüklü değilse derleme başarısız olur.
android_sdk_repository( name = "androidsdk", path = "./sdk", api_level = 19, build_tools_version = "25.0.0", )
Yukarıdaki örnekte, Android SDK'sına çalışma alanına göre bir yolun kullanılması da gösterilmektedir. Android SDK, Bazel çalışma alanınızın bir parçasıysa (ör. sürüm kontrolüne eklenmişse) bu seçenek yararlıdır.
Destek Kitaplıkları
Destek Kitaplıkları, Android SDK Yöneticisi'nde "Android Destek Deposu" adıyla kullanılabilir.
Bu, Support ve AppCompat kitaplıkları gibi yerel Maven deposu olarak paketlenmiş, sürümlü bir ortak Android kitaplıkları grubudur. android_sdk_repository
, bu kitaplıkların her biri için android_binary
ve android_library
hedeflerinin bağımlılıklarında kullanılabilecek Bazel hedefleri oluşturur.
Oluşturulan hedeflerin adları, Android Support Repository'deki kitaplıkların Maven koordinatlarından türetilerek @androidsdk//${group}:${artifact}-${version}
olarak biçimlendirilmiştir.
Aşağıdaki örnekte, bir android_library
öğesinin v7 appcompat kitaplığının 25.0.0 sürümüne nasıl bağlı olabileceği gösterilmektedir.
android_library( name = "lib", srcs = glob(["*.java"]), manifest = "AndroidManifest.xml", resource_files = glob(["res/**"]), deps = ["@androidsdk//com.android.support:appcompat-v7-25.0.0"], )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Bu hedef için benzersiz bir ad. |
api_level
|
Belirli bir derleme için kullanılan API düzeyi,
|
build_tools_version
|
Bazel, derleme araçları sürümü 30.0.0 veya üzerini gerektirir. |
path
|
$ANDROID_HOME ortam değişkeni ayarlanmalıdır.
Android SDK, Android geliştirici sitesinden indirilebilir. |
repo_mapping
|
Örneğin, bir |