您的位置:首页 > 运维架构 > Linux

linux下eclipse构建并编译android一个简单jni项目

2015-01-15 00:03 302 查看
第一,java源代码的编写,在eclips下面新建android工程,创建helloJNI.java

packagecom.john.helloJNI;

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.util.Log;

importandroid.widget.TextView;

publicclasshelloJNIextendsActivity{

/**Calledwhentheactivityisfirstcreated.*/

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

TextViewJNITest=(TextView)findViewById(R.id.jniTextView);

Log.i("hellojni","before!/n");

Stringstr=getJNItest();

Log.i("hellojni","before!/n");

JNITest.setText(str);

}

static{

System.loadLibrary("JNITest");

}

publicnativeStringgetJNItest();

}

在命令行下进入工程所在目录,运行

javah-classpathbin-djnicom.john.helloJNI.helloJNI

-d的含义是生成一个jni的目录,里面存放生成的jni的.h文件,com.john.helloJNI.helloJNI是类,生成com_john_helloJNI_helloJNI.h

编写com_john_helloJNI_helloJNI.c

#include"com_john_helloJNI_helloJNI.h"

JNIEXPORTjstringJNICALLJava_com_john_helloJNI_helloJNI_getJNItest(JNIEnv*env,jobjectobj)
{
return(*env)->NewStringUTF(env,(char*)"JNITestNativeString");
}

编写android.mk
LOCAL_PATH:=$(callmy-dir)
include$(CLEAR_VARS)

LOCAL_SRC_FILES:=/
com_john_helloJNI_helloJNI.c

LOCAL_C_INCLUDES:=/
$(JNI_H_INCLUDE)

LOCAL_PRELINK_MODULE:=false
LOCAL_MODULE:=libJNITest
LOCAL_MODULE_TAGS:=optional

include$(BUILD_SHARED_LIBRARY)

把这二个文件com_john_helloJNI_helloJNI.c和android.mk放在前面建立的jni目录下

其实可以手动在ndk里面编译这3个文件,但是最好还是用eclipse来编译,这样有什么错误修改源代码也更方便。
在eclipse里面右击工程项目,选择最后一个properties,选择Builders->new->Program.这个时候会出现一个选项卡菜单。

Main选项卡中
location填写/bin/bash(因为我用的是unbuntu)
workingDirectory填写/bin
Argument填写
--login-c"cd/home/john/android/workspace/desktop/jni&&/home/john/android/android-ndk-r5/ndk-build"

这里--login是登录bash,-c是命令,cd后面是刚才创建jni目录,&&是说明还需要继续运行后面的命令,后面就是ndk的ndk-bulid文件
所在的目录了。
如图




后面的Reflesh选项卡和BuildOption选项卡如下图









其中二个的SpecifyResources都要选中前面创建的jni文件夹。

现在配置完成了,退出后就可以看到eclipse自动在编译了,如果编译成功,会在工程目录下同步生成一个文件夹libs/armeabi,里面会有
生成的so文件。

简单的jni完成了,现在开始准备动手做项目了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: