Android NDK介绍及JNI调用
来源:互联网 发布:mac os山狮系统 编辑:程序博客网 时间:2024/05/16 04:13
Android NDK是用来编译能在手机ARM平台上运行的,通过C/C++编写的LIB库。
注:理论上不只在ARM平台,以后应该也能在Intel x86平台上运行的。
JNI调用,是为了使java能够调用C/C++所编写的程序的一种机制。
Android NDK和JNI调用结合,就能够使Android程序,调用原生底层用C/C++实现的功能。
1.NDK开发环境配置
在Windows下开发需要安装Cygwin,安装时除了默认选择项外,还要选中gcc和make.
在Linux下,如Ubuntu,通过apt-get 安装gcc和make即可。
然后下载NDK,解压到特定的目录(如:D:\Android)
由于awt兼容性的问题,需要将D:\Android\android-ndk-r7\prebuilt\windows\bin中的awt.exe改为awt_.exe.(我使用ndk是r8,cygwin是最新版,不修改也行)
同时把D:\Android\android-ndk-r7加入到系统的PATH中,方便使用,
打开Cygwin,cd到/cygdrive/d/Android/android-ndk-r7/samples/hello-jni/jni目录,输入ndk-build,测试环境是否正常
出现以上显示的内容,即表示环境配置正常。
注:/cygdrive/d/即表示windows中的D盘。
2.开发Android测试程序
新建一个Android项目hello,包名com.hello
把自动生成的HelloActivity中修改为以下内容
public
class
HelloActivity
extends
Activity {
private
static
final
String TAG =
"Hello"
;
static
{
System.loadLibrary(
"hello"
);
}
private
native
String printJNI();
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d(TAG, printJNI());
}
}
通过System.loadLibrary(“hello”)加载C编写的LIB,并定义native方法printJNI,最后调用printJNI()方法测试。
3.开发C语言程序,并通过NDK编译
在新建在helo项目的根目录下新建jni目录,如D:\MyWorkSpace3\hello
打开终端,转到D:\MyWorkSpace3\hello\,执行
javah -classpath bin/ -d jni com.hello.HelloActivity
javah -classpath bin/classes -d jni com.hello.HelloActivity
执行成功后,会在jni目录下生成com_hello_HelloActivity.h头文件;
接着在jni目录下新建一个C文件com_hello_HelloActivity.c,编写如下代码:
#include "com_hello_HelloActivity.h"
#define LOG_TAG "JNITest"
#undef LOG
JNIEXPORT jstring JNICALL Java_com_hello_HelloActivity_printJNI
(JNIEnv * env, jobject obj)
{
return
(*env)->NewStringUTF(env, (
char
*)
"JNITest Native String"
);
}
再在jni目录下新建一个Android.mk文件,用于配置编译的文件及选项
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := com_hello_HelloActivity.c
include $(BUILD_SHARED_LIBRARY)
LOCAL_PATH指编译文件的目录,$(call my-dir)指向当前目录
LOCAL_MODULE指定编译生成的lib名字
LOCAL_SRC_FILES指需要编辑的源文件,可自动多个文件,换行时用\分隔
完成后打开Cygwin,cd到项目的jni目录下,
比如/cygdrive/d/MyWorkSpace3/hello/jni
执行ndk-build(如果ndk 没有加入环境变量 可以使用绝对路径 如 /cygdrive/d/Android/android-ndk-r8/ndk-build)
生成的lib文件会安装到\libs\armeabi下,名称为libhello.so,但注意在java加载中只用写hello作为lib名称就可以了。
4.检测执行结果
在eclipse中刷新项目,运行,在logcat中应该可以看到“JNITest Native String”
- Android NDK介绍及JNI调用
- Android NDK环境搭建及JNI开发java和C的相互调用的基本介绍
- Android NDK环境搭建及调用JNI的简单步骤
- Android NDK 开发(一)JNI简介及调用流程
- android 之 JNI 调用 NDK
- android studio NDK-JNI调用
- Android Studio-NDK-JNI调用
- Android NDK--自己编写调用JNI
- Android Studio通过JNI调用NDK程序
- Android studio 使用NDK ,jni调用
- android ndk通过jni调用C++
- Android SDK、NDK、JNI的简单介绍
- Android SDK、NDK、JNI的简单介绍
- [android ndk]android studio动态库生成及jni底层调用步骤
- android图文介绍NDK安装及简单jni demon的实现
- android NDK总结及注意事项(android ndk+jni初步)
- android NDK总结及注意事项(android ndk+jni初步)
- NDK Java JNI调用
- php与mysql程序设计 读书笔记——张迅雷闪击PHP(7-9章)
- itextshap实现在PDF上插入图片?
- java中如何做一个注册机
- 如何实现W5200E01-M3中的UPnP(通用即插即用) 端口转发(一)
- java中如何使用jdk1.5和jdk1.6进行项目打包
- Android NDK介绍及JNI调用
- 培训教材
- ubuntu下commonlisp配置
- JAVA的各种O
- 关于jdk中类装载器ClassLoader扩展和JNI技术(JavaNativeInterface)以及类文件的加密解密算法
- 实战:rman异机duplicate active数据库
- Head First Java 设计模式——装饰者模式
- 牛人推荐的软件测试读书列表
- showModelDialog的用法。