我正在尝试在Android Studio (macOS - Android Studio3.5)下使用API16的现有应用程序上使用chilkat库。需要关于如何在Android Studio中正确导入chilkat库的建议。
我需要确定该库是否可以与应用程序一起使用(关于一些SFTP操作)。
按照Chilkat网站(https://www.chilkatsoft.com/chilkatAndroid.asp)上的说明,我能够编译包括库在内的应用程序。但是,为了编译应用程序,我必须在应用程序的gradle版本中添加Multidex支持:
..安卓{ compileSdkVersion 28 buildToolsVersion '27.0.3‘defaultConfig { minSdkVersion 16 targetSdkVersion 16 versionCode 72 versionName '1.6.6’multiDexEnabled true <-添加} dexOptions { javaMaxHeapSize "4g“} ..........依赖关系{ ........实现'com.android.support:multidex:1.0.3‘<-添加}
该应用程序的“项目结构”与说明中描述的不同,因此我最终将libs文件复制到项目的/app目录下的jniLibs目录中。源文件被复制到: /app/src/main/java/com/chilatsoft
在主应用程序中,我按照指令的建议包含了lib,并添加了加载器。
最后,我能够没有错误地编译应用程序,但是运行时应用程序崩溃,表明没有找到chilkat库。
nativeLibraryDirectories=/data/app-lib/com.xxxxxxxxxxx,:无法从加载器框架加载chilkat [ java.lang.Runtime.loadLibrary(Runtime.java:358) [压缩文件“/java.lang.UnsatisfiedLinkError/dalvik.system.PathClassLoader/com.symb.emdk.jar”,压缩文件“/DexPathList/java.lang.UnsatisfiedLinkError/com.xxxxxxxxxxxxxxxxxxxxxx.apk”,nativeLibraryDirectories=/data/app-lib/com.xxxxxxxxxxx,/dalvik.system.PathClassLoader/lib,/system/lib]]:在java.lang.Runtime.loadLibrary(Runtime.java:358)处findLibrary返回null
这让我觉得我导入的库不正确。要正确导入chilkat,有什么提示/步骤可以遵循吗?
在购买许可证之前,我想确保该库可以用于该项目。我无法更改API或从头开始,也无法更改当前应用的结构。
谢谢你的帮助!史蒂夫
发布于 2019-08-26 21:38:08
当你的应用像这样加载一个JNI .so共享库时:
static
{
System.loadLibrary("chilkat");
}Java运行时加载器正在查找libchilkat.so的一些目录列表
错误消息似乎显示了它正在查找的目录列表:
alvik.system.PathClassLoader[DexPathList[[zip file "/system/framework
/com.symbol.emdk.jar", zip file "/data/app/com.xxxxxxxxxxx.apk"],
nativeLibraryDirectories=[/data/app-lib/com.xxxxxxxxxxx,
/vendor/lib, /system/lib]]]: findLibrary returned null at
java.lang.Runtime.loadLibrary(Runtime.java:358)这些目录是:
/data/app-lib/com.xxxxxxxxxxx
/vendor/lib
/system/lib
而libchilkat.so不在任何一个文件里。libchilkat.so位于项目目录树中的一个目录中。一种解决方案是将libchilkat.so移动到其中一个目录。另一种解决方案是(以某种方式)将libchilkat.so所在的目录添加到搜索的目录列表中。
另一种可能的解决方案是显式加载.so。不是调用System.loadLibrary.而是调用System.loadLibrary(“libchilkat.so”),而是调用System.load来查找libchilkat.so(参见https://www.chilkatsoft.com/java-loadLibrary-Linux.asp)但这可能很困难,因为要加载的.so取决于运行时体系结构(armeabi-v7a、x86_64等)。
发布于 2021-03-23 06:14:43
对于初学者,您需要安装和配置android ndk
Android developers ndk documentation
然后,需要包含适当的.so文件
最后,需要用以下命令加载本机代码
static
{
System.loadLibrary("chilkat");
}完成此操作后,您可以继续学习教程
https://stackoverflow.com/questions/57633709
复制相似问题