2

我有一个 .so 文件,它被 AOSP 系统包中的其他项目引用。为了使引用成为可能,我在 AOSP/external 包中创建了一个新项目,其中包含两个文件,即 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)

在编译期间,它给了我以下错误。

制作:*没有规则可以制作目标out/target/product/crespo/obj/lib/customutil.so', needed by/目标/产品/crespo/obj/EXECUTABLES/abc_agent_intermediates/LINKED/abc_agent'。停止。

我应该将 xyz.so 文件保存在哪里,或者我应该进行哪些更改,以便在构建 AOSP 时不会出现此错误?


寿司

4

3 回答 3

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)

这也意味着您需要适当地重命名库或根据库名称设置模块名称。

于 2012-06-19T17:06:41.330 回答
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 使用绝对路径,构建系统将从那里选择文件。

于 2014-07-08T12:19:24.110 回答
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 文件

谢谢快乐编码...

于 2017-01-21T09:27:56.570 回答