Android NDK 第一个例子 HelloNDK

Android NDK 里面Samples里面有很多例子。我这里是第一个例子,从C++层返回一个String到Java层。然后显示在Android TextView上面。


我们新建一个Android工程,默认新建工程是没有jni文件夹的,我们自己新建一个(虾米,这东西有什么用?  TT:这文件夹就是用来放NDK编译相关文件的)。


在jni文件里面,一定需要一个Android.mk文件,名字不能改成其它


这其实就是Linux中的Makefile文件,里面写的就是编译源文件的规则。


Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_LDLIBS := -llog

LOCAL_MODULE := HelloNDK

LOCAL_SRC_FILES := HelloNDK.c

include $(BUILD_SHARED_LIBRARY)


LOCAL_LDLIBS := -llog

加上这个库,我们就可以用来在C++中使用Android的Log输出了。


LOCAL_MODULE := HelloNDK

这是我们用NDK编译生成的动态链接库文件名,全名HelloNDK.so  ,在Android中通过加载这个So文件来执行C++代码。我们可以在 \libs\armeabi\libHelloNDK.so  这里找到它。


LOCAL_SRC_FILES := HelloNDK.c

HelloNDK.c 这个文件就是我们的C++代码了。LOCAL_SRC_FILES 需要编译的源代码文件列表,如果有多个,在每一个源文件后面用 “ \ ” 隔开


include $(BUILD_SHARED_LIBRARY)

编译动态链接库


下面是简单的HelloNDK.c

#include<string.h>
#include<jni.h>

jstring Java_com_example_ndkdemos_MainActivity_HelloNDK( JNIEnv* env,jobject thiz )
{

    //return (*env)->NewStringUTF(env, "Hello from JNI !");
	return (*env)->NewStringUTF(env,"HelloNDK");

}

超简单的,返回一个string到Java层。

函数名要按照标准的格式。

Java  一定加上这个开头

com_example_ndkdemos  包名,只不过用 _  代替了  .

MainActivity     这个是Activity名

HelloNDK   这个就是在Activity中注册的函数名了。


这里返回了 “HelloNDK”  这样一个字符串到Android层


下面看MainActivity.java了。主要代码就两行哈。

package com.example.ndkdemos;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

	private TextView textView;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		textView=(TextView)findViewById(R.id.textView1);
		textView.setText(HelloNDK());

	}
	
	public native String  HelloNDK();

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	
	static{
		System.loadLibrary("HelloNDK");
	}

}


要点:

1. public native String  HelloNDK();  这里注册了函数,用native表示这个函数在C++中实现。

2.    一定要记得加载动态链接库啊,而且只要填上名字就可以了,不要加上“.so”!

static

{
        System.loadLibrary("HelloNDK");
}


好了,完毕!





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