如何在APK中打包预建的共享库

Use*_*337 5 android android-build

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

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

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

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

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

vit*_*kot 3

为了预先构建您的本机库,您必须

  1. jni在您的项目文件夹中创建文件夹
  2. libs在您的项目文件夹中创建文件夹
  3. 将 make 文件添加Adnroid.mk到 jni 文件夹中,它应该如下所示:

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

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

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

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

然后你必须设置一个构建器。请参阅这篇文章了解如何执行此操作:

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

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