java - android中jcraft jsch SFTP库的ClassNotFound异常
问题描述
我正在尝试使用 jcraft 的 jsch 库从 android 设备上使用 SFTP 上传文件。在应用程序的调试模式下,该过程绝对正常,并且我能够正确上传文件。但是当我在发布模式下构建应用程序时,jsch 库会抛出以下异常。
01-08 11:48:00.905 8083-8182/? W/System.err: b.c.a.c0: java.lang.ClassNotFoundException: com.jcraft.jsch.jce.Random
01-08 11:48:00.905 8083-8182/? W/System.err: at b.c.a.d1.a()
01-08 11:48:00.905 8083-8182/? W/System.err: at b.c.a.d1.a()
01-08 11:48:00.905 8083-8182/? W/System.err: at b.d.b.i.b.a()
01-08 11:48:00.905 8083-8182/? W/System.err: at b.d.b.i.b.doInBackground()
01-08 11:48:00.906 8083-8182/? W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:292)
01-08 11:48:00.906 8083-8182/? W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
01-08 11:48:00.906 8083-8182/? W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
01-08 11:48:00.906 8083-8182/? W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
01-08 11:48:00.906 8083-8182/? W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
01-08 11:48:00.906 8083-8182/? W/System.err: at java.lang.Thread.run(Thread.java:818)
01-08 11:48:00.906 8083-8182/? W/System.err: Caused by: java.lang.ClassNotFoundException: com.jcraft.jsch.jce.Random
01-08 11:48:00.907 8083-8182/? W/System.err: at java.lang.Class.classForName(Native Method)
01-08 11:48:00.907 8083-8182/? W/System.err: at java.lang.Class.forName(Class.java:309)
01-08 11:48:00.907 8083-8182/? W/System.err: at java.lang.Class.forName(Class.java:273)
01-08 11:48:00.907 8083-8182/? W/System.err: ... 10 more
01-08 11:48:00.907 8083-8182/? W/System.err: Caused by: java.lang.ClassNotFoundException: Didn't find class "com.jcraft.jsch.jce.Random" on path: DexPathList[[zip file "/data/app/com.spirituspay.spaycardapplication-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
01-08 11:48:00.908 8083-8182/? W/System.err: at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
01-08 11:48:00.908 8083-8182/? W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
01-08 11:48:00.908 8083-8182/? W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
01-08 11:48:00.908 8083-8182/? W/System.err: ... 13 more
01-08 11:48:00.908 8083-8182/? W/System.err: Suppressed: java.lang.ClassNotFoundException: com.jcraft.jsch.jce.Random
01-08 11:48:00.908 8083-8182/? W/System.err: at java.lang.Class.classForName(Native Method)
01-08 11:48:00.908 8083-8182/? W/System.err: at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
01-08 11:48:00.908 8083-8182/? W/System.err: at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
01-08 11:48:00.908 8083-8182/? W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
01-08 11:48:00.908 8083-8182/? W/System.err: ... 14 more
01-08 11:48:00.908 8083-8182/? W/System.err: Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available'
我尝试用本地 JAR 替换 gradle 库,也尝试在发布模式下禁用 proGuard 规则。
还有什么可能是造成这种情况的原因?
如果您需要任何其他信息进行诊断,请告诉我。
解决方案
添加到 proguard-rules.pro: -keep class com.jcraft.jsch.** { *; }
推荐阅读
- swift - 如何修复“动态”属性“IpfSetId”也必须是“@objc”?
- vba - Vba 中的 Power Bi 数据刷新
- fastreport - FastReport 文档属性(标题、主题、版本、作者)设置
- android - RecyclerView Adapter 的 onBindViewHolder 方法 setImageResource 有效
- python - Keras 模型网络 3D 输入到 2D 输出
- r - 为什么 ggplot (geom_line) 中的颜色与显式分配的颜色不同
- android - 保留来自子事件侦听器的 firebase 数据,并在重新创建片段/活动时避免重新加载
- c# - 为什么存在视图和操作方法时出现 HTML 404 错误?
- html - 如何使用 Flexbox 以特定项目开始新行?
- python - 避免'字符参数不在范围内'python3解码