Android NDK 开发之菜鸟
由于本人最近在帮一个朋友看NDK开发,期间遇到过一些不懂的问题,而在网上又没有找到什么好的解决方案;因此记录下来供参考。
首先呢,我使用的工具是Android Studio 一般来说配置好NDK也就可以了,这种教程网上也是有很多的。在这就不说了。
而我今天说的是另一种方案,不在Android Studio里面或者Eclipse里写JNI;而是使用Visual Studio 或者我使用的是QT Creator 中写项目,使用NDK进行编译。这种方式应该也是有很多人使用的。
当然在此之前你需要下载好NDK我使用的是NDK-r11,其它版本应该也是一样的。
-
创建一个项目
一直next;
-
创建一个测试JNI的类
- 编译项目,并进入到项目的class目录中,生成.h文件
注意目录关系,Eclipse中就是打开bin目录
当然你也可以使用cd来进入到这个目录
然后使用命令行来生成.h文件
使用javah 后面跟包名.类名
如果javah错,是你的JDK环境没配置好。如果找不到这个类,可能你还没有编译
然后关闭命令行,在目录中可以发现多了一个文件 - 使用QT Creator 或者Visual Studio 建立一个项目,实现上面.h中的方法
使用C++开发工具
使用c或者c++就是个人习惯了,不过在语法上略有差别
这里就不多说了,直接看结果。
注:有的编译器可能要将系统生成的#include <jni.h> 改为 #include "jni.h"
红色框中代码可能会有问题,可以直接使用注释的部分
-
编写.mk文件,使用NDK打包成.so
切换到hellojni的目录
新建这两个文件android.mk 和Application.mk 文件
android.mk中的内容为:LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.cpp
include $(BUILD_SHARED_LIBRARY)
Application.mk 中的内容为:APP_ABI := all
APP_STL := stlport_static说明:
APP_ABI
默认情况下,NDK的编译系统会生成"armeabi"ABI生成机器代码。all 是所有平台的机器APP_STL
默认情况下,NDK的编译系统为最小的C++运行时库,这里使用了string 就需要设置这个了最后,删除导入的jni.h 和jni_md.h (放进来是为了编写方便,编译时不需要)
同样,在这个地方输入cmd
这样就是成功了,去上级目录看下生成的文件,出错的话可能是JNI编写的语法有错误,可以根据情况找出问题
看下libs里面的文件
将这里面的文件放到项目中去,我只考了一个,根据实际情况
在build.gradle中配置sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}在JniTest中加载lib
在Activity 中测试效果
运行看下结果
好了,到这里就结束了。
转载于:https://my.oschina.net/afox/blog/742278