android_binary가 --fat_apk_cpu 플래그의 활용 및 라이브러리의 이름을 변경 필요없는 다른 방법 :
android_binary 구축 각 cc_library 번 --fat_apk_cpu로 지정된 각 아키텍처. --fat_apk_cpu의 기본값은 armeabi-v7a입니다. 이것을 "Android split transition"이라고합니다. 각 cc_library를 빌드하면 해당 cc_library는 --fat_apk_cpu의 목록에서 --cpu 플래그를 전달받습니다. 이러한 플래그를 읽는 config_setting 규칙을 정의하고 cc_library에 select 문을 사용하여 cc_library가 빌드 된 아키텍처에 따라 다른 .so 파일을 포함하도록 할 수 있습니다. 예를 들어
:
# BUILD
CPUS = ["armeabi", "armeabi-v7a", "x86"]
[config_setting(name = cpu, values = {"cpu": cpu}) for cpu in CPUS]
cc_library(
name = "native_library",
srcs = select(
{":%s" % cpu : glob(["libs/%s/*.so" % cpu]) for cpu in CPUS}
),
)
android_binary(
name = "app",
srcs = glob(["*.java"]),
manifest = "AndroidManifest.xml",
deps = [":native_library"],
)
그리고 명령 줄에 당신이 최종 APK에 존재 원하는되는 아키 지정할 수 있습니다.
$ bazel build --fat_apk_cpu=armeabi,armeabi-v7a,x86 //:app
$ zipinfo -1 bazel-bin/app.apk | grep \.so$
lib/x86/libWatch.so
lib/x86/libSound.so
lib/x86/libSec.so
lib/x86/libTec.so
lib/armeabi-v7a/libWatch.so
lib/armeabi-v7a/libSound.so
lib/armeabi-v7a/libSec.so
lib/armeabi-v7a/libTec.so
lib/armeabi/libWatch.so
lib/armeabi/libSound.so
lib/armeabi/libSec.so
lib/armeabi/libTec.so
$ bazel build --fat_apk_cpu=x86 //:app
$ zipinfo -1 bazel-bin/app.apk | grep \.so$
lib/x86/libWatch.so
lib/x86/libSound.so
lib/x86/libSec.so
lib/x86/libTec.so
빌드 할 아키텍처를 하나만 지정하면 개발 빌드 속도가 빨라집니다. 예를 들어, 개발하는 동안 x86 에뮬레이터를 사용하면 armeabi 및 armeabi-v7a .so 파일이 필요하지 않습니다.
OK, 답장을 보내주세요. – ldjhust