首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将预先构建的共享库打包到APK中

如何将预先构建的共享库打包到APK中
EN

Stack Overflow用户
提问于 2012-01-12 21:17:42
回答 3查看 10.3K关注 0票数 7

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

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

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

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

有没有人可以给我写一个Android.mk文件的建议,这个文件会把我的预构建的共享库打包到APK中?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-12 21:42:50

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

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

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

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

注2:不要包含头部,它们会自动包含在内。

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

然后,您将不得不设置一个构建器。有关如何做到这一点,请参阅this article

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

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

票数 3
EN

Stack Overflow用户

发布于 2012-11-25 11:58:34

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

代码语言:javascript
复制
# 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解压构建的libxxx.so,你会发现apk位于libs/armeabi*/中。它确实被打包到了apk中。

票数 1
EN

Stack Overflow用户

发布于 2021-02-18 00:34:39

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

代码语言:javascript
复制
LOCAL_MODULE_TAGS := samples

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8835692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档