如何在 Android.bp 文件中包含预建库?
How to include prebuilt library in Android.bp file?
我正在使用 Android-O,我看到大多数 .mk 文件正在被 .bp 文件替换。
现在我修改了 hardware/interfaces 下的一个源代码,它是使用 .bp 文件构建的。
现在我有一个供源代码使用的预构建共享库。
但我无法弄清楚如何将预建库包含到 Android.bp 文件中。
任何 help/comments 将不胜感激。
经过一番努力,我找到了解决方案
1) 有一个名为 androidmk 的工具可以从 Android.mk 文件
中生成 Android.bp 文件
使用以下命令构建androidmk工具
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,而必须刷新完整版本。
我正在使用 Android-O,我看到大多数 .mk 文件正在被 .bp 文件替换。 现在我修改了 hardware/interfaces 下的一个源代码,它是使用 .bp 文件构建的。
现在我有一个供源代码使用的预构建共享库。
但我无法弄清楚如何将预建库包含到 Android.bp 文件中。
任何 help/comments 将不胜感激。
经过一番努力,我找到了解决方案
1) 有一个名为 androidmk 的工具可以从 Android.mk 文件
中生成 Android.bp 文件使用以下命令构建androidmk工具
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,而必须刷新完整版本。