注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

Android开发之二十七AndroidStudio调用第三方SO库  

2015-07-08 16:01:56|  分类: Android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Android开发之二十七AndroidStudio调用第三方SO

 

自从开始把工程从Eclipse中迁移到AndroidStudio上,就算是遇到了各种各样的问题,层出不穷。原来在Eclipse中使用JNA的程序到了AndroidStudio中还是有这个问题,程序从Eclipse中导出后,加载到AndroidStudio中,程序编译通过,并且可以运行,但直接就崩掉了。

原来遇到过好多回这种现象,基本上是第三方的SO库无法加载造成的,查看监听的LOGCAT,上面有这些:

15895-15895/com.irisking.previewUI E/AndroidRuntime FATAL EXCEPTION: main

    java.lang.UnsatisfiedLinkError: Couldn't load jnidispatch from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.irisking.previewUI-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.irisking.previewUI-2, /vendor/lib, /system/lib]]]: findLibrary returned null

果不其然啊,程序还是找不到Jna使用的分发SO。那么原因找到了,解决的方法也就明确了,怎么在AndroidStudio中加载第三方的SO呢?网上的方法很多:

举一个方法:

1、将*.so文件拷贝到app\libs\armeabi文件夹下

2、修改build.gradle文件,在buildTypes下添加

sourceSets { 

        main { 

            jniLibs.srcDirs = ['libs'] 

        } 

    }

3、在调用处

public native String  stringFromJNI();           //jni 函数名 

public native String  getFFmpegVersionFromJNI(); //jni函数名 

static { 

    System.loadLibrary("ffmpeg");                //加载.so文件 

    System.loadLibrary("ffmpeg-jni");            //加载.so文件 

}

但是这种方法个人觉得不了,修改的地方太多,导致可能出错,最简单的方法:

*.so文件导入androidapp/src/main/jniLibs文件夹下,换句话,在app/src/main目录上右击创建jniLibs这个文件夹,然后把SO文件拷贝进去即可。

Android开发之二十七AndroidStudio调用第三方SO库 - 还东国 - 还东国的博客

 

这里自己还曾经按照Eclipse的方法,拷贝到Libs目录下,建立armeabi文件夹,结果不行,然后又想了想,觉得是编译的选项问题,于是就把armeabi这个文件夹改成了armeabi-v7a,就OK了。都无语了。

  评论这张
 
阅读(332)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017