基于 Android NDK 的学习之旅-----HelloWorld

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. OpenCore的代码结构
  2. android - adb命令的使用
  3. Android逆向之旅---Hook神器家族的Frida工具使用详解
  4. xamarin android menu的用法
  5. Android(安卓)进阶 教你打造 Android(安卓)中的 IOC 框架 【View
  6. 浅谈Java中Collections.sort对List排序的两种方法
  7. NPM 和webpack 的基础使用
  8. Python list sort方法的具体使用
  9. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程

随机推荐

  1. 在jQuery返回的HTML中找到控件
  2. 2017.4.9 JQuery学习续写
  3. 当AJAX响应来自PHP文件时,如何显示以消息
  4. 关于jQuery Themeroller主题,我在哪里可以
  5. 设置活动类并将其从所有其他类中删除
  6. 关于jQuery获取html标签自定义属性值或da
  7. jQuery 异步上传插件 Uploadify302 使用
  8. jQuery无法识别前缀为“/”的类名
  9. jQuery之mouseover与mouseenter以及mouse
  10. 如何使用智能管理员的注销警告弹出窗口来