实现Android中简单的JNI调用(自己总结)

1.在官方网站下载Linux的NDK版本android-ndk-1.6_r1。

2.在windows平台VM虚拟机上安装ubuntu(主要是为了编译本地库文件供java中的jni调用)。

3.在ubuntu中用终端进入到android-ndk-1.6_r1目录下运行:./build/host-setup.sh

可能会出现这种错误:ERROR: Could not find a valid Nawk or Gawk executable.

Please ensure that either one of them is installed.

Use the --no-awk-check option to ignore this message.

这是因为ubuntu /bin//sh链接到了dash,而dash全称为Debian ALmquist shell,它比bash小得多,速度快,但功能有所缩减。现在大部分脚本都是bash脚本,所以较好的解决方案是:

sudo rm /bin/sh

sudo ln -s bash/bin/sh

运行成功后会出现:

Host setup complete.Please read docs/OVERVIEW.TXT if you don't know what to do.

4.在windows版的eclipse上创建一个android工程NDKO,代码如下:

package com.demo.NDKO;

import android.app.Activity;

import android.os.Bundle;

import android.widget.TextView;

public class NDKO extends Activity {

/** Called when the activity is first created. */

static{

System.loadLibrary("NDKO");

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

TextView tv=new TextView(this);

tv.setText("wenTao:"+getString());

setContentView(tv);

}

private native String getString();

}

5.在该工程中的/bin/com/demo/NDKO/目录下找到NDKO.class文件将其放到/bin下并在windows中运行cmd命令,进入到该bin目录下运行:javah –jni com.demo.NDKO.NDKO命令,这时生成.h的头文件,将该文件改名为:NDKO.h

6.在工程的根目录下建立一个文件夹jni,该文件夹与src,bin,gen等同一级。将刚才生成的NDKO.h放到jni文件夹下,同时在该jni文件夹下再编写一个C语言程序:NDKO.c,代码为:

#include

#include

#include

#include"NDKO.h"

#include

#defineLOG_TAG"NDKO"

#defineLOGI(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)

staticchars_string[] ="My god, I did it!";

jstring

Java_com_demo_NDKO_NDKO_getString( JNIEnv* env,

jobject thiz )

{

LOGI("MyJNI write is called!");

return(*env)->NewStringUTF(env,"My name is Xu Wentao");

}

7.将该工程从eclipse中拷贝出来,并将其放入ubuntu中的android-ndk-1.6_r1下的apps目录下,注意:在这里我们一定要在工程目录下建立一个apps文件夹,并将工程里面的所有文件拷贝到apps文件里,否则当我们运行终端进入到android-ndk-1.6_r1目录下输入:make APP=NDKO时会出现找不到jni文件这个异常。

8.在jni文件夹下存放了NDKO.c和NDKO.h下我们需要再创建一个Android.mk。这时我们可以到apps目录下的hello-jni文件夹下找到这个文件将其拷贝到NDKO/project/jni/目录下并在其中进行修改:

LOCAL_MODULE:= NDKO

LOCAL_SRC_FILES:= NDKO.c

9.回到上级目录NDKO下,创建一个文件Application.mk,该文件与project文件同级。同样我们可以采用上述方法从hello-jni里面进行拷贝Application.mk并在其中进行修改:

APP_MODULES:= NDKO(注意值要与Android.mk中的Local_MODULE一致)

10.将根目录的defalut.properties放到回收站中,因为当我们最终编译的时候会报不适合该android平台的错误。

11.最后我们通过终端进入到android-ndk-1.6_r1目录下执行make APP=NDKO命令,当我们看到:

Install:libNewJNI.so => apps/NDKO/project/libs/armeabi

就表示生成库文件成功。此时,我们再将回收站中的defalut.properties恢复并将该工程放到windows平台下的eclipse中就能运行成功了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值