2

尝试与 PDFTron 即 PDFNet Android SDK 集成时遇到一个奇怪的错误:

UnsatisfiedLinkError:无法加载 PDFNetC:findLibrary 返回 null。预期 armv7a,发现 cpu_info: abi: armeabi-v7a

我已经检查过这个链接

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

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

在此处输入图像描述

这将允许 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'
    }
}
4

2 回答 2

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)

可能通过使用这种方法,您可以从 url 打开 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"/>
于 2016-12-23T06:28:16.010 回答
1

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

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

于 2016-12-23T19:32:45.207 回答