无法加载mupdf:findLibrary返回null

时间:2015-04-20 08:04:22

标签: android mupdf

我有一个问题是将mupdf库导入我的Android应用程序。问题是该程序上周运行良好,我可能在代码中改变了一些不再加载mupdf的东西。如果我尝试加载pdf文件,我会收到“-my application-stopped”的消息。这是logcat错误消息:

2530-2530/com.efc.efcredader E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.ExceptionInInitializerError
        at com.artifex.mupdfdemo.MuPDFActivity.openFile(MuPDFActivity.java:944)
        at com.artifex.mupdfdemo.MuPDFActivity.onCreate(MuPDFActivity.java:710)
        [...]
 Caused by: java.lang.UnsatisfiedLinkError: Couldn't load mupdf: findLibrary returned null
        at java.lang.Runtime.loadLibrary(Runtime.java:365)
        at java.lang.System.loadLibrary(System.java:535)
        at com.artifex.mupdfdemo.MuPDFCore.<clinit>(MuPDFCore.java:16)
        [...]

我将libmupdf.so称为:

static {
    System.loadLibrary("mupdf");
}

我已经关注了很多关于如何将mupdf构建为库并导入它的教程,但是没有人能够很好地工作(至少对我而言)。所以我想(我希望),我在操纵过程中做错了什么。 从mupdf导入“Android”模块后,该文件夹就像:

>android
    >manifests
        Android.Manifest.xml
  >java
      >com.artifex.mupdfdemo
          All java files
  >res
      >animator
          Xml files
      >drawable
          Xml files
      >layout
          Xml files
      >values
          Xml files
  >c
      Android.mk
      Application.mk
      Core.mk
      libmupdf.so
      mupdf.c
      ThirdParty.mk

即使我尝试单独编译它,我也有一些错误:

make.exe:***No rule to make target ...

Execution failed for task ':android:compileDebugNdk'.
com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\android-ndk-r10d\ndk-build.cmd'' finished with non-zero exit value 2

这是项目的build.gradle

apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':appcompat_v7')
    compile project(':android-support-v4-preferencefragment-master')
    compile project(':android-support-v7-gridlayout')
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.1"
    compileOptions.encoding = 'ISO-8859-1'

    packagingOptions {
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/LICENSE.txt'
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}

android的build.gradle:

apply plugin: 'com.android.library'

android {
    compileSdkVersion 16
    buildToolsVersion "19.1.0"

    defaultConfig {
        //applicationId "com.artifex.mupdfdemo"
        minSdkVersion 8
        targetSdkVersion 16

        ndk {
            moduleName "mupdf"
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

local.properties

sdk.dir=C\:\\Android\\SDK
ndk.dir=C\:\\android-ndk-r10d

我正在使用Android Studio,SDK是最新的。

我真的不知道如何解决这个问题,我很高兴如果你有任何建议可以帮助我。如果您需要添加任何其他详细信息或文件,请询问。

谢谢。

1 个答案:

答案 0 :(得分:1)

我的解决方案是:

我在lib / armeabi和lib / armeabi-v7a中有.so文件,在build.gradle中我将jniLibs.srcDirs = ['libs']添加到现有的源集中。希望对你有帮助!