NDK 入门

初步使用NDK

在windows平台,需要下载Cygwin工具才能编译C文件,长期写JAVA,突然写C程序感觉挺爽的,O(∩_∩)O~

然后到Android官方下载Android NDK.

 

首先创建一个简单Android Project

编写一个JNI.java类,主要放置native方法

 

package com.birds.android.ndk;

/**
 * @author gaofeng
 * @2013-10-25
 * 
 */
public class JNI {
	public native String getString(String str);
}

非常简单就是打印一个字符串

 

编译Eclipse工程,然后cmd进入project到bin/classes目录下,生成一个头文件

输入命令 javah -d ../../jni com.birds.android.ndk.JNI    -d是输出到指定目录

 

 

 

在jni目录下建一个jni.c文件,头文件是刚刚生成的 com_birds_android_ndk_JNI.h

开始实现函数体内容

#include "com_birds_android_ndk_JNI.h"

JNIEXPORT jstring JNICALL Java_com_birds_android_ndk_JNI_getString
  (JNIEnv *env, jobject job, jstring jstr) {
    const char* s1 = "I got a string";
	return (*env)->NewStringUTF(env,s1);
}


编写一个mk配置文件 用来编译生成so模块

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := first-jni  -- 这个是自己起的模块名字
LOCAL_SRC_FILES := jni.c    -- 要编译的c源文件
include $(BUILD_SHARED_LIBRARY)

 

进入工程下面输入ndk-build命令

 

自动会在项目的libs目录里面生成so模块文件

 

 

在Activity里面调用

	static {
		System.loadLibrary("first-jni"); //这地方写模块名字
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findViewById(R.id.btn1).setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		if (v.getId() == R.id.btn1) {
			String s = new JNI().getString("");
			Toast.makeText(this, s, Toast.LENGTH_SHORT).show();
		}
	}


 

OK, That's All.

 

 


 

 

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