如何在Android.bp文件中包含预构建的库
How to include prebuilt library in Android.bp file?
我正在使用Android-O,我看到大多数.mk文件都被.bp文件取代了。现在我已经修改了使用 .bp 文件构建的硬件/接口下的源代码之一。
现在我有一个由源代码使用的预构建共享库。
但是我无法弄清楚如何将预构建的库包含在Android.bp文件中。
任何帮助/意见将不胜感激。
在这里挣扎一番后,我找到了解决方案
1(有一个名为androidmk的工具可以从 Android.mk 文件中生成Android.bp文件
使用以下命令构建安卓mk工具
source build/envsetup.sh
m -j blueprint_tools
Output Path: out/soong/host/linux-x86/bin/androidmk (depending on your host)
像这样为预构建库编写普通 Android.mk 文件
include $(CLEAR_VARS)
LOCAL_MODULE := newlib
LOCAL_SRC_FILES := newlib.so
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)
LOCAL_MODULE_TAGS := optional
include $(BUILD_PREBUILT)
现在运行以下命令androidmk Android.mk > Android.bp
Android.bp文件将创建
cc_prebuilt_library_shared {
name: "newlib",
srcs: ["newlib.so"],
//ANDROIDMK TRANSLATION ERROR: unspported assignment to LOCAL_MODULE_PATH
//LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARY)
}
2(现在使用上面的Android.bp文件,我得到以下错误
**out/target/product/mytest/symbols/system/lib64/newlib.so: no symbols**
所以我添加了这个
strip: {
none:true,
}
3(现在使用新的Android.bp,我仍然收到此错误
**error: newlib.so incompatible target**
所以我添加了这个(创建了 2 个目录 lib 和 lib64 与相应的库(
target: {
android_arm: {
srcs: ["lib/newlib.so"],
},
android_arm64: {
srcs: ["lib64/newlib.so"],
}
},
所以最后在下面的Android.bp文件上,我的要求得到了满足
cc_prebuilt_library_shared {
name: "newlib",
target: {
android_arm: {
srcs: ["lib/newlib.so"],
},
android_arm64: {
srcs: ["lib64/newlib.so"],
},
},
strip: {
none:true,
},
}
下面是一个如何做到这一点的示例。
cc_prebuilt_library_shared {
name: "libPrintString",
target: {
android_arm: {
srcs: ["lib/libPrintString.so"],
},
android_arm64: {
srcs: ["lib64/libPrintString.so"],
},
},
strip: { none:true, },
}
java_import {
name: "stringutils",
jars: ["libs/stringutils.jar"],
sdk_version: "current",
}
android_app {
name: "HelloWorld",
manifest: "AndroidManifest.xml",
srcs: ["src/**/*.java",],
sdk_version: "current",
resource_dirs: [
"res/",
],
static_libs: [
"com.google.android.material_material",
"androidx-constraintlayout_constraintlayout",
"stringutils",
],
jni_libs: ["libPrintString"],
certificate: "platform",
privileged: true,
platform_apis: true,
optimize: {
enabled: false,
},
dex_preopt: {
enabled: false,
},
}
请注意,在使用此更改执行mm
时,构建的apk不包含libPrintString.so
文件。相反,它将根据您的配置位于目标目录中/system
。因此,您不能直接使用 apk,而必须刷新完整版本。
相关文章:
- 预构建 grpc 和find_package
- 如何使用 cmake 在代码中包含、构建和调试共享库 (.so)?
- Android CMake 使用预构建的 .a 库
- 在 Android Studio 3.1 中使用预构建的 JNI 库
- 如何在 go 中调用带有 .lib 和.dll文件的预构建 API
- Android NDK 中的预构建工具链和自定义工具链编译器之间的差异
- 如何在Android.bp文件中包含预构建的库
- MSVC2013:如何避免在错误地使用预构建脚本中止构建过程(错误MSB3073:VCEnd"退出,代码为 -1)
- 将 CMake 构建的库链接到预构建的对象文件
- NDK - 包含一个预构建的库,并在 Android 项目中调用本机函数
- Cmake,Android:调用在预构建库中定义的静态函数
- 如何导入或安装预构建的Python扩展模块(C )(即未通过Setuptools编译的库)
- 如何翻译使用预构建的QT安装程序框架创建的安装程序,无论OS语言如何
- VS 2015 "Build Dependencies -> Build Customization"总是触发预构建和后期构建
- 在 Android Studio (cmake) 中使用预构建的共享库
- 如何链接和调用安卓工作室预构建静态原生库的函数
- 如何修复尝试包含预处理器找不到的文件的 Visual Studio 模板?
- 包括来自预构建库Android.mk的标题文件
- 如何使用 g++ 包含预编译的 .h.gch 标头
- 如何在Android NDK的 Android.mk 文件中正确包含预构建的静态库?