我有一个Android应用程序,它使用包装C本机库的java API。我有这个工作:android_binary(名称:“MyLibTest”)依赖于API,它构建为android_library(名称:“MyLibAndroid”),依赖于jni层(cc_library,名称:“mylib_jni”),这取决于包装的C lib(cc_library,名称“mylib”)。
我希望MyLibAndroid负责使用System.loadLibrary(“mylib_jni”)加载本机代码。问题是Bazel正在为我的android_binary应用程序创建一个本机库,所以我必须将System.loadLibrary(“MyLibTest”)放在我的应用程序代码中。
有没有办法告诉Bazel将原生jni lib与android_library而不是android_binary相关联?
答案 0 :(得分:0)
bazel命名.so与android_binary相同的原因是bazel将android_binary的依赖关系中的所有cc_library规则链接到单个.so文件中,因此它实际上无法选择其中一个名称cc_library规则。
处理此问题的一种方法是读取Bazel放置在apk根目录的名为nativedeps
的文件。它将包含bazel链接的.so文件的名称,因此您不必在库代码中对该名称进行硬编码。