到最后,就是使用自己写的.so,jar包,或者使用第三方提供的接口,下面我们就来聊一聊这方面的问题
环境
- windous 10
- JDK : “1.8.0_45”
- NDK : android-ndk-r10d
- 编译器:Android studio
- cygwin64
.so
- 我们在生成.so文件之后,肯定实在本项目下进行测试了,测试完成之后,肯定又想着新建一个项目进行测试了,测试so是否可以正常,或者是否还需要依赖库等(错误的做法!)。
刚开始使用的时候,肯定已经忽略了了安卓在调用so文件时的过程,也就是说,在加载库的时候,或者链接到库里面的种种的时候,是需要解析到路径的,所以单单地只是拷贝so文件的话,是不可取的。下面有两种方法:
- 新建项目的时候,保证包名一致,这样在加载的时候,以保证可行
- 封装一个java文件当做接口,打成jar包,这样直接导包即可,参加下面。
可能遇到的问题,说明都是没有正确地调用.so,参考上面那两种方法可以解决:
1、不能load .so的库
2、提示找不到native的方法
jar 包
详细可参见 ,我这边用了其中一种方法
http://blog.sina.com.cn/s/blog_93d133c601013hdm.html
http://blog.youkuaiyun.com/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 。