Android NDK环境搭建及调用JNI的简单步骤
转载请注明:http://www.cnblogs.com/tiantianbyconan/p/3396595.html
Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行交互操作。
1. 下载NDK(http://developer.android.com/tools/sdk/ndk/index.html),并解压,配置Path路径
2. 在项目中新建一个名为jni的文件夹,在jni中新增Android.mk文件,文件内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := PhotoUtil
LOCAL_SRC_FILES := PhotoUtil.c
LOCAL_LDLIBS := -llog -ljnigraphics
include $(BUILD_SHARED_LIBRARY)
LOCAL_MODULE:当前模块的名称
LOCAL_SHARED_LIBRARIES:当前模块需要依赖的共享库。
LOCAL_SRC_FILES:所要调用的C源码
3. 把PhotoUtil.c文件复制到jni目录下
PhotoUtil.c,包含一个图片处理方法:
JNIEXPORT void JNICALL Java_com_wangjie_customviews_PicturesDialog_functionToBlur(JNIEnv* env, jobject obj, jobject bitmapIn, jobject bitmapOut, jint radius) {
……
}
方法Java_com_wangjie_customviews_PicturesDialog_functionToBlur的取名方式:
Java_:固定
com_wangjie_customviews:java包名
PicturesDialog:java类名
functionToBlur:java使用的方法名
4. 编译C源码,生产so库文件
进入jni目录:
ndk-build 或者
ndk-build APP_PLATFORM=android-8
"Compile thumb : PhotoUtil <= PhotoUtil.c
SharedLibrary : libPhotoUtil.so
Install : libPhotoUtil.so => libs/armeabi/libPhotoUtil.so
执行完毕之后,android项目的libs目录下就会生成so文件:
\libs\armeabi\libPhotoUtil.so
5. 在android中java代码调用:
static{
System.loadLibrary("PhotoUtil");
}
加载photoUtil库(libPhotoUtil.so)
并添加:
private native void functionToBlur(Bitmap bitmapIn, Bitmap bitmapOut, int radius);
然后在其他地方只需要调用该functionToBlur()方法即可:
functionToBlur(bgBitmap, bitmapOut, 50);
参考:
http://www.ibm.com/developerworks/opensource/tutorials/os-androidndk/section5.html
http://developer.android.com/tools/sdk/ndk/index.html#Installing
http://stackoverflow.com/questions/2067955/fast-bitmap-blur-for-android-sdk
Android NDK环境搭建及调用JNI的简单步骤的更多相关文章
- 【转】Windows环境下Android NDK环境搭建
原文网址:http://www.metsky.com/archives/525.html 前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员 ...
- Android NDK 环境搭建 + 测试例程
懒得废话一大堆概念,关于ADT.NDK的概念要是你不懂,怎么会搜到这里来?所以你只需要根据下面的步骤来,就可以完成NDK环境搭建了. 步骤:(假设你未安装任何相关开发工具,如果已经安装了,就可以跳过) ...
- Windows环境下Android NDK环境搭建
前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员来讲,基本够用了,由于Linux系统的权限限制和Android封装架构限制,很多涉及底层设 ...
- Android NDK 环境搭建 + 测试例程(转)
懒得废话一大堆概念,关于ADT.NDK的概念要是你不懂,怎么会搜到这里来?所以你只需要根据下面的步骤来,就可以完成NDK环境搭建了. 步骤:(假设你未安装任何相关开发工具,如果已经安装了,就可以跳过) ...
- android ndk环境搭建,如果是mac,请先装mac make编译器(可以使用Xcode进行安装)
Android SDK:android-sdk-mac_86Android NDK: android-ndk-r4b-darwin-x86EclipseADTCDTANT搭建Android SDK开发 ...
- Android NDK 环境搭建
使用最新ndk,直接抛弃cygwin,曾经做Android的项目要用到NDK就必需要下载NDK,下载安装Cygwin(模拟Linux环境用的),下载CDT(Eclipse C/C++开发插件),还要配 ...
- Android NDK环境搭建
本文主要记录NDK环境在Ubuntu下的搭建. 下载NDK 在官网进行下载NDK https://developer.android.com/ndk/downloads/index.html 当前最新 ...
- Android开发环境搭建篇详尽的教程实例汇
原文链接:http://android.eoe.cn/topic/android_sdk 一.android开发环境搭建图文教程整理篇: 1.Android开发环境搭建全程演示(jdk+eclip+a ...
- Android的环境搭建
尽管以前并没有接触过软件开发.但是,现在网络资源实在是太丰富了.所以网搜了一下,认为Android的环境搭建可分为以下五个步骤来完成.第一步:安装JDK:第二步:配置Windows上JDK的变量环境: ...
随机推荐
- [java] 汇率换算器实现(1)
[java] 汇率换算器实现(1) // */ // ]]> [java] 汇率换算器实现(1) Table of Contents 1 问题描述 2 类设计 3 初步实现 3.1 建立项目 ...
- asp.Net获取脚本传过来的参数的方法汇总
最基础的知识啦,不过,还是记下来吧. 接收用get 方法传输的数据的写法: string userName= Request.QueryString["name"]; 接收用pos ...
- PHP的数据类型总结
最近开始学习php,下面是我总结的数据类型,画的思维导图: 注意:查看图片要调大浏览器的缩放比例(我也不知道为啥图片上传之后显示这么小,不清晰): 上面太大看不清,我就分别截图:
- Android Studio快捷键每日一练(6)
原文地址:http://www.developerphil.com/android-studio-tips-of-the-day-roundup-6/ 51.重构代码 苹果:Ctrl+T Win ...
- EntityFramework6.0的Sql读写分离拦截器 和 MVC的 Action拦截器 对比
EF的DbCommandInterceptor类 拦截: EF6.1也出来不少日子了,6.1相比6.0有个很大的特点就是新增了System.Data.Entity.Infrastructure.Int ...
- 理清那么多个OO(面向对象)
OOA - Object-Oriented Analysis(面向对象分析) OOT - Object-Oriented Testing (面向对象测试) OOP - Object-Oriented ...
- 关于SilverLight
目前工作中用到SilverLight,有必要对其作一定的了解.
- ASP.NET访问Excel 失败的解决方法(错误号:80070005,8000401a)
用asp.net把值写入Excel在本地测试通过,然后提交服务器后老是写入不成功 并提示错误: Retrieving the COM class factory for component with ...
- DataTable 除去列中重复值
DataTable dtPCI = dtblSourceData.DefaultView.ToTable(true, new string[] { "Server Cell PCI" ...
- Android使用SQLite数据库(1)
Android中使用SQLite数据库要通过SQLiteOpenHelper类. 首先,定义相关变量: // 数据库变量 DatabaseHelper mDBH; SQLiteDatabase db; ...