您必须使用以下链接链接由 Android NDK 生成的最终共享库ndk-build
到你说的PDF共享库您已经针对 ARM 架构进行了编译.
(确保情况如此,否则该库将无法在 Android 上运行!)
例如,如果您有以下目录结构:
jni
└── libs
└────── my_shared_lib.so
└── Android.mk
└── Application.mk
您需要在其中包含以下内容Android.mk file:
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构建脚本它会编译您最终的共享库并将其链接到您预构建的共享库(即您所说的要尝试使用的 PDF 共享库)。
对于共享库,生成并部署到设备/模拟器的 apk 包含最终共享库以及您链接的所有预构建共享库,与链接未捆绑在 apk 内的静态库相反。
对于您的用例,在设备上解压 apk 后,您的 Android 应用程序的 lib 目录中应该有两个共享库。
您可以通过从终端运行以下命令来检查这一点:
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...
}
注意使用sameSystem.loadLibrary 方法调用中的 name 作为最终的共享库名称。