您的位置:首页 > 移动开发 > Android开发

[Android初级]NDK之HelloWorld简单入门

2015-02-08 15:10 302 查看
    本文属于自我复习

主要介绍ndk的使用入门,也就是最简单的helloworld!程序员最爱HelloWorld了!


在练手之前,确保你已经下载并配置好了android ndk开发的环境了,这里就不描述了。

一、简单练习项目结构



(1).如要求在项目根目录下创建jni文件夹,在创建我们的c文件:hellNDK.c

#include <jni.h>

/*
* 方法名称规定 : Java_完整包名类名_方法名()
* JNIEnv 指针
*
* 参数介绍 :
* env : 代表Java环境, 通过这个环境可以调用Java中的方法
* thiz : 代表调用JNI方法的对象, 即MainActivity对象
*/
jstring Java_org_jan_android_ndk_MainActivity_helloFromJNI(JNIEnv *env, jobject thiz)
{
/*
* 调用 android-ndk-r9c\platforms\android-8\arch-arm\usr\include 中jni.h中的方法
* jni.h 中定义的方法  jstring (*NewStringUTF)(JNIEnv*, const char*);
*/
return (*env)->NewStringUTF(env, "hello world ndk!你好!");
}
(2).编写Android.mk文件,这是个Makefile,我们需要了解一些常用的环境变量如下

 LOCAL_PATH指定源码的目录,$(call my-dir),学过Linux Shell再熟悉不过了

  LOCAL_MODULE编译生成的.so库

  LOCAL_SRC_FILES指定加入编译的源文件

  LOCAL_LALIBS指定其他库,-l + 库名

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := helloNDK
LOCAL_SRC_FILES := helloNDK.c

include $(BUILD_SHARED_LIBRARY)


(3).在项目路径下,执行命令:ndk-build

编译出已经命名的helloNDK.so



(4)在我们的程序里面,要求加载并调用jni的方法helloFromJNI()

public class MainActivity extends Activity {

static{
//加载静态库文件
System.loadLibrary("helloNDK");
}

/*
* 声明一个native方法
* 这个方法在Java中是没有实现的, 没有方法体
* 该方法需要使用C语言编写
*/
public native String helloFromJNI();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println(helloFromJNI());
}

public void onClick(View view) {
//点击按钮显示从jni调用得到的字符串信息
Toast.makeText(getApplicationContext(), helloFromJNI(), Toast.LENGTH_SHORT).show();
}


效果如下

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ndk helloworld Android