1.安装ndk程序
环境:ubuntukylin 13.04
下载android-ndk-r9-linux-x86.tar.bz2
解压此文件,得到android-ndk-r9目录
进入该目录,pwd得到路径
添加环境变量
sudo vim /etc/bash.bashrc
在该文件中添加:
NDK=/xx/xx (上面pwd的路径)
export NDK
使变量生效
suorce /etc/bash.bashrc
查看变量:
echo $NDK
输出(上面pwd的路径),即正确
验证NDK:
进入android-ndk-r9/samples/hello-jni/jni目录
执行命令$NDK/ndk-build
编译成功后会在该目录多生成2个子目录libs,obj目录
ndk安装正确
2.创建简单的NDK程序
打开eclipse,创建一个android工程
在src目录的com.jpf.myjni.MyJNI包中创建一个类,stringFromJNI
package com.jpf.myjni.MyJNI;
public class stringFromJNI {
public native void HelloWorld(String str);
static {
System.loadLibrary("myjni");
}
}
打开控制台,进入src目录,创建jni头文件,使用如下命令
javah -jni com.jpf.myjni.MyJNI.stringFromJNI
生成头文件如下:
com_jpf_myjni_MyJNI_stringFromJNI.h
内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_jpf_myjni_MyJNI_stringFromJNI */
#ifndef _Included_com_jpf_myjni_MyJNI_stringFromJNI
#define _Included_com_jpf_myjni_MyJNI_stringFromJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_jpf_myjni_MyJNI_stringFromJNI
* Method: HelloWorld
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_com_jpf_myjni_MyJNI_stringFromJNI_HelloWorld
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif
在工程根目录创建myC目录
在该目录中再创建jni目录和src目录
在jni目录中创建Android.mk文件和myjni.c文件
内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := myjni
LOCAL_SRC_FILES := myjni.c
LOCAL_LDLIBS += -llog
include $(BUILD_SHARED_LIBRARY)
//myjni.c//
#include <string.h>
#include <stdio.h>
#include <jni.h>
#include <android/log.h>
#define LOG_TAG "MYJNI"
#define LOGI(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
JNIEXPORT void JNICALL Java_com_jpf_myjni_MyJNI_stringFromJNI_HelloWorld
(JNIEnv *env, jobject obj, jstring string)
{
const char *str = (*env)->GetStringUTFChars(env, string, NULL);
printf("yiheng test:%S\n", str);
LOGI("MyJNI is called!");
}
编译该c文件,在控制台,进入该目录,输入命令$NDK/ndk-build
编译成功生成obj和libs文件
将libs文件中的内容复制到工作根目录的libs文件中
在MainActivity中调用:
new stringFromJNI().HelloWorld("test");
运行即可