android项目中通过JNI调用Windows下的dll库

第一步:生成dll

注意点:要把jdkinclude文件夹下的jni.h以及include/ win32下的jni_md.h和jawt_md.h添加到编译器中的include中,或者何源文件放在一起,又是会提示jnih找不到,这是你可以把使用javah生成的.h文件中的<jni.h>改成“jni.h”;即可:用Javah生成的头文件com_xinfeng_intf_animal.h和相应的实现文件生成testdll,采用VS2013生成相应的的testdll.dll;

第二步: 需要testdll.dll的头文件,以便知道了定义了哪些接口在里面,例如:

当然,要知道这些方法的实现,就要看实现部分了,一般不需要知道。

 

------------------------------- 预备动作 --------------------------

1. 从上面图中,我们可以接口的定义,假设现在我们需要调用如下接口,该怎么调用呢?

2. 首先看接口

 

---------------------------- Java调用开始 ---------------------------

第一步: 建立一下 Java-Project工程,工程名随便起一个。

第二步:要对应dll里面的接口,建立相对应的接口。

第三步: 在Animal.java定义相应的接口

第四步:在main 中调用接口。

第五步: 把dll文件放在当前的目录下即可;刷新项目,加载进来dll,即可在项目中调用dll中相应的函数;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android 操作系统本身不支持直接调用 DLL(动态链接)文件,因为 DLLWindows 平台下的概念。但是可以通过 JNI(Java Native Interface)来实现 Android 调用 DLL 的功能。 具体步骤如下: 1. 将 DLL 文件复制到 Android 项目jniLibs 目录下。 2. 在 Android 项目的 build.gradle 文件配置 ndk 和 jniLibs 目录路径,例如: ``` android { ... defaultConfig { ... ndk { // 设置支持的 CPU 架构 abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } sourceSets { main { // 设置 jniLibs 目录路径 jniLibs.srcDirs = ['src/main/jniLibs'] } } } ``` 3. 编写 JNI 接口代码,将 Java 代码和 DLL 的函数进行映射。例如: ``` // 在 C 文件实现 native 方法 #include <jni.h> #include "dll_header_file.h" JNIEXPORT jint JNICALL Java_com_example_myapp_MainActivity_nativeMethod(JNIEnv* env, jobject thiz, jint arg) { // 调用 DLL 的函数 return dll_function(arg); } ``` 4. 在 Java 代码调用 JNI 接口。例如: ``` public class MainActivity extends AppCompatActivity { static { // 加载动态 System.loadLibrary("dll_name"); } public native int nativeMethod(int arg); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 调用 native 方法 int result = nativeMethod(123); Log.d("MainActivity", "result = " + result); } } ``` 注意:在使用 JNI 调用 DLL 时,需要注意 DLL 函数的参数和返回值类型,必须与 JNI 接口定义的参数和返回值类型相匹配。同时,需要根据 DLL 的 CPU 架构编译相应的 so 文件,例如 armeabi、armeabi-v7a、arm64-v8a、x86、x86_64 等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值