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

    本文属于自我复习

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

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

一、简单练习项目结构

[Android初级]NDK之HelloWorld简单入门_第1张图片


(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

[Android初级]NDK之HelloWorld简单入门_第2张图片


(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();
	}

效果如下

[Android初级]NDK之HelloWorld简单入门_第3张图片












你可能感兴趣的:(android,helloworld,NDK)