【问题标题】:how to add some third party *.so files in Android.mk?如何在 Android.mk 中添加一些第三方 *.so 文件?
【发布时间】:2016-11-21 04:34:15
【问题描述】:

我正在 AOSP 中编译我自己的应用程序,并且我想在 AOSP 的 package/app 中添加我自己的应用程序。我有一些*.sofiles 将在我的应用程序中使用,但是如何编写Android.mkabout 以使用这些第三方.sofiles?这是我的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))

build apk 内容显示:

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

【问题讨论】:

    标签: android-source android.mk


    【解决方案1】:

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

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

    For more details about Declaring a Prebuilt Library

    例子

    # 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)
    

    【讨论】:

    • 我写了我的.mk,正如你所说,你可以在上面看到。但我在构建apk中找不到*.sofiles。@mablevj
    【解决方案2】:

    @mablevj 的解决方案适用于您预先构建的静态库(带有 .a 扩展名的库)。对于共享库(.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 中。您还应该将这三个定义放在一个单独的文件中以保持整洁,但这不是必需的。

    【讨论】:

    • 我尝试了同样的事情,但是在 mma 命令之后我无法在我的最终 apk 中看到 .so 文件。你能帮忙吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 2015-02-26
    • 2020-11-20
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多