【问题标题】:How to package prebuilt shared library inside an APK如何在 APK 中打包预构建的共享库
【发布时间】:2012-01-12 13:17:42
【问题描述】:

这个问题似乎被问了很多,但所有人都在尝试使用 eclipse 将库打包到 APK 中。 但是,我的要求是使用 Android 构建系统将库打包在 APK 内(稍后将使用 System.loadLibrary() 通过 Java 加载),即我想编写一个 Android.mk 文件来完成这项工作。

要求: 1.预建共享库:libTest.so 2.编写一个Android.mk文件,将其打包到apk中的libs/armeabi-7中。

我对我正在使用的构建系统了解不多,但是在导出所需的环境变量后使用“mm”命令完成编译。

当我为 LOCAL_JNI_SHARED_LIBRARIES 提供 libTest 时,它会尝试在其导出的路径中找到它,但无法在其中找到它,因此构建失败。

任何人都可以就编写一个将我的预构建共享库打包到 APK 中的 Android.mk 文件提供任何指示吗?

【问题讨论】:

    标签: android android-build


    【解决方案1】:

    为了预先构建您的原生库,您必须

    1. 在您的项目文件夹中创建jni 文件夹
    2. 在您的项目文件夹中创建libs 文件夹
    3. Adnroid.mk make 文件添加到 jni 文件夹,它应该看起来像 这个:

      LOCAL_PATH := $(call my-dir)
      
      include $(CLEAR_VARS)
      
      LOCAL_LDLIBS    := -llog
      LOCAL_MODULE    := Test
      LOCAL_SRC_FILES := Test.cpp
      
      include $(BUILD_SHARED_LIBRARY)
      

    注意 1:Test.cpp 是包含本地方法实现的主库源文件。您可以将更多来源添加为空格分隔的列表。

    注意 2:不要包含标题,它们会自动包含。

    注意 3:如果需要启用 C++ STL,则创建另一个 make 文件 - Application.mk,将其添加到 jni 文件夹并在其中设置 APP_STL := stlport_static 标志。

    然后您必须设置一个构建器。请参阅this article 了解如何执行此操作:

    完成这些步骤后,构建器将在libs 文件夹中创建您的库,该库将在构建整个应用程序时自动打包到 apk 中。

    注意:您的库名称应为小写,这是 Linux 的约定。会自动添加“lib”前缀,因此最终的库名称将是 libtest.so。

    【讨论】:

      【解决方案2】:

      假设有一个libxxx.so 共享库在您想要打包到apk 的项目的libs/armeabi/ 下。您需要在Android.mk 中做两件事,如下所示:

      # 1. Copy .so to out/target/product/***/obj/lib
      $(shell cp $(wildcard $(LOCAL_PATH)/libs/armeabi/*.so $(TARGET_OUT_INTERMEDIATE_LIBRARIES)) 
      
      # 2. Make libxxx to be packed into apk
      LOCAL_JNI_SHARED_LIBRARIES := libs/libxxxx
      


      然后你可以使用apktool解压构建的apk,你会发现libxxx.so将位于libs/armeabi*/。确实是打包到apk里面了。

      【讨论】:

        【解决方案3】:

        我有两个 LOCAL_JNI_SHARED_LIBRARIES 想要构建到我的 APK 中。我设法通过在我的 Android.mk 中设置以下内容来做到这一点:

        LOCAL_MODULE_TAGS := samples
        

        重新编译模块后,我能够在 /lib/ 下的 .apk 中找到这两个库。

        【讨论】:

          猜你喜欢
          • 2011-12-17
          • 2017-11-08
          • 1970-01-01
          • 1970-01-01
          • 2013-01-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多