java编译成native代码_Eclipse编译运行Native代码步骤详解

本文详述了如何使用Eclipse将Java代码编译为native代码,涉及配置NDK路径、创建Android工程、添加native支持、编写Java和C++代码、构建Android.mk及编译运行的步骤。通过一个简单的加法运算和字符串连接的例子,指导开发者完成从Java到C++的JNI实践。
摘要由CSDN通过智能技术生成

转载自:http://blog.csdn.net/mylzc/article/details/8740523

最近一段时间在做native层的开发,把一些经验和技巧记录下来,希望对大家有帮助。本教程以step-by-step的形式给正处入门阶段的native开发新手提供指引。

导言:在进行Android开发的过程中,在一些对性能要求较高的场景,例如图像处理,视音频编解码等,需要使用到native代码以提高运行效率。本教程将在native层进行加法运算和字符串连接,通过这个简单的例子阐述使用eclipse编译运行ndk代码的过程。

注:JNI基础知识不在本文的讨论范围之内,推荐浏览oracle的帮助文档进行系统学习

开发环境:

步骤详解:

1、  配置ndk路径

打开Eclipse后,点击菜单栏的Project->Preferences打开Preferences窗口,点击左侧Android->NDK选项,在右侧NDK Location填入ndk的路径

1364635642_6947.PNG

2、  创建工程并增加native支持

点击菜单栏的File->New->Android Application Project创建Android工程。

1364635689_4035.PNG

创建完毕后,在PackageExplorer中右键点击刚才新建的Android项目,选择Android Tools->Add

Native Support,按下图填写,点击确认后,工程目录下会增加jni目录,jni目录下有test.cpp和Android.mk。

1364635721_2770.PNG

1364635743_4654.PNG

3、  编写jave层的jni接口

创建一个Java类,类名为Jni

编写加载库的代码,并添加两个native方法

packagecom.mylzc.jni;

publicclassJni {

static{

System.loadLibrary("test");//加载库 libtest.so

}

publicstaticnativeintplus(inta,intb);//对应native层的Java_com_mylzc_jni_Jni_plus函数

publicstaticnativeString getString(String a, String b);//对应native层的Java_com_mylzc_jni_Jni_getString函数

}

4、  编写native层的代码

#include 

#include "stdlib.h"

extern"C"{

jint Java_com_mylzc_jni_Jni_plus

(JNIEnv *, jclass, jint x, jint y) {

returnx + y;//返回x+y的结果

}

jstring Java_com_mylzc_jni_Jni_getString

(JNIEnv *env, jclass, jstring a, jstring b) {

constchar* str_a = env->GetStringUTFChars(a, 0);

constchar* str_b = env->GetStringUTFChars(b, 0);

intlen_a = strlen(str_a);

intlen_b = strlen(str_b);

//concat string

char* str_result =newchar[len_a+len_b +1];

strcpy(str_result, str_a);

strcat(str_result,str_b);

jstring jstr_result = env->NewStringUTF(str_result);//创建string对象

delete[] str_result;

env->ReleaseStringUTFChars(a, str_a);

env->ReleaseStringUTFChars(b, str_b);

returnjstr_result;//返回ab字符串连接之后的结果

}

}

5、  编写Android.mk

LOCAL_PATH:= $(call my-dir)  #指定源文件目录

include $(CLEAR_VARS) #清空变量

LOCAL_MODULE    :=test#模块名称,对应编译出libtest.so

LOCAL_SRC_FILES :=test.cpp #指定要编译的源文件

include $(BUILD_SHARED_LIBRARY) #指定编译动态链接库

6、  编译运行

编译:在Package Explorer视窗,右键点击jni项目,选择Build Project编译项目,编译成功后,在工程libs->armeabi目录下可以看到libtest.so。

1364635762_6218.PNG

运行:在Package Explorer视窗,右键点击jni项目,选择Run As->Android Application运行工程。

最后,我们可以在logcat中可以看到打印结果:

1364635777_6514.PNG

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值