android studio中的so库调用

在根项目的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

你可能感兴趣的:(android studio中的so库调用)