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

  • 相关阅读:
    ubuntu 进入临时客户会话页面 转入用户自己页面
    python hmac 加密
    docker 学习
    python try except 捕捉错误得到错误的时候的值
    python2 python3 m2crypto 安装(rsa 私钥文件加密)
    python3 requests 模块 json参数和data参数区别
    爬虫-鸡哥给大家的福利
    常用模块2
    python入门到放弃之 面向对象vs面向过程
    python放弃之 模块和包
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/6223989.html
Copyright © 2011-2022 走看看