zoukankan      html  css  js  c++  java
  • Android如何使用so文件和Android studio中导入so

    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

  • 相关阅读:
    静态资源分析 ------ CocosCreator
    性能分析 ------ CPU运行卡点
    神犇的blog
    0x01-1 原码 反码 补码 概念 原理 详解
    埃拉托色尼素数筛法(转)
    Miller-Rabin概率素数测试算法(转)
    欧拉函数(转)
    中国剩余定理(孙子定理)详解 (转)
    负数取模(转)
    HDU1430 BFS + 打表 + 康托展开(转)
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/6223989.html
Copyright © 2011-2022 走看看