Android下JNI开发步骤 (转载)
来源:互联网 发布:湖北快三数据 编辑:程序博客网 时间:2024/04/30 20:35
1.建立Android工程,编写TestJNI.java类。如下:
- package com.testjni;
- import android.app.Activity;
- import android.os.Bundle;
- import android.util.Log;
- public class TestJNI extends Activity
- {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- Log.d("Hi", "Android call JNI: " + outputJNI());
- }
- private native String outputJNI();
- static
- {
- System.loadLibrary("testjni");
- }
- }
package com.testjni;import android.app.Activity;import android.os.Bundle;import android.util.Log;public class TestJNI extends Activity{/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Log.d("Hi", "Android call JNI: " + outputJNI());}private native String outputJNI();static{System.loadLibrary("testjni");}}
2.编译生成TestJNI.class文件
编译方法:
方法1:直接在Android下点击Build Project即可在工程的bin文件下生成相应的.class文件
方法2:运行cmd,定位到工程目录,用javac TestJNI.java命令执行即可
3. 编译生成com_testjni_TestJNI.h文件。如下:
javah -classpath bin\classes -d jni com.testjni.TestJNI
或者
javah -classpath C:/android/android-sdk/paltforms/android-8/android.jar;bin/classes -d jni com.testjni.TestJNI
4.编写testjni.c文件,放在路径 $PROJECT/jni/下。$PROJECT对应你的android应用项目的路径。
- #include <jni.h>
- JNIEXPORT jstring JNICALL Java_com_testjni_TestJNI_outputJNI(JNIEnv *env, jobject obj)
- {
- return (*env)->NewStringUTF(env, "Hello World!");
- }
- /* This function will be call when the library first be load.
- * You can do some init in the library. return which version jni it support.
- */
- jint JNI_onLoad(JavaVM* vm, void* reserved)
- {
- void *venv;
- if ((*vm)->GetEnv(vm, (void**)&venv, JNI_VERSION_1_4) != JNI_OK)
- {
- return -1;
- }
- return JNI_VERSION_1_4;
- }
#include <jni.h>JNIEXPORT jstring JNICALL Java_com_testjni_TestJNI_outputJNI(JNIEnv *env, jobject obj){return (*env)->NewStringUTF(env, "Hello World!");}/* This function will be call when the library first be load. * You can do some init in the library. return which version jni it support. */jint JNI_onLoad(JavaVM* vm, void* reserved){void *venv;if ((*vm)->GetEnv(vm, (void**)&venv, JNI_VERSION_1_4) != JNI_OK){return -1;}return JNI_VERSION_1_4;}
5.写$PROJECT/jni/Android.mk,来描述的源文件。它的语法在docs/ANDROID-MK.html中有详细描述。如:
# 用于在开发树中查找源文件,宏函数'my-dir',有编译系统提供,用于返回当前路径(即包含Android.mk文件的路径)
LOCAL_PATH := $(call my-dir)
#CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE清除LOCAL_*的变量
include $(CLEAR_VARS)
# 当前模块的名称/编译的目标对象。编译系统会自动产生合适的前缀和后缀
LOCAL_MODULE := testjni
# 包含将要编译打包进模块中的C或者C++源代码文件(无需列出头文件和包含文件)
LOCAL_SRC_FILES := testjni.c
# BUILD_SHARED_LIBRARY表示编译生成共享库,是编译系统提供的变量,指向一个GNU Makefile脚本,
# 负责收集自从上次调用'include ($CLEAR_VARS)'以来,定义在LOCA_*变量中的所有信息,并且决定编译什么,如果正确去编译。
# 另: BUILD_STATIC_LIBRARY表示生成静态库: lib$(LOCAL_MODULE).a; BUILD_EXECUTABLE表示生成可执行文件。
include $(BUILD_SHARED_LIBRARY)
其他变量:
LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) # 包含的头文件,这里需要包含JNI的头文件
LOCAL_SHARED_LIBRARIES := libutils # 当前模块需要依赖的共享库
LOCAL_PRELNK_MODULE := false # 指明该模块是否被启动就加载,如不需要prelink,则为false
5.1.可选的:在文件$PROJECT/jni/Application.mk中描述项目的更多细节。
尽管你不需要从头写,但你可以处理多CPU问题以及改写编译/链接选项。(更多细节请观docs/APPLICATION-MK.html )。
这个文件主要包含:
-你的应用所需要模块的准确列表。
-产生的机器码所对应的CPU架构。
-可选的信息,像你要构建release还是 debug,特殊的C 或 C++编译参数以及其它需要应用到所有模块的构建选项。
这个文件是可选的:默认情况下,NDK将构建在Android.mk中列出的所有模块的并且默认面向CPUABI (armeabi).
有两种方法使用一个Application.mk:
-将它放在$PROJECT/jni/Application.mk位置,那么它会被'ndk-build'脚本自动使用。
-将它放在$NDK/apps/<name>/Application.mk,$NDK代表你的NDK安装路径。之后,在NDK路径下运行"make APP=<name>"。
这是在NDKr4 之前的办法。出于兼容的原因,当前还是被支持的,但是我们强烈鼓励你使用第一种方法。因为它简单并且不用改动NDK安装路径下的路径树结构。
7.在你的项目路径下或其任何子路径下运行"$NDK/ndk-build"来编译你的本地代码。
这将启动NDK构建脚本,脚本将自动探测你的开发系统和应用项目文件来决定构建什么东西。例如:
ndk-build
ndk-build clean --> 清空所编译出的二进制文件们。
ndk-build -B V=1 --> 强制完全重新编译,并显示命令
8. 编译成功后会在$PROJECT\libs\armeabi路径下,生成so动态库,则可以正常使用。
- Android下JNI开发步骤 (转载)
- Android下JNI开发步骤
- Android下JNI开发步骤 .
- android JNI 开发步骤
- android JNI 开发步骤
- 在eclipse中进行Android下JNI开发的步骤
- android jni开发详细步骤
- android adt jni开发步骤
- android JNI开发基本步骤
- android 之jni开发步骤
- Android的JNI开发步骤
- 搭建Window环境下Jni开发步骤(1)
- 搭建Window环境下Jni开发步骤(2)
- android下jni开发
- android下JNI开发
- linux下jni的开发步骤
- eclipse下Jni开发步骤详细总结
- android之JNI开发详细步骤
- eclipse添加和生成动态链接库文件
- 一纸红笺清花泪,半世琉璃山海盟:QQ伤感日志
- 二次函数计算程序
- Window Phone中使用本地数据库SQLCE的简单入门
- Oracle常用sql操作总结
- Android下JNI开发步骤 (转载)
- django多保存数据
- Java使用Google Calendar
- red hat Linux配置ip
- Step_in
- 灯红酒绿的伤感空间日志:也许,我们都不是真正的快乐
- 贷款计算
- SecureCRT 乱码
- Windows Phone 7 三种共享数据的方式