2

我正在 AOSP 中编译我自己的应用程序,我想在 AOSP 的包/应用程序中添加我自己的应用程序。我有一些*.so文件将在我的应用程序中使用,但是如何编写Android.mk使用这些第三方.so文件?这是我的Android.mk

  LOCAL_PATH := $(call my-dir)
  include $(CLEAR_VARS)
  LOCAL_MODULE_TAGS := optional
  LOCAL_SHARED_LIBRARIES :=myprebuilt
  LOCAL_STATIC_JAVA_LIBRARIES :=OrbbecJar
  LOCAL_SRC_FILES := $(call all-java-files-under, src)\
               $(call all-java-files-under, openCVLibrary2410/src)\
               openCVLibrary2410/src/main/aidl/org/opencv/engine/OpenCVEngineInterface.aidl
  LOCAL_RESOURCE_DIR:= $(LOCAL_PATH)/openCVLibrary2410/res\
                  $(LOCAL_PATH)/res
   LOCAL_CERTIFICATE := platform
   LOCAL_PACKAGE_NAME := HelloWorld
   include $(BUILD_PACKAGE)
    ##################################################
   include $(CLEAR_VARS)
   LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := OrbbecJar:OrbbecSDKPro_161114_v1.1.2.jar
   include $(BUILD_MULTI_PREBUILT)
   include $(CLEAR_VARS)
   LOCAL_MODULE:=myprebuilt
   LOCAL_SRC_FILES:=libs/armeabi-v7a/libHWWrapper.so\
                     libs/armeabi-v7a/libXnDeviceSensorV2.so\
                     libs/armeabi-v7a/libXnFormats.so
    include $(PREBUILT_SHARED_LIBRARY)
   # Use the folloing include to make our test apk.
  include $(call all-makefiles-under,$(LOCAL_PATH))

构建 apk 内容显示:在此处输入图像描述

但我可以t find在我的构建 apk 中使用 *.so`文件

4

2 回答 2

4

您必须将使用的每个预构建库声明为单个独立模块。为此,请执行以下步骤:

  1. 为模块命名。此名称不需要与预建库本身的名称相同。
  2. 在模块的 Android.mk 文件中,将您提供的预构建库的路径分配给 LOCAL_SRC_FILES
  3. 包括 PREBUILT_SHARED_LIBRARY 或 PREBUILT_STATIC_LIBRARY,具体取决于您使用的是共享 (.so) 库还是静态 (.a) 库。

有关声明预建库的更多详细信息

例子

# How to fetch the ssl_static lib
include $(CLEAR_VARS) 
LOCAL_MODULE := ssl_static
LOCAL_SRC_FILES := <folder_path>/libssl_static.a
include $(PREBUILT_STATIC_LIBRARY)

# shared library
include $(CLEAR_VARS)
LOCAL_MODULE := HWWrapper
LOCAL_SRC_FILES := <folder_path>/libHWWrapper.so
include $(PREBUILT_SHARED_LIBRARY)
于 2016-11-21T04:45:28.287 回答
2

如果您有预构建的静态库(带有 .a 扩展名的库),@mablevj 的解决方案就可以工作。对于共享库(.so 扩展名),您需要定义每个 .so,因为您无法将所有三个 .so 文件合并为一个 .so 文件。

include $(CLEAR_VARS)
LOCAL_MODULE := HWWrapper
LOCAL_SRC_FILES := libHWWrapper.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := XnDeviceSensorV2
LOCAL_SRC_FILES := libXnDeviceSensorV2.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := HWWrapper
LOCAL_SRC_FILES := libXnFormats.so
include $(PREBUILT_SHARED_LIBRARY)

然后它将显示在您的最终 .apk 中。您还应该将这三个定义放在一个单独的文件中以保持干净,但这不是必需的。

于 2016-12-07T19:06:42.063 回答