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 := -llogLOCAL_MODULE := HelloNDKLOCAL_SRC_FILES := HelloNDK.cinclude $(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;@Overrideprotected 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();@Overridepublic 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");
}
好了,完毕!
更多相关文章
- 箭头函数的基础使用
- NPM 和webpack 的基础使用
- Python技巧匿名函数、回调函数和高阶函数
- 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
- 读取android手机流量信息
- 浅析android通过jni控制service服务程序的简易流程
- android 使用html5作布局文件: webview跟javascript交互
- Android(安卓)多媒体扫描过程(Android(安卓)Media Scanner Proces
- android“设置”里的版本号