JNI_Android项目中调用.so动态库实现详解【转】
转自 http://www.cnblogs.com/sevenyuan/p/4202759.html
1. 在Eclipse中创建项目:TestJNI

2. 新创建一个class:TestJNI.java

package com.wwj.jni;
public class TestJNI {
public native boolean Init();
public native int Add(int x, int y);
public native void Destory();
}



/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_wwj_jni_TestJNI */ #ifndef _Included_com_wwj_jni_TestJNI
#define _Included_com_wwj_jni_TestJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_wwj_jni_TestJNI
* Method: Init
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL Java_com_wwj_jni_TestJNI_Init
(JNIEnv *, jobject); /*
* Class: com_wwj_jni_TestJNI
* Method: Add
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_com_wwj_jni_TestJNI_Add
(JNIEnv *, jobject, jint, jint); /*
* Class: com_wwj_jni_TestJNI
* Method: Destory
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_wwj_jni_TestJNI_Destory
(JNIEnv *, jobject); #ifdef __cplusplus
}
#endif
#endif


#ifndef _TEST_JNI_ADD_H_
#define _TEST_JNI_ADD_H_ class CAdd {
public:
CAdd();
~CAdd(); int Add(int x, int y);
}; #endif

Add.cpp

#include "Add.h"
CAdd::CAdd() {
}
CAdd::~CAdd() {
}
int CAdd::Add(int x, int y) {
return x + y;
}

com_wwj_jni_TestJNI.cpp的实现:

#include <stdio.h>
#include <stdlib.h>
#include "com_wwj_jni_TestJNI.h"
#include "Add.h" CAdd *pCAdd = NULL; JNIEXPORT jboolean JNICALL Java_com_wwj_jni_TestJNI_Init(JNIEnv *env,
jobject obj) {
if (pCAdd == NULL) {
pCAdd = new CAdd;
}
return pCAdd != NULL;
} JNIEXPORT jint JNICALL Java_com_wwj_jni_TestJNI_Add(JNIEnv *env, jobject obj,
jint x, jint y) {
int res = -1;
if (pCAdd != NULL) {
res = pCAdd->Add(x, y);
}
return res;
} JNIEXPORT void JNICALL Java_com_wwj_jni_TestJNI_Destory(JNIEnv *env, jobject obj)
{
if (pCAdd != NULL)
{
pCAdd = NULL;
}
}


LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) LOCAL_MODULE := TestJNI LOCAL_SRC_FILES := com_wwj_jni_TestJNI.cpp
LOCAL_SRC_FILES += Add.cpp include $(BUILD_SHARED_LIBRARY)

APP_PROJECT_PATH := $(call my-dir)
APP_MODULES := TestJNI



package com.wwj.jni; import android.os.Bundle;
import android.widget.TextView;
import android.app.Activity; public class TestJNIActivity extends Activity { private TextView textView;
static {
// 加载动态库
System.loadLibrary("TestJNI");
} @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textview); TestJNI testJNI = new TestJNI();
// 调用native方法
boolean init = testJNI.Init();
if (init == true) {
// 调用Add函数
int sum = testJNI.Add(100, 150);
textView.setText("你真是个" + sum);
} else {
textView.setText("你比二百五还要二百五");
}
testJNI.Destory();
}
}

运行项目,效果图如下:

JNI_Android项目中调用.so动态库实现详解【转】的更多相关文章
- JNI_Android项目中调用.so动态库实现详解
转自:http://www.yxkfw.com/?p=7223 1. 在Eclipse中创建项目:TestJNI 2. 新创建一个class:TestJNI.java package com.wwj. ...
- JNI_Android 项目中调用.so动态库实现详解
转自:http://www.yxkfw.com/?p=7223 1. 在Eclipse中创建项目:TestJNI 2. 新创建一个class:TestJNI.java package com.wwj. ...
- JNI_Android项目中调用.so动态库
JNI_Android项目中调用.so动态库 2014年6月3日 JNI学习 參考:http://blog.sina.com.cn/s/blog_4298002e01013zk8.html 上一篇笔者 ...
- Android项目中JNI技术生成并调用.so动态库实现详解
生成 jni方式有两种:一种是通过SWIG从C++代码生成过度的java代码:另一种是通过javah的方式从java代码自动生成过度的C++代码.两种方式下的步骤流程正好相反. 第一种方式:由于需要配 ...
- 使用ctypes在Python中调用C++动态库
使用ctypes在Python中调用C++动态库 入门操作 使用ctypes库可以直接调用C语言编写的动态库,而如果是调用C++编写的动态库,需要使用extern关键字对动态库的函数进行声明: #in ...
- CVI中调用VC动态库
1.在VC环境中建立新工程,创建32位动态库(Win32 Dynamic-Link Library) -> A simple DLL project 2.在工程中可加入别的动态库,在工程菜单中 ...
- vc中调用Com组件的方法详解
vc中调用Com组件的方法详解 转载自:网络,来源未知,如有知晓者请告知我.需求:1.创建myCom.dll,该COM只有一个组件,两个接口: IGetRes--方法Hello(), IGet ...
- 深入探讨Linux静态库与动态库的详解(转)
2.生成动态库并使用 linux下编译时通过 -shared 参数可以生成动态库(.so)文件,如下 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 一.静 ...
- (笔记)Linux下的静态库和动态库使用详解
库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 一.静态库和动态库的区别 1. 静态函数库 这类库的名字一般是libxxx.a:利用静态函数库编译成的文件比 ...
随机推荐
- C# .net 最大HTTP连接数
说明:本WCF程序收到请求时会对外HTTP请求. 桌面系统默认是2个,如果是SERVER,默认是10个,超过10个就会排队,当有大量向外请求时,很多对外请求就会超时.排队的HTTP请求超时仍在计时. ...
- thinkphp在为图片添加png水印不足的处理
thinkphp在为图片加水印的时候.如果水印图片是png图片,透明度处理很不理想,与是做以下处理 在Image.class.php中新增 static function imagecopymerge ...
- Avant Browser
Avant Browser Avant 浏览器友好的用户界面为你的网络冲浪带来全新的效率和透明性.软件版本的不断升级使产品的可靠性稳步提高. 没有广告.没有恶意软件! Avant 浏览器是免费的.10 ...
- MSSQL 随机查询且降序排列
--随机查询且降序排列 * FROM dbo.COMPANY_USER_INFO ORDER BY NEWID()) AS T ORDER BY T.cu_id DESC
- 文件压缩与挤压ZIP
/// <summary> /// Zip压缩与解压缩 /// </summary> public class ZipHelper { /// <summary> ...
- oracle desc 表结构
SQL> desc v$logfile; 名称 是否为空? 类型 ----------------------------------------- -------- ------------- ...
- windows7修改双系统启动项名称、先后顺序、等待时间
一.进入BCDEdit.exe 正常启动Windows 7 系统,点击“开始” -> “所有程序” -> “附件”,右击“命令提示符” -> “以管理员身份运行”(需要将操作当前用 ...
- Spring的AOP与代理
spring 支持两种注入方式: setter/constructor 支持多种配置方式: xml/java5注解/java类配置 支持两种事务管理: 声明性/编程性 实际上上述方式只有一个就能保证系 ...
- C语言中access、_mkdir、sprintf、 fopen、fwrite函数
int access(const char *filename, int amode); amode参数为0时表示检查文件的存在性,如果文件存在,返回0,不存在,返回-. 这个函数还可以检查其它文件属 ...
- struts(五) 使用通配符 接收参数
1.使用通配符简化配置 约定优于配置 <action name="student*" class="com.gc.StudentAction" metho ...