กฎ
- android_binary
- aar_import
- android_library
- android_toolation_test
- android_local_test
- อุปกรณ์ Android
- android_ndk_repository
- android_sdk_repository
ไบนารี Android
ดูแหล่งที่มาของกฎ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 (.apk)
เป้าหมายเอาต์พุตโดยนัย
name.apk
: ไฟล์แพ็กเกจแอปพลิเคชัน Android ที่ลงนามด้วยคีย์การแก้ไขข้อบกพร่องและการซิปไลน์อาจนํามาใช้ในการพัฒนาและแก้ไขข้อบกพร่องของแอปพลิเคชันได้ คุณไม่สามารถเปิดตัวแอปพลิเคชันเมื่อลงชื่อเข้าใช้ด้วยคีย์การแก้ไขข้อบกพร่องname_unsigned.apk
: ไฟล์ที่ไม่ได้ลงนามเวอร์ชันข้างต้นซึ่งลงนามด้วยคีย์รุ่นได้ก่อนที่จะเผยแพร่ต่อสาธารณะname_deploy.jar
: ไฟล์เก็บถาวร Java ที่มีการปิดเป้าหมายนี้ขวดโหลทําให้ใช้งานได้มีคลาสทั้งหมดที่คลาสตัวโหลดจะเห็นได้
name_proguard.jar
: ไฟล์เก็บถาวร Java ที่มีผลลัพธ์จากการเรียกใช้ ProGuard กับname_deploy.jar
เอาต์พุตนี้จะแสดงเฉพาะเมื่อระบุแอตทริบิวต์ proguard_specs เท่านั้นname_proguard.map
: ผลการจับคู่ไฟล์เพื่อเรียกใช้ ProGuard บนname_deploy.jar
เอาต์พุตนี้จะแสดงเฉพาะเมื่อระบุแอตทริบิวต์ proguard_specs และตั้งค่า proguard_generate_mapping หรือ shrink_resources เท่านั้น
ตัวอย่าง
ดูตัวอย่างกฎ Android ได้ในไดเรกทอรี examples/android
ของโครงสร้างแหล่งที่มา Bazel
อาร์กิวเมนต์
แอตทริบิวต์ | |
---|---|
name |
ชื่อที่ไม่ซ้ํากันสําหรับเป้าหมายนี้ |
deps
|
android_library , java_library ที่มีข้อจํากัด android และ cc_library ที่รวมหรือสร้างไลบรารีเนทีฟ .so สําหรับแพลตฟอร์มเป้าหมายของ Android
|
srcs
|
รวมไฟล์ ไฟล์ |
assets
|
glob ของไฟล์ทั้งหมดภายใต้ไดเรกทอรี assets คุณยังอ้างอิงกฎอื่นๆ (กฎใดก็ได้ที่สร้างไฟล์) หรือไฟล์ที่ส่งออกในแพ็กเกจอื่นๆ ตราบใดที่ไฟล์ทั้งหมดเหล่านั้นอยู่ในไดเรกทอรี assets_dir ในแพ็กเกจที่เกี่ยวข้อง
|
assets_dir
|
assets
คู่ assets และ assets_dir อธิบายเนื้อหาแพ็กเกจและควรระบุแอตทริบิวต์ทั้ง 2 รายการหรือไม่ระบุเลย
|
crunch_png
|
|
custom_package
|
|
debug_key
|
คําเตือน: อย่าใช้คีย์เวอร์ชันที่ใช้งานจริง คีย์เหล่านี้ควรได้รับการปกป้องอย่างเคร่งครัดและไม่เก็บอยู่ในโครงสร้างต้นทาง |
debug_signing_keys
|
คําเตือน: อย่าใช้คีย์เวอร์ชันที่ใช้งานจริง คีย์เหล่านี้ควรได้รับการปกป้องอย่างเคร่งครัดและไม่เก็บอยู่ในโครงสร้างต้นทาง |
debug_signing_lineage_file
|
คําเตือน: อย่าใช้คีย์เวอร์ชันที่ใช้งานจริง คีย์เหล่านี้ควรได้รับการปกป้องอย่างเคร่งครัดและไม่เก็บอยู่ในโครงสร้างต้นทาง |
densities
|
|
dex_shards
|
โปรดทราบว่าชาร์ดแต่ละรายการจะส่งผลให้เกิด Dex อย่างน้อย 1 รายการในแอปสุดท้าย จึงไม่แนะนําให้ตั้งค่านี้เป็นมากกว่า 1 สําหรับไบนารีของรุ่น |
dexopts
|
|
enable_data_binding
|
หากต้องการสร้างแอป Android ที่มีการเชื่อมโยงข้อมูล คุณต้องดําเนินการต่อไปนี้ด้วย
|
incremental_dexing
|
|
instruments
|
เป้าหมาย หากตั้งค่าแอตทริบิวต์นี้ ระบบจะถือว่า |
javacopts
|
ตัวเลือกคอมไพเลอร์เหล่านี้จะส่งไปยัง javac หลังจากตัวเลือกคอมไพเลอร์สากล |
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"
|
main_dex_list_opts
|
|
main_dex_proguard_specs
|
multidex เป็น legacy เท่านั้น
|
manifest
|
AndroidManifest.xml
ต้องกําหนดให้กับทรัพยากร Resource_files หรือชิ้นงาน
|
manifest_values
|
|
multidex
|
ค่าที่เป็นไปได้มีดังนี้
|
nocompress_extensions
|
|
package_id
|
ดูข้อมูลเพิ่มเติมได้จากอาร์กิวเมนต์ |
plugins
|
java_plugin ที่ระบุในแอตทริบิวต์ปลั๊กอินจะทํางานทุกครั้งที่มีการสร้างเป้าหมายนี้ ทรัพยากรที่สร้างโดยปลั๊กอินจะรวมอยู่ในโหลผลลัพธ์ของเป้าหมาย
|
proguard_apply_dictionary
|
|
proguard_apply_mapping
|
proguard_generate_mapping เพื่อใช้ซ้ําในการแมปเดียวกันกับบิลด์ใหม่
|
proguard_generate_mapping
|
proguard_specs ไว้เท่านั้น ไฟล์นี้จะแสดงการแมประหว่างชื่อคลาส เมธอด และช่องที่สร้างความสับสน
คําเตือน: หากใช้แอตทริบิวต์นี้ ข้อกําหนดของ Proguard ไม่ควรมีทั้ง |
proguard_specs
|
|
resource_configuration_filters
|
en_XA และ/หรือ ar_XB
|
resource_files
|
glob ของไฟล์ทั้งหมดภายใต้ไดเรกทอรี res
ไฟล์จะอ้างอิงไฟล์ที่สร้าง (จากกฎกฎ) ได้ที่นี่ ข้อจํากัดเพียงอย่างเดียวคือเอาต์พุตที่สร้างขึ้นต้องอยู่ในไดเรกทอรี " res " เดียวกันกับไฟล์ทรัพยากรอื่นๆ ที่รวมอยู่
|
shrink_resources
|
manifest และ resource_files ) และต้องใช้ ProGuard
วิธีการทํางานเกือบเหมือนกันกับเครื่องมือย่อทรัพยากร Gradle (https://developer.android.com/studio/build/shrink-code.html#shrink-resources)
ความแตกต่างสําคัญ:
name_files/resource_shrinker.log ด้วย ซึ่งจะอธิบายการวิเคราะห์และการลบที่ดําเนินการอย่างละเอียด
ค่าที่เป็นไปได้มีดังนี้
|
การนําเข้า ar
ดูแหล่งที่มาของกฎ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)
กฎนี้อนุญาตให้ใช้ไฟล์ .aar
เป็นไลบรารีสําหรับกฎ android_library
และ android_binary
ตัวอย่าง
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"], )
อาร์กิวเมนต์
แอตทริบิวต์ | |
---|---|
name |
ชื่อที่ไม่ซ้ํากันสําหรับเป้าหมายนี้ |
aar
|
.aar ที่ใช้กับเป้าหมาย Android โดยขึ้นอยู่กับเป้าหมายนี้
|
exports
|
|
srcjar
|
|
คลัง Android
ดูแหล่งที่มาของกฎ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)
กฎนี้จะรวบรวมและเก็บถาวรแหล่งที่มาลงในไฟล์ .jar
ไลบรารีรันไทม์ของ Android android.jar
จะอยู่ในเส้นทางคลาสการคอมไพล์โดยปริยาย
เป้าหมายเอาต์พุตโดยนัย
libname.jar
: ที่เก็บถาวรของ Javalibname-src.jar
: ที่เก็บถาวรที่มีแหล่งที่มา (" Jar ต้นทาง")name.aar
: แพ็กเกจ "ar" ของ Android ที่มีที่เก็บถาวร Java และทรัพยากรของเป้าหมายนี้ เพราะยังไม่มีการปิดชั่วคราว
ตัวอย่าง
ดูตัวอย่างกฎ Android ได้ในไดเรกทอรี examples/android
ของโครงสร้างแหล่งที่มา Bazel
ตัวอย่างต่อไปนี้แสดงวิธีตั้งค่า idl_import_root
ให้ //java/bazel/helloandroid/BUILD
ประกอบด้วย:
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"], )
อาร์กิวเมนต์
แอตทริบิวต์ | |
---|---|
name |
ชื่อที่ไม่ซ้ํากันสําหรับเป้าหมายนี้ |
deps
|
android_library , java_library ที่มีข้อจํากัด android และ cc_library ที่รวมหรือผลิตไลบรารีแบบเนทีฟ .so สําหรับแพลตฟอร์มเป้าหมายของ Android
|
srcs
|
.java หรือ .srcjar ที่ประมวลผลเพื่อสร้างเป้าหมาย
รวมไฟล์ ไฟล์ หากไม่ใส่ |
assets
|
glob ของไฟล์ทั้งหมดภายใต้ไดเรกทอรี assets คุณยังอ้างอิงกฎอื่นๆ (กฎใดก็ได้ที่สร้างไฟล์) หรือไฟล์ที่ส่งออกในแพ็กเกจอื่นๆ ตราบใดที่ไฟล์ทั้งหมดเหล่านั้นอยู่ในไดเรกทอรี assets_dir ในแพ็กเกจที่เกี่ยวข้อง
|
assets_dir
|
assets
คู่ assets และ assets_dir อธิบายเนื้อหาแพ็กเกจและควรระบุแอตทริบิวต์ทั้ง 2 รายการหรือไม่ระบุเลย
|
custom_package
|
|
enable_data_binding
|
หากต้องการสร้างแอป Android ที่มีการเชื่อมโยงข้อมูล คุณต้องดําเนินการต่อไปนี้ด้วย
|
exported_plugins
|
java_plugin (เช่น ตัวประมวลผลคําอธิบายประกอบ) ที่จะส่งออกไปยังไลบรารีที่อาศัยไลบรารีนี้โดยตรง
ระบบจะใช้รายการ |
exports
|
exports จะถือว่าเป็นทรัพยากร Dependency โดยตรงของกฎใดๆ โดยขึ้นอยู่กับเป้าหมายที่มี exports โดยตรง
|
exports_manifest
|
android_binary ที่อิงตามเป้าหมายนี้หรือไม่ ไม่มีการส่งออกแอตทริบิวต์ uses-permissions
|
idl_import_root
|
ระบบจะใช้เส้นทางนี้เป็นรูทนําเข้าเมื่อประมวลผลแหล่งที่มาของรหัสที่ใช้ไลบรารีนี้ เมื่อระบุ ดูตัวอย่าง |
idl_parcelables
|
android_library ใดๆ ที่อาศัยห้องสมุดนี้ โดยตรง หรือผ่านการปิดชั่วคราว แต่จะไม่มีการแปลเป็น Java หรือคอมไพล์
ควรระบุเฉพาะ ไฟล์เหล่านี้ต้องวางอย่างเหมาะสมสําหรับคอมไพเลอร์เครื่องมือช่วยในการค้นหาไฟล์ ดูข้อมูลเพิ่มเติมว่าความหมายนี้เป็นอย่างไรในคําอธิบาย idl_import_root |
idl_preprocessed
|
android_library ใดๆ ที่อาศัยห้องสมุดนี้ โดยตรง หรือผ่านการปิดชั่วคราว แต่จะไม่มีการแปลเป็น Java หรือคอมไพล์
ควรระบุเฉพาะไฟล์ |
idl_srcs
|
srcs
ไฟล์เหล่านี้จะใช้เป็นการนําเข้าสําหรับเป้าหมาย ไฟล์เหล่านี้ต้องวางอย่างเหมาะสมสําหรับคอมไพเลอร์เครื่องมือช่วยในการค้นหาไฟล์ ดูข้อมูลเพิ่มเติมว่าความหมายนี้เป็นอย่างไรในคําอธิบาย idl_import_root |
javacopts
|
ตัวเลือกคอมไพเลอร์เหล่านี้จะส่งไปยัง javac หลังจากตัวเลือกคอมไพเลอร์สากล |
manifest
|
AndroidManifest.xml
ต้องกําหนดให้กับทรัพยากร Resource_files หรือชิ้นงาน
|
neverlink
|
neverlink ในการสร้าง .apk มีประโยชน์หากไลบรารีจัดเตรียมไว้สําหรับสภาพแวดล้อมรันไทม์ระหว่างการเรียกใช้
|
plugins
|
java_plugin ที่ระบุในแอตทริบิวต์ปลั๊กอินจะทํางานทุกครั้งที่มีการสร้างเป้าหมายนี้ ทรัพยากรที่สร้างโดยปลั๊กอินจะรวมอยู่ในโหลผลลัพธ์ของเป้าหมาย
|
proguard_specs
|
android_binary โดยขึ้นอยู่กับไลบรารีนี้
ไฟล์ที่รวมไว้ที่นี่ต้องมีเฉพาะกฎนิจพล เช่น -dontnote, -dontwarn,sumnoside Effects และกฎที่ขึ้นต้นด้วย -keep ตัวเลือกอื่นๆ สามารถปรากฏได้ใน proguard_spec ของ android_binary เท่านั้น เพื่อให้แน่ใจว่าการผสานรวมที่ไม่ใช่โทโพโลยี
|
resource_files
|
glob ของไฟล์ทั้งหมดภายใต้ไดเรกทอรี res
ไฟล์จะอ้างอิงไฟล์ที่สร้าง (จากกฎกฎ) ได้ที่นี่ ข้อจํากัดเพียงอย่างเดียวคือเอาต์พุตที่สร้างขึ้นต้องอยู่ในไดเรกทอรี " res " เดียวกันกับไฟล์ทรัพยากรอื่นๆ ที่รวมอยู่
|
การทดสอบเครื่องมือ Android
ดูแหล่งที่มาของกฎandroid_instrumentation_test(name, data, args, compatible_with, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, licenses, local, restricted_to, shard_count, size, support_apks, tags, target_compatible_with, target_device, test_app, testonly, timeout, toolchains, visibility)
กฎ android_instrumentation_test
ทําการทดสอบการใช้เครื่องมือ Android การดําเนินการนี้จะเริ่มโปรแกรมจําลอง ติดตั้งแอปพลิเคชันที่กําลังทดสอบ แอปพลิเคชันทดสอบ และแอปพลิเคชันที่จําเป็นอื่นๆ และเรียกใช้การทดสอบที่ระบุไว้ในแพ็กเกจทดสอบ
แอตทริบิวต์ test_app ระบุ android_binary
ที่มีการทดสอบ ซึ่ง android_binary
นี้จะระบุแอปพลิเคชัน android_binary
ที่อยู่ภายใต้การทดสอบผ่านแอตทริบิวต์เครื่องมือ
ตัวอย่าง
# 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", )
อาร์กิวเมนต์
แอตทริบิวต์ | |
---|---|
name |
ชื่อที่ไม่ซ้ํากันสําหรับเป้าหมายนี้ |
support_apks
|
|
target_device
|
android_device ที่ใช้ทดสอบ หากต้องการทดสอบโปรแกรมจําลองที่ทํางานแล้วหรือในอุปกรณ์จริง ให้ใช้อาร์กิวเมนต์ต่อไปนี้
|
test_app
|
android_binary ต้องระบุเป้าหมายที่ทดสอบผ่านแอตทริบิวต์ instruments
|
การทดสอบในเครื่อง
ดูแหล่งที่มาของกฎ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)
กฎนี้มีไว้สําหรับการทดสอบกฎ android_library
ภายในเครื่อง (แทนที่จะเป็นในอุปกรณ์)
โดยจะใช้งานได้กับเฟรมเวิร์กการทดสอบ Android Robolectric
ดูรายละเอียดเกี่ยวกับการเขียนการทดสอบ Robolectric ได้ที่เว็บไซต์ Android Robolectric
เป้าหมายเอาต์พุตโดยนัย
name.jar
: ไฟล์เก็บถาวร Java ของการทดสอบname-src.jar
: ที่เก็บถาวรที่มีแหล่งที่มา ("โหลต้นทาง")name_deploy.jar
: ที่เก็บถาวรการทําให้ใช้งานได้ของ Java เหมาะสําหรับการทําให้ใช้งานได้ (สร้างเมื่อได้รับคําขออย่างชัดแจ้งเท่านั้น)
ตัวอย่าง
หากต้องการใช้ Robolectric กับ android_local_test
ให้เพิ่มที่เก็บของ Robolectric ในไฟล์ WORKSPACE
ดังนี้
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
ที่จําเป็นสําหรับ Robolectric
จากนั้นกฎ android_local_test
แต่ละข้อควรอิงตาม @robolectric//bazel:robolectric
ดูตัวอย่างด้านล่าง
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", )
อาร์กิวเมนต์
แอตทริบิวต์ | |
---|---|
name |
ชื่อที่ไม่ซ้ํากันสําหรับเป้าหมายนี้ |
deps
|
รายการกฎที่อนุญาตใน |
srcs
|
รวมไฟล์ ไฟล์ ระบบจะละเว้นไฟล์อื่นๆ ทั้งหมด ตราบใดที่มีไฟล์อย่างน้อย 1 ไฟล์อยู่ในประเภทที่อธิบายไว้ข้างต้น มิเช่นนั้นระบบจะแสดงข้อผิดพลาด
ต้องระบุแอตทริบิวต์ |
custom_package
|
test_class ด้วย
|
densities
|
|
enable_data_binding
|
|
javacopts
|
ตัวเลือกคอมไพเลอร์เหล่านี้จะส่งไปยัง javac หลังจากตัวเลือกคอมไพเลอร์สากล |
jvm_flags
|
สคริปต์ Wrapper สําหรับไบนารีของ Java ประกอบด้วยคําจํากัดความ ClassPATH (เพื่อค้นหาโหลที่เกี่ยวข้องทั้งหมด) และเรียกใช้ล่าม Java ที่เหมาะสม
บรรทัดคําสั่งที่สร้างโดยสคริปต์ Wrapper จะมีชื่อคลาสหลักตามด้วย โปรดทราบว่าแอตทริบิวต์นี้ไม่มีผลสําหรับเอาต์พุต |
manifest
|
AndroidManifest.xml
ต้องกําหนดเมื่อมีการกําหนด Resource_files หรือชิ้นงาน หรือหากไฟล์ Manifest จากไลบรารีภายใต้การทดสอบมีแท็ก minSdkVersion
|
manifest_values
|
applicationId , versionCode , versionName ,
minSdkVersion , targetSdkVersion และ maxSdkVersion จะลบล้างแอตทริบิวต์ที่เกี่ยวข้องของไฟล์ Manifest และ Use-SDK ด้วย ระบบจะละเว้น packageName และจะตั้งค่าจาก applicationId หากระบุไว้หรือแพ็กเกจในไฟล์ Manifest
ไม่จําเป็นต้องมีไฟล์ Manifest ในกฎเพื่อใช้ manifest_values
|
nocompress_extensions
|
|
plugins
|
java_plugin ที่ระบุในแอตทริบิวต์นี้เมื่อมีการสร้างกฎนี้ ไลบรารีอาจรับปลั๊กอินจากทรัพยากร Dependency ที่ใช้ exported_plugins ด้วย ทรัพยากรที่ปลั๊กอินสร้างขึ้นจะรวมอยู่ในโหลโหลผลลัพธ์ของกฎนี้
|
resource_configuration_filters
|
|
resource_jars
|
|
resource_strip_prefix
|
หากระบุ คํานําหน้าเส้นทางนี้จะถูกนําออกจากทุกไฟล์ในแอตทริบิวต์ |
runtime_deps
|
deps ทั่วไป รายการเหล่านี้จะปรากฏในเส้นทางคลาสรันไทม์ แต่แตกต่างจากเส้นทางพาธคลาสนี้ ซึ่งไม่ปรากฏในเส้นทางคลาสคอมไพเลอร์ ทรัพยากร Dependency ที่จําเป็นเฉพาะในช่วงรันไทม์ควรจะแสดงที่นี่ เครื่องมือวิเคราะห์การขึ้นต่อกันไม่ควรสนใจเป้าหมายที่ปรากฏในทั้ง runtime_deps และ deps
|
stamp
|
ระบบจะไม่สร้างไบนารีที่ประทับใหม่ เว้นแต่ทรัพยากร Dependency จะเปลี่ยนแปลง |
test_class
|
แอตทริบิวต์นี้ระบุชื่อของคลาส Java ที่จะทําการทดสอบนี้ ซึ่งมักตั้งค่าไม่ได้ หากไม่ใส่อาร์กิวเมนต์นี้ ระบบจะใช้คลาส Java ที่ใช้ชื่อเดียวกับ |
use_launcher
|
หากตั้งค่าแอตทริบิวต์นี้เป็น "เท็จ" ระบบจะละเว้นแอตทริบิวต์ Launcher และแฟล็ก |
อุปกรณ์ Android
ดูแหล่งที่มาของกฎ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)
กฎนี้สร้างโปรแกรมจําลอง Android ที่กําหนดค่าด้วยข้อกําหนดที่ระบุไว้ โปรแกรมจําลองนี้อาจเริ่มต้นผ่านคําสั่งเรียกใช้ Bazel หรือโดยการเรียกใช้สคริปต์ที่สร้างขึ้นโดยตรง เราขอแนะนําให้ใช้กฎ android_device ที่มีอยู่แทนการกําหนดของคุณเอง
กฎนี้เป็นเป้าหมายที่เหมาะที่สุดสําหรับแฟล็ก --run_under เพื่อการทดสอบและ Bzel จะเริ่มต้นโปรแกรมจําลอง คัดลอกเป้าหมายที่กําลังทดสอบ/เรียกใช้ในโปรแกรมจําลอง และทดสอบหรือเรียกใช้ตามความเหมาะสม
android_device
รองรับการสร้างรูปภาพ KVM หาก system_image ที่ใช้คือ X86 และได้รับการเพิ่มประสิทธิภาพสําหรับสถาปัตยกรรม CPU ส่วนใหญ่ของ I686 หากต้องการใช้ KVM ให้เพิ่ม tags = ['requires-kvm']
ลงในกฎ android_device
เป้าหมายเอาต์พุตโดยนัย
name_images/userdata.dat
: มีไฟล์ภาพและสแนปชอตเพื่อเริ่มโปรแกรมจําลองname_images/emulator-meta-data.pb
: มีข้อมูลอนุกรมที่จําเป็นสําหรับส่งไปยังโปรแกรมจําลองเพื่อรีสตาร์ท
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงวิธีใช้ android_device
//java/android/helloandroid/BUILD
มี
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
ประกอบด้วย
ro.product.brand=google ro.product.device=crespo ro.product.manufacturer=samsung ro.product.model=Nexus S ro.product.name=soju
กฎนี้จะสร้างรูปภาพและสคริปต์เริ่มต้น คุณเริ่มโปรแกรมจําลองในเครื่องได้โดยเรียกใช้การเรียกใช้ Bazel :nexus_s -- --action=start สคริปต์จะแสดงแฟล็กต่อไปนี้
- --adb_port: พอร์ตสําหรับแสดง adb หากต้องการออกคําสั่ง adb ให้โปรแกรมจําลอง นี่คือพอร์ตที่จะออก adb ให้เชื่อมต่อ
- --emulator_port: พอร์ตสําหรับเปิดคอนโซลการจัดการโทรคมนาคมของ โปรแกรมจําลอง
- --enable_display: เริ่มโปรแกรมจําลองด้วยจอแสดงผลหากเป็น "จริง" (ค่าเริ่มต้นเป็น "เท็จ")
- --action: เริ่มหรือฆ่าก็ได้
- --apks_to_install: รายการ APK ที่จะติดตั้งในโปรแกรมจําลอง
อาร์กิวเมนต์
แอตทริบิวต์ | |
---|---|
name |
ชื่อที่ไม่ซ้ํากันสําหรับเป้าหมายนี้ |
cache
|
|
default_properties
|
|
horizontal_resolution
|
|
platform_apks
|
|
ram
|
|
screen_density
|
|
system_image
|
|
vertical_resolution
|
|
vm_heap
|
|
ที่เก็บ Android_ndk
ดูแหล่งที่มาของกฎandroid_ndk_repository(name, api_level, path, repo_mapping)
กําหนดค่า Bazel ให้ใช้ NDK สําหรับ Android เพื่อรองรับการสร้างเป้าหมาย Android ด้วยโค้ดแบบเนทีฟ
โปรดทราบว่าระบบจะแทนที่การติดตั้งใช้งานนี้ของ android_ndk_repository
ด้วยการใช้งานใน Starlark ระบบจะใช้ NDK เวอร์ชันในอนาคต ซึ่งรวมถึงเวอร์ชัน 25 ขึ้นไปใน android_ndk_repository
เวอร์ชัน Starlark ดูเวอร์ชัน lar_android_ndk สําหรับเวอร์ชัน Starlark
โปรดทราบว่าการสร้างแอปสําหรับ Android ต้องใช้กฎ android_sdk_repository
ในไฟล์ WORKSPACE
ของคุณด้วย
อ่านข้อมูลเพิ่มเติมได้ที่เอกสารฉบับเต็มเกี่ยวกับการใช้ Android NDK กับ Bazel
ตัวอย่าง
android_ndk_repository( name = "androidndk", )
ตัวอย่างข้างต้นจะค้นหา NDK ใน Android จาก $ANDROID_NDK_HOME
และตรวจหาระดับ API สูงสุดที่รองรับ
android_ndk_repository( name = "androidndk", path = "./android-ndk-r20", api_level = 24, )
ตัวอย่างข้างต้นจะใช้ NDK ใน Android ซึ่งอยู่ในพื้นที่ทํางานใน ./android-ndk-r20
โดยจะใช้ไลบรารีระดับ API 24 เมื่อคอมไพล์โค้ด JNI
CPU
NDK สําหรับ Android มีไลบรารี cpufeatures ซึ่งใช้ตรวจจับ CPU ของอุปกรณ์ขณะรันไทม์ได้ ตัวอย่างต่อไปนี้สาธิตวิธีใช้ Cpufeatures กับ Bazel
# jni.cc #include "ndk/sources/android/cpufeatures/cpu-features.h" ...
# BUILD cc_library( name = "jni", srcs = ["jni.cc"], deps = ["@androidndk//:cpufeatures"], )
อาร์กิวเมนต์
แอตทริบิวต์ | |
---|---|
name |
ชื่อที่ไม่ซ้ํากันสําหรับเป้าหมายนี้ |
api_level
|
|
path
|
$ANDROID_NDK_HOME
ดาวน์โหลด Android NDK ได้จากเว็บไซต์ของนักพัฒนาแอป Android |
repo_mapping
|
ตัวอย่างเช่น รายการ |
ที่เก็บ Android_sdk_repository
ดูแหล่งที่มาของกฎandroid_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)
กําหนดค่า Bazel ให้ใช้ Android SDK ในเครื่องเพื่อรองรับการสร้างเป้าหมาย Android
ตัวอย่าง
ค่าต่ําสุดในการตั้งค่า Android SDK สําหรับ Bazel คือการวางกฎandroid_sdk_repository
ชื่อ "androidsdk" ในไฟล์ WORKSPACE
และตั้งค่าตัวแปรสภาพแวดล้อม $ANDROID_HOME
ในเส้นทางของ Android SDK Bazel จะใช้ Android API ระดับสูงสุดและสร้างเครื่องมือเวอร์ชันที่ติดตั้งใน Android SDK โดยค่าเริ่มต้น
android_sdk_repository( name = "androidsdk", )
คุณกําหนดแอตทริบิวต์ path
, api_level
และ build_tools_version
เป็นค่าเฉพาะได้เพื่อให้บิลด์ที่ทําซ้ําได้ บิลด์จะล้มเหลวหาก Android SDK ไม่ได้ติดตั้งระดับ API ที่ระบุหรือเวอร์ชันเครื่องมือสร้าง
android_sdk_repository( name = "androidsdk", path = "./sdk", api_level = 19, build_tools_version = "25.0.0", )
ตัวอย่างข้างต้นยังแสดงการใช้เส้นทางที่เกี่ยวข้องกับพื้นที่ทํางานไปยัง Android SDK วิธีนี้มีประโยชน์หาก Android SDK เป็นส่วนหนึ่งของพื้นที่ทํางาน Bazel ของคุณ (เช่น หากทําเครื่องหมายเลือกลงในการควบคุมเวอร์ชัน)
ไลบรารีการสนับสนุน
ไลบรารีการสนับสนุนมีให้ใช้งานใน Android SDK Manager เป็น "Android Support Repository"
นี่คือชุดไลบรารี Android เวอร์ชันที่มีเวอร์ชัน เช่น ไลบรารีการสนับสนุนและ AppCompat ซึ่งรวมอยู่ในที่เก็บ Maven ในเครื่อง android_sdk_repository
สร้างเป้าหมาย Bazel สําหรับไลบรารีเหล่านี้แต่ละรายการที่สามารถใช้ในทรัพยากร Dependency ของ android_binary
และเป้าหมาย android_library
ชื่อของเป้าหมายที่สร้างมาจากพิกัด Maven ของไลบรารีในที่เก็บการสนับสนุนของ Android ซึ่งอยู่ในรูปแบบ @androidsdk//${group}:${artifact}-${version}
ตัวอย่างต่อไปนี้แสดงให้เห็นว่า android_library
จะขึ้นอยู่กับไลบรารี Appcompat v7 เวอร์ชัน 25.0.0 ได้อย่างไร
android_library( name = "lib", srcs = glob(["*.java"]), manifest = "AndroidManifest.xml", resource_files = glob(["res/**"]), deps = ["@androidsdk//com.android.support:appcompat-v7-25.0.0"], )
อาร์กิวเมนต์
แอตทริบิวต์ | |
---|---|
name |
ชื่อที่ไม่ซ้ํากันสําหรับเป้าหมายนี้ |
api_level
|
ระดับ API ที่ใช้สําหรับบิลด์ที่ระบุจะลบล้างโดยแฟล็ก หากต้องการดูเป้าหมาย |
build_tools_version
|
Bazel ต้องใช้เครื่องมือสร้างเวอร์ชัน 30.0.0 ขึ้นไป |
path
|
$ANDROID_HOME
ดาวน์โหลด Android SDK ได้จากเว็บไซต์ของนักพัฒนาแอป Android |
repo_mapping
|
ตัวอย่างเช่น รายการ |