我正在寻找一个库,应该在android平台将。doc/。docx转换为。pdf。
我得到了PdFTron android sdk,因为他们已经给了libPDFNetC。所以文件。
对于Conversion,有一个叫做Convert的类,里面有一个方法toPDF(),在该方法中,他们内部调用了本地方法FileToPdf()。我尝试了该代码,但无法调用本机方法,并得到错误
我想知道,如果有现有的。so文件存在与你,如果你想调用本机方法,这是存在于。so文件那么是否需要使用JNI?我对JNI了解不多。任何帮助。
你必须将Android NDK使用ndk-build
生成的最终共享库链接到你所说的PDF共享库你已经为ARM架构编译的。(确保是这样的,否则库将无法在Android上工作!)
,如果您有以下目录结构:
jni
└── libs
└────── my_shared_lib.so
└── Android.mk
└── Application.mk
您需要在Android中包含以下内容。可文件:
LOCAL_PATH := $(call my-dir)
# define our prebuilt shared library as a module to the build system
include $(CLEAR_VARS)
LOCAL_MODULE := mysharedlib
LOCAL_SRC_FILES := libs/my_shared_lib.so
include $(PREBUILT_SHARED_LIBRARY)
# The final shared library that will be bundled inside the .apk
include $(CLEAR_VARS)
LOCAL_MODULE := mynativelib
LOCAL_LDLIBS := -landroid -llog
LOCAL_CPPFLAGS := -O0 -g3 -std=c++11 -Wall -Wextra
LOCAL_SHARED_LIBRARIES := mysharedlib
LOCAL_C_INCLUDES := myheader1.h myheader2.h
LOCAL_SRC_FILES := src_file1.cpp src_file2.cpp
include $(BUILD_SHARED_LIBRARY)
和应用程序的内容。mk文件(用于使用c++标准库,并为两个不同版本的ARM架构构建最终的共享库):
APP_OPTIM := debug
APP_PLATFORM := android-14
APP_STL := gnustl_static
APP_ABI := armeabi armeabi-v7a
然后,在您从Eclipse内或使用ndk-build脚本从命令行编译代码后,它将编译您最终的共享库并将其链接到您预构建的共享库(即PDF共享库)。
对于共享库,生成并部署到设备/模拟器的apk包含最终的共享库以及您链接到的所有预构建共享库,与链接到未捆绑在apk中的静态库形成对比。
对于你的用例,你应该在你的Android应用程序的lib目录下有两个共享库,当apk在设备上解压缩后。您可以通过在终端上运行以下命令来检查:
adb shell ls -l /data/data/com.company.myapp/lib
将com.company.myapp替换为应用程序的包名。
另外,不要忘记在Java类的静态上下文中放入以下内容:
class MyClass
{
static
{
try
{
System.loadLibrary("mynativelib");
}
catch (UnsatisfiedLinkError ule)
{
Log.e(TAG, "WARNING: Could not load native library: "
+ ule.getMessage());
}
}
// other code here...
}
注意,在系统中使用了与相同的名称。
您需要确保映射到本机接口的.so文件在您的系统上是可用的,并且可以被Java找到。
在Java代码中应该有一个类似System.loadLibrary("<libraryname>")
或System.load("/path/to/libs/lib<libraryname>.so")
的调用。这将指示JVM搜索具有给定名称的库并加载它。
-
System.load("/path/to/libs/lib<libraryname>.so")
将查找指定为参数的文件,并加载它。 -
System.loadLibrary("<libraryname.")
将在配置的库路径中查找名称为lib<libraryname>.so
的库。库路径取自系统变量java.library.path
。
还要确保您正在加载的库版本与Java JNI映射兼容!
要在ndk上工作,有一个。mk (make文件)在JNI下编译以获得。so文件。
。Mk文件是用本地代码使用c/c++代码段编写的。
现在要使用JNI进行编译,有两种常见的方法:1。使用旧ADT + SDK版本时:您需要在windows配置上配置linux环境,以便在shell上运行JNI命令。这个环境可以通过网络上提供的各种软件来实现,例如cygwin setup。
2。如果您使用的ADT + SDK版本已更新:然后在ADT中有一个NDK插件可用。因此,在ndk和本机库上工作更容易。有关NDK的更多信息,请访问此处