博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android NDK学习记录(一)
阅读量:6201 次
发布时间:2019-06-21

本文共 2451 字,大约阅读时间需要 8 分钟。

一、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
10
11
12 description13
14 15
18
19
20
21
22 23
26
27
28
29 30
33
34
35
36 37

四.新建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 生成头文件

          

 

       

转载地址:http://rxtca.baihongyu.com/

你可能感兴趣的文章
数据库持久连接理解
查看>>
Android进阶:打jar包获取assets中的资源 解决selector XML文件不能解析的问题
查看>>
[转载]SharePoint 2013搜索学习笔记之自定义结果源
查看>>
上传文件
查看>>
python manage.py startapp app 时候报错No module named _sqlite3
查看>>
11.02 跳过表中n行
查看>>
360遭下架,苹果商店封杀360手机应用
查看>>
2、AD工程创建步骤
查看>>
OO第三次博客作业
查看>>
[转]手把手教你做iOS推送
查看>>
Java公众号推荐 - BeJavaGod
查看>>
iptables规则组成
查看>>
面向对象
查看>>
NEFU OJ 205 最小树(一)
查看>>
hdu 新生晚会
查看>>
python socket网络编程
查看>>
java @override 报错处理
查看>>
docker数据管理--数据卷的备份
查看>>
selenium弹出框的处理
查看>>
hyperledger中文文档学习-1-词汇表
查看>>