安卓 NDK JNI 使用(五) -- so , jar 包

来源:互联网 发布:西医综合网络课程 编辑:程序博客网 时间:2024/06/06 05:19

到最后,就是使用自己写的.so,jar包,或者使用第三方提供的接口,下面我们就来聊一聊这方面的问题

环境

  • windous 10
  • JDK : “1.8.0_45”
  • NDK : android-ndk-r10d
  • 编译器:Android studio
  • cygwin64

.so

  • 我们在生成.so文件之后,肯定实在本项目下进行测试了,测试完成之后,肯定又想着新建一个项目进行测试了,测试so是否可以正常,或者是否还需要依赖库等(错误的做法!)。
  • 刚开始使用的时候,肯定已经忽略了了安卓在调用so文件时的过程,也就是说,在加载库的时候,或者链接到库里面的种种的时候,是需要解析到路径的,所以单单地只是拷贝so文件的话,是不可取的。下面有两种方法:

    1. 新建项目的时候,保证包名一致,这样在加载的时候,以保证可行
    2. 封装一个java文件当做接口,打成jar包,这样直接导包即可,参加下面。
  • 可能遇到的问题,说明都是没有正确地调用.so,参考上面那两种方法可以解决:
    1、不能load .so的库
    2、提示找不到native的方法

jar 包

  • 详细可参见 ,我这边用了其中一种方法
    http://blog.sina.com.cn/s/blog_93d133c601013hdm.html
    http://blog.csdn.net/beijingshi1/article/details/38681281

  • 一般来说,写接口的时候,会在另外一个包里面,我这里新建了一个叫test的包,新建一个ST.java , 用于打包测试。

这里写图片描述

  • 我在目录下,找到app/build/intermediates/classes/debug/test 图示如下,我们会看到一个ST.class的文件,接下来我们就把它打包起来。

这里写图片描述

  • 打开cygwin termial,进入目录下,执行命令jar cvf test.jar . 自动生成test.jar的包了,具体命令课参见上面的两条链接,这条命令的意思就是在该目录下的所有文件,打包成名为test的jar包。

这里写图片描述

  • 然后,就可以拷到想要的项目里使用即可。

使用第三方包

使用第三方的包,一般是有一个.so文件和一个jar包。我们把jar包拷到app/libs 里面,右击,选择Add as library 。在app/src/main 下,新建一个jniLibs的文件夹,把.so文件放进去。

然后就可以直接使用了,当调用时,系统会自动导包。想看接口时,可以直接点击左侧的java文件进行查看,或者直接使用第三方提供的文档。

这里写图片描述

  • 可能会遇到的一些问题:
    1、Error:Execution failed for task ':app:dexDebug'. > com.android.ide.common.process.ProcessException ,可能是jar包的问题,你在删除jar包的时候,可能没有删除配置,也可能你在测试的时候,直接把生成的jar包拷到libs下,生成的那边未删掉。 方法:查看jar包是否还存在项目中,检查build.gradle 中的dependencies是否还引用这jar包。

    2、Failure [INSTALL_FAILED_OLDER_SDK] , 可能不是在引用的时候的错,但是遇到了就贴出来了。方法:检查手机版本,项目的SDK版本,第三方包的minSDK 。

0 0
原创粉丝点击