[转]Android JNI使用方法
本文转自:http://www.open-open.com/lib/view/open1324909652374.html
经过几天的努力终于搞定了android JNI部分,下面将我的这个小程序和大家分享一下。android JNI是连接android Java部分和C/C++部分的纽带,完整使用JNI需要Java代码和C/C++代码。其中C/C++代码用于生成库文件,Java代码用于引用C /C++库文件以及调用C/C++方法。
android Java部分代码:
01
|
jnitest.java
|
02
|
|
03
|
package com.hello.jnitest;
|
04
|
|
05
|
|
06
|
|
07
|
import android.app.Activity;
|
08
|
|
09
|
import android.os.Bundle;
|
10
|
|
11
|
|
12
|
|
13
|
public class jnitest extends Activity {
|
14
|
|
15
|
/** Called when the activity is first created. */
|
16
|
|
17
|
@Override
|
18
|
|
19
|
public void onCreate(Bundle savedInstanceState) {
|
20
|
|
21
|
super .onCreate(savedInstanceState);
|
22
|
|
23
|
setContentView(R.layout.main);
|
24
|
|
25
|
Nadd test = new Nadd();
|
26
|
|
27
|
setTitle( "The Native Add Result is " +String.valueOf(test.nadd( 10 , 20 )));
|
28
|
|
29
|
}
|
30
|
|
31
|
}
|
32
|
|
33
|
Nadd.java
|
34
|
|
35
|
package com.hello.jnitest;
|
36
|
|
37
|
|
38
|
|
39
|
public class Nadd {
|
40
|
|
41
|
static {
|
42
|
|
43
|
System.loadLibrary( "hello_jni" );
|
44
|
|
45
|
}
|
46
|
|
47
|
|
48
|
|
49
|
public native int nadd( int a, int b);
|
50
|
|
51
|
}
|
01
|
#define LOG_TAG "hello-JNI"
|
02
|
#include <stdio.h>
|
03
|
#include <stdlib.h>
|
04
|
#include <unistd.h>
|
05
|
#include <sys/types.h>
|
06
|
#include <sys/stat.h>
|
07
|
#include <fcntl.h>
|
08
|
#include <assert.h>
|
09
|
#include "jni.h"
|
10
|
#include "JNIHelp.h"
|
11
|
#include "android_runtime/AndroidRuntime.h"
|
12
|
static jint com_hello_jnitest_jnitest_nadd(JNIEnv *env, jobject obj, jint a, jint b)
|
13
|
{
|
14
|
return (a * b);
|
15
|
}
|
16
|
static JNINativeMethod gMethods[] = {
|
17
|
{ "nadd" , "(II)I" , ( void *)com_hello_jnitest_jnitest_nadd},
|
18
|
};
|
19
|
static int register_android_test_hello(JNIEnv *env)
|
20
|
{
|
21
|
return android::AndroidRuntime::registerNativeMethods(env, "com/hello/jnitest/Nadd" , gMethods, NELEM(gMethods));
|
22
|
}
|
23
|
jint JNI_OnLoad(JavaVM *vm, void *reserved)
|
24
|
{
|
25
|
JNIEnv *env = NULL;
|
26
|
if (vm->GetEnv(( void **)&env, JNI_VERSION_1_4) != JNI_OK) {
|
27
|
printf ( "Error GetEnv\n" );
|
28
|
return -1;
|
29
|
}
|
30
|
assert (env != NULL);
|
31
|
if (register_android_test_hello(env) < 0) {
|
32
|
printf ( "register_android_test_hello error.\n" );
|
33
|
return -1;
|
34
|
}
|
35
|
return JNI_VERSION_1_4;
|
36
|
}
|
1
|
LOCAL_PATH := $(call my-dir)
|
2
|
include $(CLEAR_VARS)
|
3
|
LOCAL_PRELINK_MODULE := false
|
4
|
LOCAL_SRC_FILES := \
|
5
|
com_hello_jnitest.cpp
|
6
|
LOCAL_SHARED_LIBRARIES := \
|
7
|
libandroid_runtime
|
8
|
LOCAL_MODULE := libhello_jni
|
9
|
include $(BUILD_SHARED_LIBRARY)
|
转载于:https://www.cnblogs.com/freeliver54/archive/2012/02/03/2336621.html
[转]Android JNI使用方法相关推荐
- Android JNI使用方法,JNI机制详解
Android JNI使用方法,JNI机制详解 JNI的出现使得开发者既可以利用Java语言跨平台.类库丰 富.开发便捷等特点,又可以利用Native语言的高效. JNI是JVM实现中的一部分,因此N ...
- Android JNI使用方法
经过几天的努力终于搞定了android JNI部分,下面将我的这个小程序和大家分享一下.android JNI是连接android Java部分和C/C++部分的纽带,完整使用JNI需要Java代码和 ...
- android — JNI注册方法说明
Jni中还可以采用RegisterNatives来注册jni的方法,注册以后的jni函数的命名可以不需要符合类似javah命令生成的函数的规则 RegisterNatives为JNIEnv的成员函数, ...
- Android Studio NDK环境配置及JNI使用方法
1.前言 什么是NDK? NDK全称是Native Development Kit,NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk.N ...
- Android调用JNI本地方法跟踪目标代码
正如Android调用JNI本地方法经过有点改变章所说跟踪代码是可行的,但是跟踪某些代码会出现anr,点击取消,还是不好运,有提高办法吗?回答是有(gdb还没试过,本文只讨论ida). 下面是我使用 ...
- Android JNI开发读取asserts目录中文件的方法
Android Java层读取asserts目录中的文件: //获取asserts/test/目录下的所有文件名称 String test_path = "test"; int c ...
- android jni 调用 java_Android与JNI(二) ---- Java调用C++ 动态调用
目录: 1. 简介 2. JNI 组件的入口函数 3. 使用 registerNativeMethods 方法 4. 测试 5. JNI 帮助方法 6. 参考资料 1. 简介 Android与JNI( ...
- java jni 数据类型_【Android JNI】Native层解析Java复杂数据类型HashMap
前提 Java HashMap 是基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用null值和null键.HashMap是存放引用类型数据的容器,只能存放引用数据类型,不能存 ...
- Android JNI原理分析
引言:分析Android源码6.0的过程,一定离不开Java与C/C++代码直接的来回跳转,那么就很有必要掌握JNI,这是链接Java层和Native层的桥梁,本文涉及相关源码: frameworks ...
最新文章
- Office OpenXML-Excel(一)
- Mybatis教程-实战看这一篇就够了
- 结构体struct timeval 和 struct timespec的定义
- Android数据库高手秘籍
- 怎么把数字替换成空格_剑指offer04:替换空格
- jquery datatable 获取当前分页的数据
- js中的转译_JavaScript中的填充和转译
- linux shell 批量清空,shell脚本批量删除docker镜像
- Assigning retained object to weak property object will be released after assignment
- 【光学】基于matlab夫琅禾费圆孔衍射【含Matlab源码 062期】
- Sentaurus SDE
- 从苦逼走向牛逼:阿里云的苦难辉煌
- 我的第一篇随笔-------吹起启程之风
- 无限制翻译PDF文件——低调使用
- android x86 uefi 安装教程,如何在Hyper-V上安装android-x86系统
- lr背景虚化_LR调色教程,用LR把夏天的颜色以图片的样式呈现出来
- python_cv2_图片黑白操作
- 当别人对自己有意见时,怎么处理?
- SELinux,查看 SELinux状态及关闭SELinux
- 差分详细讲解(C++)