JNI之Java调用so文件

一、背景:web项目中需要调用第三的一个so库文件,只能略微学习下了,对android NDK开发方面应该也有所帮助,学习下

二、调用方式

第一种方式:Java直接调用so文件

第二种方式:Java通过自己的so文件,调用第三方的so文件

三、参考示例(就不拷贝来拷贝去了,直接贴上我参考的网址吧)

参考网址:

Java调用so,c编译成so    http://blog.chinaunix.net/uid-20180960-id-1972669.html

Java文件 -> *.class -> *.h -> 编写*.c  ->编译成.so ,执行

 

c++与c调用so文件           http://blog.csdn.net/yf210yf/article/details/11712999

  1. void *handle = dlopen("./libadd_c.so", RTLD_LAZY);
  2. if(!handle)
  3. {
  4. return -1;
  5. }
  6. typedef int (*add_t)(int a, int b);
  7. add_t add = (add_t) dlsym(handle, "add");
  8. if(!add)
  9. {
  10. dlclose(handle);
  11. return -1;
  12. }
  13. a = add(3, 4);
  14. dlclose(handle);
  15. return 0;

jni中参数的传递、转换      http://blog.csdn.net/liu_jun_y/article/details/9178501

jint Java_cn_hongdameng_aacencoder_AacEncoder_AacWrite(JNIEnv* env,jobject this,jbyteArray jBuffer, jint jBufferSize)

{

   jbyte* bBuffer = (*env)->GetByteArrayElements(env,jBuffer,0);

   unsigned char* buf=(unsigned char*)bBuffer;

...................

}

时间: 2024-10-11 18:01:42

JNI之Java调用so文件的相关文章

ndk学习17: jni之Java调用C&C++

一.Hello World 1. 定义函数原型 native关键字定义的函数即为jni函数 2.生成头文件 切换到src目录执行: (这个过程可以写脚本自动完成,比如自动拷贝到jni目录) javah -jni 包名.类名 在根目录下生成: org_bing_testjni_MainActivity.h 3. 工程中添加jni代码 工程右键->添加native code->输入名字->finish 多了如下文 新建一个Application.mk,配置相关选项(详细查看ndk有关Appl

java调用so文件

java调用so文件 调用方法主要是是使用jdk自带的jni来调用,思路如下: 新建java对象,实现方法TestNative.java为 public native String XXX(); 使用dos命令来编译该类名,javah 包名.TestNative,得到.h文件,然后根据.h文件自己编写.c文件,在该c文件中调用需要调用的接口. 可分为c和c++,将调用形式分为两种,数据参数格式转化也分为两种,具体例子如:env->XXX(参数),这是c++,c是 (*env)->XXX(env

Android JNI之JAVA调用C/C++层

摘要: 转载请声明:原文转自:http://www.cnblogs.com/xiezie/p/5929996.html 一.java调用本地函数的开发步骤: 1.编写本地方法的类(可以说是用来叙述本地方法的类): 2.编译这个类,生成该类的.class文件 在Android Studio下有很多方法: 点击Make Project Clean Project + Rebuild Project 运行或Debug  APP 3.用javah命令生成该.class文件的.h头文件 在Android

JNI之JAVA调用C++接口

1.JNI定义(来自百度百科) JNI是Java Native Interface的缩写,中文为JAVA本地调用.从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了. 2.java通过JNI调用c++接口步骤 1).创建java包.类 此处创建 包myJNI,类TestJNI pac

JNI QuickStart,Java调用C++实现

一,构建Java本地方法类,声明native方法,编译 类文件:MyTest1.java package com.merrick.test; class MyTest1 { public native int addnumber1(int a, int b); static{ //System. System.loadLibrary("jnidll1");//必须省略后缀.dll } public static void main(String args[]) { int res =

Android与JNI(二) ---- Java调用C 动态调用(转载)

目录: 1. 简介 2. JNI 组件的入口函数 3. 使用 registerNativeMethods 方法 4. 测试 5. JNI 帮助方法 6. 参考资料 1. 简介 目录: 1. 简介 2. JNI 组件的入口函数 3. 使用 registerNativeMethods 方法 4. 测试 5. JNI 帮助方法 6. 参考资料 1. 简介 Android与JNI(一)已经简单介绍了如何在 android  环境下使用 JNI 了.但是遵循 JNI 开发的基本步骤似乎有点死板,而且得到的

JNI测试-java调用c算法并返回java调用处-1到20阶乘的和

一,java端: 定义native方法, 'public native long factorial(int n);', 该方法用c/c++实现,计算'1到20阶乘的和',参数中'int n'是前n项的阶乘的和(这里是20).返回计算结果,并返回java调用处. 代码为: 1 public class FactorialJava { 2 3 public native long factorial(int n); 4 5 //evaluate the elapse time.and the ex

Jython:java调用python文件之第三方包路径问题

本方法解决python代码的可移植性,不需要在新机器上配置python环境,只通过安装jython的方式将python代码嵌入java工程 1. Jython如何安装 下载地址:jython_installer-2.5.0.jar.下载需要积分,如果无积分,可联系楼主. 傻瓜式下一步安装方式,路径最好和工程选在同一目录下. 2. 运行python代码 举个简单例子,安装好java环境及eclipse之后,copy如下代码即可运行.注释部分为运行文件的方式,需要新建文件后去掉注释执行. impor

java 调用 库文件错误查找方法

第一步首先找到 backtrace:keyword,然后找到都应的库文件 出错的地方 pc 0000088b  /system/lib/libNDK_04.so (SayHello+98). 08-13 17:08:28.041 I/DEBUG   (  163): backtrace: 08-13 17:08:28.041 I/DEBUG   (  163):     #00  pc 00021fc0  /system/lib/libc.so (tgkill+12) 08-13 17:08:2