Hello World
作为所有编程语言的起始阶段,占据着无法改变的地位,所有中
/
英
/
法
/
德
/
美
……
版本的编程教材中,
hello world
总是作为第一个
TEST
记录于书本之中,所有的编程第一步就在于此了!经典之中的经典!
hello world
!
下面介绍下
NDK
开发的
Hello World
1、Android 应用层 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);
}
}
2、Android.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)
3、JNI层 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例子