我有一个.so文件,它被AOSP系统包中的其他项目引用。为了使引用成为可能,我在 AOSP/外部包中创建了一个新项目,其中包含两个文件,即 Android.mk 和 xyz.so 文件。Android.mk 如下所示。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := customutil
LOCAL_SRC_FILES := xyz.so
include $(PREBUILT_SHARED_LIBRARY)
在编译过程中,它给了我以下错误。
make: * 没有规则使目标out/target/product/crespo/obj/lib/customutil.so', needed by
/目标/产品/crespo/obj/可执行文件/abc_agent_intermediates/链接/abc_agent'。 停。
我应该在哪里保存、xyz.so 文件或我应该进行哪些更改,以便在构建 AOSP 时它不会产生此错误?
寿司
您的模块规则有问题。
当您有一个带有 LOCAL_MODULE := customutil
的预构建库时,链接器将获得额外的标志-lcustomutil
。因此,您的LOCAL_SRC_FILES :=
需要LOCAL_SRC_FILES := libcustomutil.so
因此,Android.mk 部分应为:
# Prebuilt Lib
include $(CLEAR_VARS)
LOCAL_MODULE := xyx
LOCAL_SRC_FILES := libxyz.so
include $(PREBUILT_SHARED_LIBRARY)
这也意味着您需要适当地重命名库或根据库名称设置模块名称。
默认情况下,对于预构建,LOCAL_SRC_FILES相对于您当前的LOCAL_PATH定义,因此如果您的 Android.mk 在 $PROJECT/jni/Android.mk
下,您应该将其放在 $PROJECT/jni/xyz.so
该名称也应该是可能的 libxyz.so 而不是 xyz.so(尽管这可能在没有 lib 前缀的情况下有效)。
如果您计划支持多个 CPU ABI,请尝试使用子目录,如下所示:
include $(CLEAR_VARS)
LOCAL_MODULE := libxyz
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libxyz.so
include $(PREBUILT_SHARED_LIBRARY)
并将文件放在:
$PROJECT/jni/armeabi/libxyz.so
$PROJECT/jni/armeabi-v7a/libxyz.so
$PROJECT/jni/x86/libxyz.so
...
最后,您还可以使用绝对路径进行LOCAL_SRC_FILES,构建系统将从那里选取文件。
我在AOSP源代码的外部文件夹中添加了预构建的.so文件,如下所示:-
步骤1:- 我在AOSP的外部文件夹中创建了一个文件夹(假设myLibs) 然后我在其中添加了我的 .so 文件,并在 Android.mk 文件中添加了以下代码
# Prebuilt Lib
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libMyabc # your lib name
LOCAL_SRC_FILES := libMyabc.so
# your lib .so file name
include $(BUILD_SHARED_LIBRARY)
然后我在LOCAL_SHARED_LIBRARIES部分的框架/base/core/jni/Android.mk 文件中添加了我的共享库名称。
现在它是在out/target/product/generic/obj/lib文件夹中生成我的.so文件
谢谢快乐编码...