android_binaryの--fat_apk_cpuフラグを利用していますし、あなたのライブラリの名前を変更する必要はありません。別のアプローチ:
android_binaryは--fat_apk_cpuで指定された各アーキテクチャに一回ずつcc_library構築します。 --fat_apk_cpuのデフォルトはarmeabi-v7aです。これは「Androidスプリット移行」と呼ばれます。各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
ビルドするアーキテクチャを1つだけ指定すると、開発ビルドを高速化できます。たとえば、開発中にx86エミュレータを使用する場合は、armeabiおよびarmeabi-v7a .soファイルは必要ありません。
OK、お返事ありがとうございます! – ldjhust