在 android 2.3 上使用 jcifs 库时出现 NoClassDefFound 异常
Posted
技术标签:
【中文标题】在 android 2.3 上使用 jcifs 库时出现 NoClassDefFound 异常【英文标题】:NoClassDefFound exception while using jcifs library on android 2.3 【发布时间】:2012-05-12 15:21:55 【问题描述】:我在我的 android 应用程序中使用 jcifs-1.3.17.jar 库。
以下代码在 android 1.6 模拟器上运行良好,但在 2.3 和 3.0 上失败。
当应用程序启动时,在 2.3 模拟器的 logcat 中得到以下警告。
05-03 10:41:43.105: E/dalvikvm(338): Could not find class 'jcifs.smb.NtlmPasswordAuthentication', referenced from method myPackage.getFile
并在创建 NtlmPasswordAuthentication 对象时出现以下异常。
05-03 10:49:59.765: E/AndroidRuntime(338): java.lang.NoClassDefFoundError: jcifs.smb.NtlmPasswordAuthentication
谁能告诉我,我错过了什么?
我的功能是
public boolean getFile(String url)
try
String name="server1";//my windows username
String password="password1";//my windows password
SmbFile dir=null;
url = url.toLowerCase();
if (!url.startsWith("smb://") )
url = "smb://" + url;
SmbFile file = null;
try
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null, name, password);
file = new SmbFile(url, auth);
SmbFileInputStream in = new SmbFileInputStream( file );
File gpxfile = null;
File root = Environment.getExternalStorageDirectory();
gpxfile = new File(root, file.getName());
gpxfile.delete();
gpxfile.createNewFile();
FileOutputStream out = new FileOutputStream(gpxfile);
long t0 = System.currentTimeMillis();
byte[] b = new byte[8192];
int n, tot = 0;
long t1 = t0;
while(( n = in.read( b )) > 0 )
out.write( b, 0, n );
tot += n;
catch (Exception e1)
return true;
catch (Exception e)
return false;
【问题讨论】:
【参考方案1】:在您的项目中添加一个文件夹 libs 并将您的所有 jar 文件复制到其中。
按照这些说明进行操作
所以右键单击您的项目 --> 创建一个名为 libs
的文件夹并在
中执行此步骤 right click (on libs folder) -->import-->File System-->browse to select your jar file and hit finish and run you project.
之后
right click on the project --> Built Path-->java built path-->add jars select your jar file from your libs folder
【讨论】:
以上是关于在 android 2.3 上使用 jcifs 库时出现 NoClassDefFound 异常的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jCIFS 在 Android 中使用默认查看器打开文件
在 Android 上使用 JCIFS 库时在 URL 中使用 SMB 协议