Android_Jni学习总结

Androidjni的实现方法

1.编写我们的androidjava源码

1)创建一个android工程

2)加载动态链接库

3)申明native方法

代码如下:

package explorer.jniTest01;

import android.app.Activity;

import android.os.Bundle;

import android.widget.TextView;

public class JniTest01extends Activity {

/*加载动态链接库*/

static {

System.loadLibrary("hello");

}

/*申明natvie方法*/

public native int add(int a,int b);

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

TextView textView = (TextView)findViewById(R.id.add);

/*验证native方法*/

textView.setText("add ="+add(3,6));

}

}

2.eclipse中编译我们的android工程

3.调用javah这个工具生成explorer_jniTest01_JniTest01.h文件

1)首先进入到工程的bin文件目录

2)执行javah工具(包含在工程文件下创建jni文件目录)

代码如下:

cd /root/Desktop/android_jni/jniTest01/bin

javah -d /root/Desktop/android_jni/jniTest01/jni/ -classpath . explorer.jniTest01.JniTest01

这里说明一下-classpath后面的.前后都有空格,.后面的文件格式为包名.类名

我们还是先看看这个.h文件的内容吧

代码如下:

/* DO NOT EDIT THIS FILE - it is machine generated */

#include<jni.h>

/* Header for class explorer_jniTest01_JniTest01 */

#ifndef _Included_explorer_jniTest01_JniTest01

#define _Included_explorer_jniTest01_JniTest01

#ifdef __cplusplus

extern"C" {

#endif

/*

* Class: explorer_jniTest01_JniTest01

* Method: add

* Signature: (II)I

*/

JNIEXPORT jint JNICALLJava_explorer_jniTest01_JniTest01_add

(JNIEnv *, jclass, jint, jint);

#ifdef __cplusplus

}

#endif

#endif

这里不在解释了,在JAVA_JNI中以讲解过

4更具explorer_jniTest01_JniTest01.h文件编写.c文件

1)加载需要的头文件

2)实现native方法

代码如下:

#include<jni.h>

#include"explorer_jniTest01_JniTest01.h"

JNIEXPORT jint

JNICALL Java_explorer_jniTest01_JniTest01_add(JNIEnv *env, jclass c, jint a, jint b)

{

return (a+b);

}

5.创建一个Android.mk的工程管理文件

代码如下:

LOCAL_PATH:= $(call my-dir)

include$(CLEAR_VARS)

LOCAL_SRC_FILES:= hello.c

LOCAL_SHARED_LIBRARIES := libutils

LOCAL_MODULE := libhello

include$(BUILD_SHARED_LIBRARY)

好吧这里以此来说下他们有什么用吧

LOCAL_PATH:= $(call my-dir)表示在开发树中查找源文件,这里的宏函数my-dir由编译系统提供,返回当前路径

include$(CLEAR_VARS)这里的 CLEAR_VARS由编译系统提供,表示清除LOCAL_XX变量(除了LOCAL_PATH

LOCAL_SRC_FILES:= hello.c这里我们需要修改成我们自己的.c文件

LOCAL_SHARED_LIBRARIES := libutils表示生成的库共享库即动态链接库

LOCAL_MODULE := libhello表示我们生成的库名为libhello.os

include$(BUILD_SHARED_LIBRARY)表示生成的库共享库即动态链接库

6.使用NDK工具生成.so文件

1)到工程目录下

2)使用ndk-build

代码如下:

cd /root/Desktop/android_jni/jniTest01

ndk-build

这时我们在eclipse里面刷新一下,发现,出现了objlibs两个文件夹,里面都包含了我们需要的.so文件。

7.eclipse里面运行查看结果

更多相关文章

  1. android 下载文件注意事项
  2. Android代码混淆官方实现方法
  3. Android进度条源代码
  4. android绑定服务方法使用
  5. Android学习札记18:Drawable中的setDither()方法
  6. mainfest文件中android属性
  7. Android中使用ViewPage进行广告轮播测试代码
  8. ~/.dirlst 文件
  9. Android Wi-Fi 设置带宽代码流程

随机推荐

  1. Android Root刷机资源 & Google Nexus资
  2. Gradle依赖总结
  3. andriod cs 架构
  4. Ionic Html5编译IOS Android原生应用
  5. Android(安卓)OpenGLES2.0 渲染ffmpeg解
  6. Android 环境变量访问类
  7. android各个平台区别
  8. Android Studio 实现播放本地/网络视频
  9. android中滑动SQLite数据库分页加载
  10. android 如何查找内存泄漏