尝试为PDFTron Android加载Library时出错

时间:2016-12-23 05:54:13

标签: java android pdf java-native-interface pdftron

在尝试与PDFTron集成时出现了一个奇怪的错误,即PDFNet Android SDK:

  

UnsatisfiedLinkError:无法加载PDFNetC:findLibrary返回null。预计armv7a,找到cpu_info:abi:armeabi-v7a

我已经检查了这个link

PDFNet Android SDK提供的本机库很可能未正确包含在我的项目中。 在lib文件夹中我下载了包,有本机库和java库都需要包含在我的项目中。

在主文件夹中创建一个名为jniLibs的文件夹,并将所有.so(具有相应的文件夹结构)放在jniLibs文件夹中,即:

enter image description here

这将允许Android Studio自动识别本机库路径。

我还指定了产品风味来过滤哪个.so使用,例如:

productFlavors {
    armv7a {
        ndk {
            abiFilters "armeabi-v7a"
        }
    }
    arm {
        ndk {
            abiFilters "armeabi"
        }
    }
    x86 {
        ndk {
            abiFilters "x86"
        }
    }
    armv8 {
        ndk {
            abiFilters "arm64-v8a"
        }
    }
    x86_64 {
        ndk {
            abiFilters "x86_64"
        }
    }
    fat {
        ndk {
            abiFilters "armeabi-v7a", "armeabi", "arm64-v8a", "x86", "x86_64"
        }
    }
}

然后我在项目的build.gradle文件中指定了jniLibs目录,即:

sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src']
        resources.srcDirs = ['src']
        res.srcDirs = ['res']
        jniLibs.srcDirs = ['libs']
        svg.srcDir 'src/main/svg'
    }
}

2 个答案:

答案 0 :(得分:2)

在Android Studio中导入PDFTron库项目。 在您的应用程序中使用该库项目。在您的应用程序compile project(':libraries:PDFViewCtrlTools')中使用build.gradle

现在将libPDFNetC.so文件复制到" jni / libs / armeabi"应用程序中的文件夹。

在你的application.mk中写下这个。

APP_ABI := armeabi-v7a
APP_CPPFLAGS += -std=c++11 -exception
APP_STL := gnustl_shared
APP_PLATFORM=android-19
APP_OPTIM := debug
NDK_TOOLCHAIN_VERSION := 4.8

Android.mk文件中添加此

include $(CLEAR_VARS)
LOCAL_MODULE    := libPDFNetC
# this libs path is relative to my jni files, so, src/main/jni/libs/libPrecompiledLib.a
LOCAL_SRC_FILES := libs/armeabi/libPDFNetC.so
include $(PREBUILT_SHARED_LIBRARY)

编辑:

PDFDoc doc = PDFDoc(InputStream var1)

可以使用此方法,您可以从网址打开PDF。

代码:

PDFViewCtrl mPDFViewCtrl = (PDFViewCtrl) view.findViewById(R.id.pdfViewer);
PDFDoc doc = new PDFDoc(filePath);
mPDFViewCtrl.setDoc(doc);

XML

<pdftron.PDF.PDFViewCtrl
    android:id="@+id/pdfViewer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="vertical|horizontal"
    android:visibility="gone"/>

答案 1 :(得分:1)

如果您使用的是标准的jniLib结构(即主屏幕中的jniLibs,如第一个屏幕截图所示),则无需再在sourceSets中指定它。 sourceSets中的jniLibs.srcDirs = ['libs']与标准结构(jniLibs)冲突。

https://groups.google.com/forum/?fromgroups#!topicsearchin/pdfnet-sdk/android $ 20AND$20author$3Asgong@pdftron.com/pdfnet-sdk/0t_3-pN5jG4