一、NDK环境在Mac中部署
1.准备eclipse,android sdk安装包,android ndk安装包()
2.部署android开发环境
3.部署NDK开发环境(配置环境变量)
二、编写基于NDK的HelloWorld
1.它的作用即是把实现了我们在Java code中声明的native方法的那个libraryload进来,或者load其他什么动态连接库。
1 static {2 System.loadLibrary("MFirstNDK");3 }
2.native关键标识的方法,不需要方法体的抽象方法,是由C/C++来实现的
1 public static native String getStr();
3.MFirstNDK.cpp 文件 用于返回java 本地方法getStr返回的操作实现
1 #include "jni.h" 2 #include "com_threew_ndk_NDKPlus.h" 3 /* 4 * Class: com_threew_ndk_NDKPlus 5 * Method: getStr 6 * Signature: ()Ljava/lang/String; 7 */ 8 JNIEXPORT jstring JNICALL Java_com_threew_ndk_NDKPlus_getStr 9 (JNIEnv *env, jclass thiz) {10 return env->NewStringUTF("hello world JNI");11 }
4.编写好以上文件代码,就可以在Android Activity里面调用本地方法getStr(),并获取"hello world JNI"
三、利用Ant工具快速生成java本地方法的.h的头文件
eclipse中带有ant插件,可以见在项目下编写ant xml文件,并添加入ant工作目录中,双击或run as 就可以直接在jni文件夹下生成想要的头文件。xml内容如下:
1 2 1011 12 description13 14 15 1819 22 23 2620 21 27 29 30 3328 34 36 3735
四.新建c++ class 文件,并用java本地文件调用
1.在jni文件夹下创建Hello的c++文件,会生成Hello.h 和 Hello.cpp文件
2.在Hello.h文件内添加一个方法,内容如下:
1 /* 2 * Hello.h 3 * 4 * Created on: 2014-9-20 5 * Author: Rubert 6 */ 7 8 #ifndef HELLO_H_ 9 #define HELLO_H_10 11 class Hello {12 public:13 Hello();14 char * getWords();15 virtual ~Hello();16 };17 18 #endif /* HELLO_H_ */
3.在Hello.cpp文件的实现方法如下:
1 /* 2 * Hello.cpp 3 * Created on: 2014-9-20 4 * Author: Rubert 5 */ 6 #include "Hello.h" 7 Hello::Hello(){ 8 // TODO Auto-generated constructor 9 }10 char* Hello::getWords(){11 return "hello";12 }13 Hello::~Hello(){14 // TODO Auto-generated constructor
4.在MFirstNDK.cpp中的实现如下:
1 JNIEXPORT jstring JNICALL Java_com_threew_ndk_NDKPlus_getWords(JNIEnv *env, jclass){2 Hello h;3 return env->NewStringUTF((const char*)h.getWords());4 }
5.遇到的问题
在编译工程中出现,4中得Hello 文件无法找到,前提是我头文件导入了,但是还是无法通过运行。最后发现是Eclipse错误提示的原因:最后是把一些提示都取消掉了
中间发现可能是这个问题,但是导入后依旧如此
五、基于X86模拟器和Arm模拟
genymotion模拟器 基于X86架构
Android自带模拟器 基于Arm架构
一般情况下,NDK是生成Arm的so文件,如果想改成X86的so文件。那么就得在工程目录下,新建一个Application.mk文件,内容如下:
APP_ABI := x86
如果两者都可以生成,则这么些
APP_ABI := x86 armeabi
六、附
Terminal相关记录,mac下得终端命令
1.乱码问题,打开终端,偏好-设置-高级-中文
2.通过cd命令进入文件夹,用open ./ 来打开当前文件夹
3.javah -jni com.xx.xx.xx.Xxx 生成头文件