如何在Android.mk?

时间:2016-11-21 04:34:16

标签: android-source android.mk

我正在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内容显示:enter image description here

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

如果您有预构建的静态库(扩展名为.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中。您还应该将这三个定义放在一个单独的文件中以保持清洁,但这不是必需的。