建立简单NDK程序

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");

运行即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值