Android导入第三方静态库.a编译成动态库.so

简介:

http://ikinglai.blog.51cto.com/6220785/1324985

 

在Android开发的时候,经常会使用到用c或c++编写的第三方的静态库。如果有源码的话,可以直接跟你自己的代码一去编译成动态库so,但是如果没有源码的话,你就必须在自己的动态库so里面将别人生成好的静态库导入进来一起编译了。我在编译的时候遇到了不少问题,我觉得有必要进行总结一下。

 

下面我以一个简单的实际例子来讲解如何在动态库中导入静态库。

 

静态库中的源代码有两个文件:static.h, static.c,有一个add方法

 

static.h

1
2
#include <stdio.h>
int  add( int  x,  int  y);

 

static.c

1
2
3
4
5
#include "static.h"
int  add( int  x,  int  y)
{
     return  x + y;
}

 

将它编译成静态库,Android.mk如下:

 

1
2
3
4
5
LOCAL_PATH := $(call my-dir)
include  $(CLEAR_VARS)
LOCAL_MODULE    := static_add
LOCAL_SRC_FILES :=  static .c
include  $(BUILD_STATIC_LIBRARY)

 

注意编译静态库的时候,必须有一个Application.mk文件:

 

1
APP_MODULES:=static_add

 

APP_MODULES的值应该和Android.mk中的LOCAL_MODULE的值保持一样。

 

然后调用ndk-build进行编译生成libstatic_add.a静态库。

 

hejinlai_iMac:jni hejinlai$ ndk-build

Prebuilt : libstatic_add.a <= jni/

 

生成静态库后,然后编写动态库中的源代码: share.h share.c

share.h

1
2
# include  <stdio.h>
int  test_add( int  x,  int  y);

share.c

1
2
3
4
5
6
7
# include  "share.h"
# include  "static.h"
int  test_add( int  x,  int  y)
{
     // 调用static里面的方法
     return  add(x, y);
}

 

编写导入静态库的Android.mk:

 

1
2
3
4
5
6
7
8
9
10
LOCAL_PATH := $(call my-dir)
include  $(CLEAR_VARS)
LOCAL_MODULE    := static_add
LOCAL_SRC_FILES := libstatic_add.a
include  $(PREBUILT_STATIC_LIBRARY)
include  $(CLEAR_VARS)
LOCAL_MODULE    := share_add
LOCAL_STATIC_LIBRARIES := static_add
LOCAL_SRC_FILES := share.c
include  $(BUILD_SHARED_LIBRARY)

 

注意上面生成的libstatic_add.a必须跟Android.mk放在同一目录下,否则需要填写相应的路径,然后进行编译:

 

hejinlai_iMac:jni hejinlai$ ndk-build

Compile thumb : share_add <= share.c

Prebuilt : libstatic_add.a <= jni/

SharedLibrary : libshare_add.so

Install : libshare_add.so => libs/armeabi/libshare_add.so

 

提示so编译成功。

 

需要注意的是我这边share.c和static.c放在同一目录下,如果放在不同的目录下,需要指定

LOCAL_C_INCLUDES链接到相应的路径。

 

分类:  android solve


本文转自wanqi博客园博客,原文链接:http://www.cnblogs.com/wanqieddy/p/4616139.html如需转载请自行联系原作者


相关文章
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
928 1
|
12月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
375 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
12月前
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
|
12月前
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
Android开发
从零开始学Xamarin.Forms(四) Android 准备步骤(添加第三方Xamarin.Forms.Labs库)
原文: 从零开始学Xamarin.Forms(四) Android 准备步骤(添加第三方Xamarin.Forms.Labs库)  1.安装对应dll     Update-Package Xamarin.
1228 0
|
13天前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
176 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
23天前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
86 6
|
3月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
171 11
|
3月前
|
移动开发 Java 编译器
Kotlin与Jetpack Compose:Android开发生态的演进与架构思考
本文从资深Android工程师视角深入分析Kotlin与Jetpack Compose在Android系统中的技术定位。Kotlin通过空安全、协程等特性解决了Java在移动开发中的痛点,成为Android官方首选语言。Jetpack Compose则引入声明式UI范式,通过重组机制实现高效UI更新。两者结合不仅提升开发效率,更为跨平台战略和现代架构模式提供技术基础,代表了Android开发生态的根本性演进。
112 0
|
7月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
1370 77

热门文章

最新文章