Android中使用so文件:

做一个PDF阅读的功能,找到一个开源的库,mupdf。下载的是网上编译好的so库,导入到自己项目中的时候一直报错java.lang.UnsatisfiedLinkError: Couldn't load netplayerlibq: findLibrary returned null,找不到so文件中的方法。找了一个下午,终于知道了原因。

JNI中的方法的命名规范是

1) 前缀: Java_
2) 类的全限定名,用下划线进行分隔(_):com_lms_jni_JniTest
3) 方法名:getTestString 

方法命名是与包名相关的,所以在用so库的时候,将调用其中方法的类的包名改成so文件中写的包名。这是最简单的办法。当然,最好的办法当然是找到开源项目的源码交叉编译成含有我们项目包名的so文件。

参考http://blog.csdn.net/jiabailong/article/details/7986350 


Android studio中导入so的两种方法:

1、将so文件放在libs目录下,然后在app的build.gradle中加入如下配置

sourceSets {    main {        jniLibs.srcDirs = ['libs']    }}
整个配置文件如下:

android {    compileSdkVersion 23    buildToolsVersion '19.1.0'    defaultConfig {        applicationId "com.hehe.itlms"        minSdkVersion 15        targetSdkVersion 23        versionCode 1        versionName "1.0.0"    }    buildTypes {        release {            minifyEnabled true//是否混淆            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }    sourceSets {        main {            jniLibs.srcDirs = ['libs']        }    }}

2、将所有需要使用的.so文件压缩为.zip文件(zip中的文件目录结构为: lib/armeabi/*.so)注意,一定要是这样的路径,lib不要写成libs啊!然后将这个.zip文件重命名为armeabi.jar文件(我用的是so.jar),将该jar包添加到项目的libs文件下,然后Add isLibrary。

最后的目录结构 

libs 
^---|xxx.jar 
^---|armeabi.jar 
        ^---|lib 
              ^---|armeabi 
                     ^---|xxx.so

更多相关文章

  1. Android刷Root方法,zergRush,Odin3+CWM(ClockworkMod recovery)
  2. [Android]实现静默安装APK的两种方法
  3. Android中ScrollView隐藏进度条方法
  4. android读取plist文件
  5. 在Android中把SQLite的数据库文件存储在SD卡中【转】
  6. 使用Android自带的DownloadManager下载文件
  7. android 获取.thumbnail文件下的小图标
  8. Android--用Pull解析器将对象解析成xml文件及单元测试

随机推荐

  1. Linux手动部署远程的mysql数据库的方法详
  2. Navicat for MySQL 11注册码\激活码汇总
  3. 详解Navicat远程连接mysql很慢
  4. Navicat Premium操作MySQL数据库(执行sql
  5. Navicat Premiun远程连接MySQL报错10038
  6. 详解mysql中explain的type
  7. 浅析MysQL B-Tree 索引
  8. MySQL编码不一致可能引起的一些问题
  9. 浅析MySQL的WriteSet并行复制
  10. MySQL8.0设置远程访问权限的方法