Android编译运行Native程序详解
来源:互联网 发布:数据库系统工程视频 编辑:程序博客网 时间:2024/06/05 20:56
最近闲来无事就研究了下Android如何编译运行Native程序,现在记录下来方便以后回顾。在进行Android开发的过程中,在一些对性能要求较高的场景,例如图像处理,视音频编解码等,需要使用到native代码以提高运行效率。
编译运行Native程序需要用到NDK(Native DevelopmentKit),和JDK类似的,熟悉Java都知道。
NDK的下载地址:https://developer.android.com/tools/sdk/ndk/index.html
下载完后解压,接下来就是见证奇迹的时刻:
1.配置NDK路径
打开Eclipse后,点击菜单栏的Project->Preferences打开Preferences窗口,点击左侧Android->NDK选项,在右侧NDKLocation填入ndk的路径。
2. 创建Android工程
这步比较简单,懂Android开发的都会,这里就不写了,这里我们创建一个jni的工程。
3.增加Native支持
创建完成后,在PackageExplorer中右键点击刚才新建的Android项目,选择Android Tools->AddNativeSupport,按下图填写,点击确认后,工程目录下会增加目录,目录下有test.cpp和Android.mk。
编译运行Native程序需要用到NDK(Native DevelopmentKit),和JDK类似的,熟悉Java都知道。
NDK的下载地址:https://developer.android.com/tools/sdk/ndk/index.html
下载完后解压,接下来就是见证奇迹的时刻:
1.配置NDK路径
打开Eclipse后,点击菜单栏的Project->Preferences打开Preferences窗口,点击左侧Android->NDK选项,在右侧NDKLocation填入ndk的路径。
2. 创建Android工程
这步比较简单,懂Android开发的都会,这里就不写了,这里我们创建一个jni的工程。
3.增加Native支持
创建完成后,在PackageExplorer中右键点击刚才新建的Android项目,选择Android Tools->AddNativeSupport,按下图填写,点击确认后,工程目录下会增加目录,目录下有test.cpp和Android.mk。
4.编写jave层的jni接口
创建一个Java类,类名为testJni
编写加载库的代码,并添加两个native方法
package com.lyc.testjni;public class testJni { static { System.loadLibrary("test");//加载库 libtest.so } public static native int plus(int a, int b);//对应nativeJava_com_mylzc_jni_Jni_plus函数 public static native String getString(String a, String b);//对应native层的Java_com_mylzc_jni_Jni_getString函数 }
#include #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字符串连接之后的结果 }}
6.编写Android.mk
LOCAL_PATH := $(call my-dir) #指定源文件目录include $(CLEAR_VARS) #清空变量LOCAL_MODULE := test #模块名称,对应编译出libtest.soLOCAL_SRC_FILES := test.cpp #指定要编译的源文件include $(BUILD_SHARED_LIBRARY) #指定编译动态链接库7.编译运行
编译:在Package Explorer视窗,右键点击jni项目,选择BuildProject编译项目,编译成功后,在工程libs->armeabi目录下可以看到libtest.so。
运行:在Package Explorer视窗,右键点击jni项目,选择Run As->AndroidApplication运行工程。
最后,我们可以在logcat中可以看到运行打印的结果。
至此整个程序就结束。
0 0
- Android编译运行Native程序详解
- Eclipse编译运行Native代码步骤详解
- Eclipse编译运行Native代码步骤详解
- Eclipse编译运行Native代码步骤详解
- Eclipse编译运行Native代码步骤详解
- Eclipse编译运行Native代码步骤详解
- Eclipse编译运行Native代码步骤详解
- android开机自动运行native程序
- java 程序编译和运行过程详解
- Android程序编译过程详解
- React Native 运行android程序报SDK文件不存在错误
- 【Android Native Code开发系列】 五 运行、调试编译的Native Code项目
- 【Android Native Code开发系列】 五 运行、调试编译的Native Code项目
- React Native Android 虚拟机运行
- java程序编译运行
- 程序编译运行相关
- maple 程序,编译,运行
- Scala程序编译运行
- Android 粒子 3D效果
- Java线程中带有返回值的线程Callab…
- GCC编译优化
- The connection to adb is down, and a severe error has occured解决方案.
- DB2执行Sql语句中时的with ur
- Android编译运行Native程序详解
- CentOS安装Maven
- 微信公众平台的开发
- 腾讯1亿用户在线背后的技术挑战
- android图片处理方法(不断收集中…
- 正则表达式
- 分析、云、移动和社交计算技…
- ListView由于item项中包含某些可以…
- Eclipse 智能优化设置