Android 下 JNI 开发

Day3

01_回顾NDK开发流程-25

 public native String sayHello();

1. 关联NDK: Window -> Preferences -> Android -> NDK

2. 创建Android工程, 声明native方法.

3. 设置函数库名字: 右键工程 -> Android Tools -> App Native support

4. 使用javah生成.h的头文件, 并把.h文件拷贝到工程下jni文件夹中.

5. c代码提示: 右键工程 -> Properties -> C/C++ General ->  Path and Symbols

// Includes -> Add -> File system 选中以下路径.

 platforms\android-18\arch-arm\usr\include

 

6. 把后缀名.cpp改成.c, 实现native方法.

7. java代码中加载动态库, 调用native方法.

8.演示自动编译和直接运行

9.C返回中文出现乱编并解决

1.改成中文如下:

JNIEXPORT jstring JNICALL Java_com_atguigu_jnidemo_MainActivity_sayHello

  (JNIEnv * env, jobject obj){

// jstring    (*NewStringUTF)(JNIEnv*, const char*);

return (*env)->NewStringUTF(env,”你好!!”);

}

运行崩溃如图日志

 

 

3.解决方案,把文件编码改成UTF-8

10.C++和中文乱码

1.改c代码后缀名为.cpp和android.mk里面也该

2.讲解C语言中的env和C++语言中的用法

 

/**

 * 返回字符串给Java代码

 * JNIEnv* env在C语言中是:JNINativeInterface** ;如何调用结构体方法(**env).等价于(*env)->

 *

 * JNIEnv* env在C++语言中是: _JNIEnv*相当于JNINativeInterface*

 * 取值:相当于去JNINativeInterface结构体的方法:(*env).相当于env->

 */

JNIEXPORT jstring JNICALL Java_com_atguigu_jnidemo_MainActivity_sayHello

  (JNIEnv * env, jobject obj){

//(*env).相当于env->

//return (*env).NewStringUTF(“I am from C++!!”);//这是C++的用法

return env->NewStringUTF(“你好!!”);

//return (*env)->NewStringUTF(env,”你好!!”);//这是C语言的用法

}

 

 

 

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源,欢迎大家关注尚硅谷公众号(atguigu)了解更多。


上一篇:
下一篇:
关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
电话:010-56253825
邮箱:info@atguigu.com
地址:北京市昌平区宏福科技园综合楼6层(北京校区)

 深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦6层(上海校区)