在Windows系统上安装与使用Android NDK r5
2013-07-10 22:27
399 查看
JNI实例
1、 安装成功后编译NDK中的一个例子命令行:
编译完成后在E:\Android_NDK\android-ndk-r5\samples\hello-gl2文件夹中会生成一个文件夹libs,里面有一个子文件夹armeabi,里面生成libgl2jni.so文件 。
2、 一个简单的JNI例子
下面用一个简单的例子介绍怎么生成一个.so文件以及在Android项目中怎么调用.so文件。
① 首先,用Eclipse建立一个ANDROID的工程,命名为MyFirstJNI,工程代码为:
② 制作生成.so文件: 可以通过获取以.h文件 来 获取函数申明。打开命令行,键入cd (这个路径是使用Eclipse建立的工程目录的src的路径 ,我的是F:\workspace\MyFirstJNI\src ),目的是设置工程目录。然后键 入: javah -jni com.cn.lhq.JniTest,结果如果失败,那就是因为没有把MyFirst.class文件拷贝到 F:\workspace\MyFirstJNI\src \com\ cn\lhq 之下,原因是Eclipse的文件管理机制会将.class文件和.java文件分开到不同的目录,解决方法是将F:\workspace\MyFirstJNI\bin\com\cn\lhq的所有.class文件都拷贝到他的目录下面。再次运行javah -jni com.cn.lhq.JniTest即可。然后就可以看到在 F:\workspace\MyFirstJNI\src 下多出了一个文件:com_cn_lhq_JniTest.h,通过这个文件,我们就知道了本地接口的函数名,于是我们就根据函数名写一个com_cn_lhq_JniTest.c文件, 代码如下:
注意 : 这个函数的参数与用javah生成出来的参数是不同的,这里只是需要函数名而已,因为函数名必须匹配,否则在模拟器上面跑的时候会出错,当然,如果对JNI命名规则熟悉的话可以跳过javah这步,直接写一个.c文件。
写好.c文件之后就开始生成 .so 文件了,这时候需要 用到 ANDROID.MK这个文件。于是把Eclipse生成的工程目录剪切,放到NDK目录的samples目录之下 (和示例hello-gl2一样),这个时候模仿hello-gl2文件层次结构,将MyFirstJNI文件也做成那样 :在MyFirstJNI文件夹下面新建一个 jni文件夹,把 com_cn_lhq_JniTest.c 剪切到此文件夹中,同时也拷贝一个 ANDROID.MK 文件到此文件夹,用 UltraEdit打开 ANDROID.MK 文件进行修改,主要修改如下:
LOCAL_MODULE := 工程名
LOCAL_SRC_FILES := .c的文件名(包含扩展名)
此例子应改为:
LOCAL_MODULE := MyFirstJNI
LOCAL_SRC_FILES := com_cn_lhq_JniTest.c
然后 打开 cygwin, 进入 E:\Android_NDK\android-ndk-r5\samples\MyFirstJNI\jni目录:
再 输入$NDK/ndk-build命令,在E:\Android_NDK\android-ndk-r5\samples\MyFirstJNI生成libs文件夹,即生成.so文件:
[align=left]安卓中的目录结构[/align]
[align=left]AndroidManifest.xml中的设置[/align]
③ 在eclipse中重新导入生成了.so文件的 MyFirstJNI项目,运行效果图如下:
1、 安装成功后编译NDK中的一个例子命令行:
编译完成后在E:\Android_NDK\android-ndk-r5\samples\hello-gl2文件夹中会生成一个文件夹libs,里面有一个子文件夹armeabi,里面生成libgl2jni.so文件 。
2、 一个简单的JNI例子
下面用一个简单的例子介绍怎么生成一个.so文件以及在Android项目中怎么调用.so文件。
package com.cn.lhq; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class JniTest extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.main); TextView tv = new TextView(this); tv.setText(stringFromJNI()); setContentView(tv); } public native String stringFromJNI(); static { System.loadLibrary("MyFirstJNI"); } }
① 首先,用Eclipse建立一个ANDROID的工程,命名为MyFirstJNI,工程代码为:
② 制作生成.so文件: 可以通过获取以.h文件 来 获取函数申明。打开命令行,键入cd (这个路径是使用Eclipse建立的工程目录的src的路径 ,我的是F:\workspace\MyFirstJNI\src ),目的是设置工程目录。然后键 入: javah -jni com.cn.lhq.JniTest,结果如果失败,那就是因为没有把MyFirst.class文件拷贝到 F:\workspace\MyFirstJNI\src \com\ cn\lhq 之下,原因是Eclipse的文件管理机制会将.class文件和.java文件分开到不同的目录,解决方法是将F:\workspace\MyFirstJNI\bin\com\cn\lhq的所有.class文件都拷贝到他的目录下面。再次运行javah -jni com.cn.lhq.JniTest即可。然后就可以看到在 F:\workspace\MyFirstJNI\src 下多出了一个文件:com_cn_lhq_JniTest.h,通过这个文件,我们就知道了本地接口的函数名,于是我们就根据函数名写一个com_cn_lhq_JniTest.c文件, 代码如下:
#include <string.h> #include <jni.h> jstring Java_com_cn_lhq_JniTest_stringFromJNI( JNIEnv* env, jobject thiz ) { return (*env)->NewStringUTF(env, "Hello from JNI !"); }
注意 : 这个函数的参数与用javah生成出来的参数是不同的,这里只是需要函数名而已,因为函数名必须匹配,否则在模拟器上面跑的时候会出错,当然,如果对JNI命名规则熟悉的话可以跳过javah这步,直接写一个.c文件。
写好.c文件之后就开始生成 .so 文件了,这时候需要 用到 ANDROID.MK这个文件。于是把Eclipse生成的工程目录剪切,放到NDK目录的samples目录之下 (和示例hello-gl2一样),这个时候模仿hello-gl2文件层次结构,将MyFirstJNI文件也做成那样 :在MyFirstJNI文件夹下面新建一个 jni文件夹,把 com_cn_lhq_JniTest.c 剪切到此文件夹中,同时也拷贝一个 ANDROID.MK 文件到此文件夹,用 UltraEdit打开 ANDROID.MK 文件进行修改,主要修改如下:
LOCAL_MODULE := 工程名
LOCAL_SRC_FILES := .c的文件名(包含扩展名)
此例子应改为:
LOCAL_MODULE := MyFirstJNI
LOCAL_SRC_FILES := com_cn_lhq_JniTest.c
然后 打开 cygwin, 进入 E:\Android_NDK\android-ndk-r5\samples\MyFirstJNI\jni目录:
再 输入$NDK/ndk-build命令,在E:\Android_NDK\android-ndk-r5\samples\MyFirstJNI生成libs文件夹,即生成.so文件:
[align=left]安卓中的目录结构[/align]
[align=left]AndroidManifest.xml中的设置[/align]
③ 在eclipse中重新导入生成了.so文件的 MyFirstJNI项目,运行效果图如下:
相关文章推荐
- windows系统上安装与使用Android NDK r5b(转)
- windows系统上安装与使用Android NDK r5 (转)
- windows系统上安装与使用Android NDK r5【2】
- windows系统上安装与使用Android NDK r5
- windows系统上安装与使用Android NDK r5 ---转载
- 在Windows系统上安装与使用Android NDK r5
- windows系统上安装与使用Android NDK r5
- windows系统上安装与使用Android NDK r5
- windows系统上安装与使用Android NDK r5
- 在Windows系统上安装与使用Android NDK r5
- 【转】windows系统上安装与使用Android NDK r5
- windows系统上安装与使用Android NDK r5 (转)
- windows系统上安装与使用Android NDK r5(转)
- 【Android】windows系统上安装与使用Android NDK r5
- windows系统上安装与使用Android NDK r5
- windows系统上安装与使用Android NDK r5b(转)
- windows系统上安装与使用Android NDK r5
- windows系统上安装与使用Android NDK r5
- windows系统上安装与使用Android NDK r5
- windows系统上安装与使用Android NDK r5