软件开发

关于如何利用JNI把C/C++文件编译生成安卓可调用的动态库

2018-01-16  本文已影响14人  天之道天知道

在很多的工程中安卓工程中,有许多底层代码都是用C/C++写的, 且很多会封装成库,因为C/C++的代码效率高,所以就有一个问题是如何生成安卓可调用的动态库即so文件, 下面一一到来

  1. 下载NDK
    如果国外官网的下载速度太慢,可以找一些国内的网站
    http://www.cnblogs.com/bjzhanghao/archive/2012/11/14/android-platform-sdk-download-mirror.html
    http://blog.csdn.net/gyh198/article/details/75036686
    或者可以复制下载链接用迅雷下载
    我下载的是这个版本 android-ndk-r16-windows-x86_64 非安装版本的

  2. 解压文件。
    设置系统变量,在系统变量PATH添加刚才解压的NDK文件路径


    图片.png

    设置成功后在CMD中执行

ndk-build

会出现如下


图片.png

否则会提示找不到命令

注意:
(1)NDK的路径一定要选到这一层


图片.png

(2)系统变量有时候刚设置完后并不会使能,可能需要重启电脑

  1. 创建Android.mk文件以及Application.mk文件
    Android.mk文件内容如下
LOCAL_PATH := $(call my-dir)  
include $(CLEAR_VARS)  
LOCAL_MODULE := hello  
LOCAL_SRC_FILES := hello.c
include $(BUILD_SHARED_LIBRARY) 

其中第三行hello为要输出的文件名称,第四行为要编译的文件,如果是多个文件用 \ 换行,每行一个C/C++文件
这个文件的具体语法可以参考这篇文章
http://blog.csdn.net/ymangu666/article/details/23657565
http://blog.csdn.net/qq_695538007/article/details/44339643
下面是Application.mk 文件

APP_STL :=  stlport_static

如果系统中只有C文件的话,这个文件可以不要。
具体的语法参考如下文章
http://blog.csdn.net/wang_shaner/article/details/41479721

  1. NDK目录下新建JNI文件夹
    把要编译的C/C++文件,上面建的两个文件,都放入其中

  2. 在CMD窗口下,切换到NDK目录下
    然后执行

ndk-build
图片.png

编译成功后,会自动生成两个文件夹libs, 和obj
libs下就是针对不同平台生成的so动态库文件


图片.png

任务圆满完成!

上一篇 下一篇

猜你喜欢

热点阅读