我有一个.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
输出/ target / product / crespo / obj / EXECUTABLES / abc_agent_intermediates / LINKED / abc_agent'。停止。
我应该保留哪些内容,xyz.so文件或我应该做出哪些更改,以便在构建AOSP时,不会出现此错误?
苏希尔
答案 0 :(得分:1)
您的模块规则是个问题。
当你有一个带有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)
这也意味着您需要适当地重命名库或根据库名设置模块名称。
答案 1 :(得分:0)
默认情况下,对于预编译,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的绝对路径,构建系统将从那里选择文件。
答案 2 :(得分:0)
我在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部分的Frameworks / base / core / jni / Android.mk文件中添加了我的共享库名。
现在它是在out / target / product / generic / obj / lib文件夹中生成我的.so文件
由于 快乐的编码...