Eclipse编译运行Native代码步骤详解
2013-03-30 20:35
309 查看
最近一段时间在做native层的开发,把一些经验和技巧记录下来,希望对大家有帮助。本教程以step-by-step的形式给正处入门阶段的native开发新手提供指引。
导言:在进行Android开发的过程中,在一些对性能要求较高的场景,例如图像处理,视音频编解码等,需要使用到native代码以提高运行效率。本教程将在native层进行加法运算和字符串连接,通过这个简单的例子阐述使用eclipse编译运行ndk代码的过程。
注:JNI基础知识不在本文的讨论范围之内,推荐浏览oracle的帮助文档进行系统学习
开发环境:
Adt-bundle(ver:21.1.0) 下载地址:https://developer.android.com/sdk/index.html
Ndk(ver:r8b) 下载地址:https://developer.android.com/tools/sdk/ndk/index.html
示例工程下载地址:https://github.com/ilzc/Code/tree/master/jni
步骤详解:
1、 配置ndk路径
打开Eclipse后,点击菜单栏的Project->Preferences打开Preferences窗口,点击左侧Android->NDK选项,在右侧NDK Location填入ndk的路径
2、 创建工程并增加native支持
点击菜单栏的File->New->Android Application Project创建Android工程。
创建完毕后,在PackageExplorer中右键点击刚才新建的Android项目,选择Android Tools->Add Native Support,按下图填写,点击确认后,工程目录下会增加jni目录,jni目录下有test.cpp和Android.mk。
3、 编写jave层的jni接口
创建一个Java类,类名为Jni
编写加载库的代码,并添加两个native方法
4、 编写native层的代码
5、 编写Android.mk
6、 编译运行
编译:在Package Explorer视窗,右键点击jni项目,选择Build Project编译项目,编译成功后,在工程libs->armeabi目录下可以看到libtest.so。
运行:在Package Explorer视窗,右键点击jni项目,选择Run As->Android Application运行工程。
最后,我们可以在logcat中可以看到打印结果:
导言:在进行Android开发的过程中,在一些对性能要求较高的场景,例如图像处理,视音频编解码等,需要使用到native代码以提高运行效率。本教程将在native层进行加法运算和字符串连接,通过这个简单的例子阐述使用eclipse编译运行ndk代码的过程。
注:JNI基础知识不在本文的讨论范围之内,推荐浏览oracle的帮助文档进行系统学习
开发环境:
Adt-bundle(ver:21.1.0) 下载地址:https://developer.android.com/sdk/index.html
Ndk(ver:r8b) 下载地址:https://developer.android.com/tools/sdk/ndk/index.html
示例工程下载地址:https://github.com/ilzc/Code/tree/master/jni
步骤详解:
1、 配置ndk路径
打开Eclipse后,点击菜单栏的Project->Preferences打开Preferences窗口,点击左侧Android->NDK选项,在右侧NDK Location填入ndk的路径
2、 创建工程并增加native支持
点击菜单栏的File->New->Android Application Project创建Android工程。
创建完毕后,在PackageExplorer中右键点击刚才新建的Android项目,选择Android Tools->Add Native Support,按下图填写,点击确认后,工程目录下会增加jni目录,jni目录下有test.cpp和Android.mk。
3、 编写jave层的jni接口
创建一个Java类,类名为Jni
编写加载库的代码,并添加两个native方法
package com.mylzc.jni; public class Jni { static { System.loadLibrary("test");//加载库 libtest.so } public static native int plus(int a, int b);//对应native层的Java_com_mylzc_jni_Jni_plus函数 public static native String getString(String a, String b);//对应native层的Java_com_mylzc_jni_Jni_getString函数 }
4、 编写native层的代码
#include <jni.h> #include "stdlib.h" extern "C" { jint Java_com_mylzc_jni_Jni_plus (JNIEnv *, jclass, jint x, jint y) { return x + y;//返回x+y的结果 } jstring Java_com_mylzc_jni_Jni_getString (JNIEnv *env, jclass, jstring a, jstring b) { const char* str_a = env->GetStringUTFChars(a, 0); const char* str_b = env->GetStringUTFChars(b, 0); int len_a = strlen(str_a); int len_b = strlen(str_b); //concat string char* str_result = new char[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); return jstr_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。
运行:在Package Explorer视窗,右键点击jni项目,选择Run As->Android Application运行工程。
最后,我们可以在logcat中可以看到打印结果:
相关文章推荐
- Eclipse编译运行Native代码步骤详解
- Android编译运行Native程序详解
- Eclipse中对java代码的编译环境和运行环境的设置
- 如何将MTK的代码分模块在eclipse中单独编译运行起来调试
- 在eclipse下编译和运行c#的代码!
- 编译运行QGis步骤详解!
- [Eclipse笔记]Just for fun – 在Eclipse下编译和运行C#的代码
- Eclipse笔记-Maven项目无法编译运行src/test/java下的代码
- Native Client SDK 发布,在 Chrome 里无缝运行本地编译代码
- 3000 fps代码运行步骤详解(C++)
- eclipse+cdt 代码编译通过 正常运行 编辑器却报错
- [COCOS2DX]交叉编译实践+速度优化(vs2012修改win32代码+修改makefile+编译安卓项目包+部署安卓项目包到Eclipse+运行apk)
- Sublime Text 3 实现C++代码的编译和运行示例
- 搭建make环境编译c代码运行在手机中
- 在自己的java代码中编译并运行程序
- eclipse 配置 maven 编译代码
- 开源路由软件Quagga 源代码 编译/安装/运行/调试(Eclipse环境)
- React Native系列(6) - 编译安卓私有React-Native代码
- MyCat部署运行(Linux环境)与使用步骤详解
- eclipse中构建ant项目和编译运行ant