JNI_Android项目中调用.so动态库实现详解
转自:http://www.yxkfw.com/?p=7223
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.cnblogs.com/sevenyuan/p/4202759.html 1. 在Eclipse中创建项目:TestJNI 2. 新创建一个class:TestJNI.ja ...
- 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:利用静态函数库编译成的文件比 ...
随机推荐
- WinForm------如何将GridControl数据导出到Excel
转载: http://www.cnblogs.com/xiaofengfeng/archive/2011/11/22/2258906.html 代码: SaveFileDialog saveFileD ...
- easyUI-combotree的本地数据导入
一.页面内容: <div style="margin:10px 0"> <a href="javascript:void(0)" class= ...
- Yoshua Bengio 2016年5月11日在Twitter Boston的演讲PPT
Yoshua Bengio最新演讲:Attention 让深度学习取得巨大成功(46ppt) Yoshua Bengio,电脑科学家,毕业于麦吉尔大学,在MIT和AT&T贝尔实验室做过博士后研 ...
- CodeForces 716A Crazy Computer
题目链接:http://codeforces.com/problemset/problem/716/A 题目大意: 输入 n c, 第二行 n 个整数,c表示时间间隔 秒. 每个整数代表是第几秒.如果 ...
- mixin设计模式
mixin可以轻松被一个子类或者一组子类继承,目的是函数复用.在js中,我们可以将继承MiXin看作为一种通过扩展收集功能的方式. e.mixin = function(t) { for (var i ...
- xcopy
xcopy "$(ProjectDir)Admin" "$(SolutionDir)模块\CanDoo.Admin.WebHost\Admin" /e/h ...
- yii2.0自动登录功能的实现方法
参考地址:http://www.kuitao8.com/20150518/3747.shtml 自动登录的原理很简单.主要就是利用cookie来实现的在第一次登录的时候,如果登录成功并且选中了下次自动 ...
- YII2 Model 类切换数据库连接
配置多数据库: return [ // ... 'components' => [ // ... 'db' => [ 'class' => 'yii\db\Connection', ...
- Linux下,telnet命令如何退出
测试连接本地的memcached telnet 链接后是这样的: wangkongming@Vostro ~ $ telnet Trying 127.0.0.1... Connected to 127 ...
- CString
CString gray("Gray"); CString cat("Cat"); CString graycat = gray + cat; 与其用 sp ...