Hello World 作为所有编程语言的起始阶段,占据着无法改变的地位,所有中 / / / / …… 版本的编程教材中, hello world 总是作为第一个 TEST 记录于书本之中,所有的编程第一步就在于此了!经典之中的经典! hello world 下面介绍下 NDK 开发的 Hello World

1Android 应用层 MainActivity.java

主要功能代码 a) 静态载入 So static { System.loadLibrary(libSoName); } b) 声明本地方法 public native String getStringFromJNI(); c) 调用本地方法 String mStrMSG = getStringFromJNI(); 代码附有注释如下: public class MainActivity extends Activity { // 也就是你 mk 配置文件中的 LOCAL_MODULE := NDK_01 private static final String libSoName = "NDK_01"; private Context mContext = null; private Button btnClick = null; private String mStrMSG = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mContext = this; btnClick = (Button) findViewById(R.id.btn_click); btnClick.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 调用 JNI 层实现的方法 mStrMSG = getStringFromJNI(); if(mStrMSG == null) { mStrMSG = " 调用 JNI 失败 "; } LogUtils.toastMessage(mContext, mStrMSG); } }); } /** * 声明本地方法 * * 该方法为 native 方法 . C 实现 * * @return JNI 给出的信息 */ public native String getStringFromJNI(); /** * 载入 JNI 生成的 so 库文件 */ static { System.loadLibrary(libSoName); } }

2Android.mk 文件的配置

之前有介绍过相关的内容 , 如果对配置有不清晰的地方请阅读 Android.mk 文件 简介 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_C_INCLUDES := $(LOCAL_PATH)/include LOCAL_MODULE := NDK_01 LOCAL_SRC_FILES := \ HelloWorld.c include $(BUILD_SHARED_LIBRARY)

3JNI HelloWorld.c文件

#include <string.h> #include <jni.h> jstring Java_com_duicky_MainActivity_getStringFromJNI( JNIEnv* env,jobject thiz ) { // 返回一个字符串给 Java return (*env)->NewStringUTF(env, "HelloWorld from JNI !"); }

4、运行程序

点击按钮调用声明为 native 的方法 吐司出从 JNI 层拿到的信息 效果图如下:

5、注意点


d) 声明本地方法必须加关键字 native 如: public native String getStringFromJNI(); e) C 文件中本地方法名的命名规则 如: jstring Java_com_duicky_MainActivity_getStringFromJNI( JNIEnv* env,jobject thiz ) Jstring 返回值 , 也可以为 void , jint 等等 类型 Java_com_duicky_MainActivity_getStringFromJNI 为方法名 , 其中以下划线 (_) 隔开 , 初始 Java 为默认写法 , com_duicky 为包名 , MainActivity 为类名 , getStringFromJNI 为声明本地方法的方法名字 有不理解的兄弟请留言,个人技术有限,有讲错的地方请大牛们指出 , 讲的不够全面的请多多包涵,谢谢 , 点击下载源码 HelloWorld例子

更多相关文章

  1. Tiny4412——Android访问硬件的方法
  2. 你不知道的 Android(安卓)WebView 使用漏洞
  3. AIDL使用以及原理分析
  4. eclipse的graphical layout窗口工作不正常或者消失了
  5. 我的Android进阶之旅------>Android(安卓)关于arm64-v8a、armeab
  6. Android(安卓)pm命令 以及在终端安装卸载安装包方法
  7. Android(安卓)Studio开发之 JNI 篇
  8. Android(安卓)系统(36)---Android(安卓)O、N版本修改dex2oat编译选
  9. Android(安卓)Handler 机制

随机推荐

  1. MySQL 8.0 可以操作 JSON 了
  2. MYSQL存储过程 注释详解
  3. MySQL命令提示符出现输入错误时如何修改
  4. 关于MySQL实现指定编码遇到的坑
  5. 为什么MySQL 删除表数据 磁盘空间还一直
  6. mysql中int(3)和int(10)的数值范围是否相
  7. 深入解析MySQL索引数据结构
  8. MySQL数据库必备之条件查询语句
  9. MySQL实例精讲单行函数以及字符数学日期
  10. MySQL数据库超时设置配置的方法实例