Kurallar
- android_binary
- aar_import
- android_library
- android_applianceation_test
- android_local_test
- android_device
- android_ndk_depository
- android_sdk_repository
android_binary
Kural kaynağını gösterandroid_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 |
Bu hedef için benzersiz bir ad. |
deps
|
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
|
|
assets
|
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
|
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
|
|
custom_package
|
|
debug_key
|
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
|
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
|
UYARI: Üretim anahtarlarınızı kullanmayın. Anahtarlarınız kesinlikle korunmalıdır ve kaynak ağacınızda saklanmamalıdır. |
densities
|
|
dex_shards
|
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
|
|
enable_data_binding
|
Veri bağlama özelliğine sahip bir Android uygulaması oluşturmak için ayrıca aşağıdakileri yapmanız gerekir:
|
incremental_dexing
|
|
instruments
|
Enstrümanın Bu özellik ayarlanırsa bu |
javacopts
|
Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'ye iletilir. |
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 kullanılmalıdır.
|
main_dex_list_opts
|
|
main_dex_proguard_specs
|
multidex özelliği legacy olarak ayarlanmışsa izin verilir.
|
manifest
|
AndroidManifest.xml ).
source_files veya assets tanımlanırsa 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ç kavanozuna dahil edilir.
|
proguard_apply_dictionary
|
|
proguard_apply_mapping
|
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
|
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 |
proguard_specs
|
|
resource_configuration_filters
|
en_XA ve/veya ar_XB sözde yerel ayarları ekleyin.
|
resource_files
|
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
|
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:
name_files/resource_shrinker.log
da oluşturulur ve yapılan analiz ve silme işlemlerinin ayrıntıları verilir.
Olası değerler:
|
aar_içe aktarma
Kural kaynağını gösteraar_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 |
Bu hedef için benzersiz bir ad. |
aar
|
.aar dosyası.
|
exports
|
|
srcjar
|
|
android_kitaplığı
Kural kaynağını gösterandroid_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 |
Bu hedef için benzersiz bir ad. |
deps
|
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
|
.java veya .srcjar dosyalarının listesi.
|
assets
|
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
|
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
|
|
enable_data_binding
|
Veri bağlama özelliğine sahip bir Android uygulaması oluşturmak için ayrıca aşağıdakileri yapmanız gerekir:
|
exported_plugins
|
java_plugin öğelerinin (ör. ek açıklama işlemcileri) listesi.
Belirtilen |
exports
|
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_manifest
|
android_binary hedefine aktarılıp aktarılmayacağı. uses-permissions özellikleri hiçbir zaman dışa aktarılmaz.
|
idl_import_root
|
Bu kitaplığa bağımlı olan boşta kalma kaynakları işlenirken bu kök, içe aktarma kökü olarak kullanılır.
Örnekleri inceleyin. |
idl_parcelables
|
android_library hedefleri için içe aktarma olarak sunulacak ancak Java'ya çevrilmeyecek veya derlenmeyecektir.
Yalnızca bu kitaplıktaki 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
|
android_library hedefleri için içe aktarma olarak sunulacak ancak Java'ya çevrilmeyecek veya derlenmeyecektir.
Yalnızca bu kitaplıktaki doğrudan |
idl_srcs
|
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 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
|
Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'ye iletilir. |
manifest
|
AndroidManifest.xml ).
source_files veya assets tanımlanırsa tanımlanmalıdır.
|
neverlink
|
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
|
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
|
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
|
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österandroid_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 |
Bu hedef için benzersiz bir ad. |
support_apks
|
|
target_device
|
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_app
|
android_binary hedefi, instruments özelliği aracılığıyla hangi hedefi test ettiğini belirtmelidir.
|
android_local_test
Kural kaynağını gösterandroid_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 |
Bu hedef için benzersiz bir ad. |
deps
|
|
srcs
|
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.
|
custom_package
|
test_class öğesini de kullanmanız gerekir.
|
densities
|
|
enable_data_binding
|
|
javacopts
|
Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'ye iletilir. |
jvm_flags
|
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 Bu özelliğin |
manifest
|
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
|
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
|
|
plugins
|
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
|
|
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 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
|
Damgalı ikili programlar, bağımlılıkları değişmediği sürece yeniden oluşturulmaz oluşturulmaz. |
test_class
|
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 |
use_launcher
|
Bu özellik yanlış değerine ayarlanırsa launch özelliği ve ilgili |
android_cihazı
Kural kaynağını gösterandroid_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çerirname_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 |
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_depo
Kural kaynağını gösterandroid_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 |
Bu hedef için benzersiz bir ad. |
api_level
|
|
path
|
$ANDROID_NDK_HOME ortam değişkeni ayarlanmalıdır.
Android NDK'yı Android geliştirici sitesinden indirebilirsiniz. |
repo_mapping
|
Örneğin, bir giriş |
android_sdk_deposu
Kural kaynağını gösterandroid_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 |
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ı için sürüm 30.0.0 veya sonrası gerektirir. |
path
|
$ANDROID_HOME ortam değişkeni ayarlanmalıdır.
Android SDK'sı Android geliştirici sitesinden indirilebilir. |
repo_mapping
|
Örneğin, bir giriş |