在根项目的local.properties中添加ndk目录(ndk-bundle所在目录)
在根项目的gradle.properties中添加
android.useDeprecateNdk = true
在app目录下创建libs目录,用于放置so文件,将so文件复制进去
方法一:
在app的builid.gradle中的android{····}中添加以下内容
sourceSets{
main{
jniLibs.srcDir 'libs'
}
}
此内容表示将jni目录源定位置app下的libs目录中
最后在要调用so库的地方引入so库
static{
System.loadLibrary("vcom");
}
其中vcom是so库的名称,在这里so库的完整名称是libvcom.so。
方法二
在方法一中队jniLibs的目录进行重定向是由eclipse带来的,因为android开发在使用elipse时代就是将so文件放置在libs目录中。
而在现今,如果你使用android studio那就方便多了,只需要在main目录下创建jniLibs目录,然后再把so文件复制进去就可以了
使用so文件出现的问题
使用so文件最常见的就是报找不到so库之类的问题了,它可分为以下集中情况(使用android studio开发):
问题一
确实没有正确的导入so库,也就是你的so文件放错位置,可使用上面两种调用so文件的方法解决。
问题二
已经正确导入了,但是仍旧报错。这种情况有可能是没找到CPU架构对应的.so文件,如同样都是arm平台,你设置armeabi目录,可是系统需要的是armeabi-v7a的so文件,这时就会报错。
这个问题的解决方法只需要创建armeabi和armeabi-v7a目录,将so文件都复制一份就可以了。同时还有其他的CPU架构对应的文件,也采用同样方法,需要注意的是intel架构和arm架构的平台所需要的so文件是不一样的。
问题三
前面都试过了,仍旧有问题,那么可以看看是否调用so方法的路径有问题。
如使用jni生成so文件时,你的native方法的是在com.example.Hello.class里面。
然而你创建另一个项目时,将Hello.class文件放在com.myapplication路径下,这时也会报找不到so库的情况。
解决方法也很简单,在项目下创建com.example的路径,然后将Hello.class复制进去就好了。
以上就是我在工作中调用so文件的经验以及遇到的问题,希望对大家有所帮助。
相关资料:关于Android的.so文件你所需要知道的
http://www.jianshu.com/p/cb05698a1968