2 ysn003 ysn003 于 2015.06.05 17:52 提问

Smack4.1 android 找不到包异常(NoClassDefFoundError)

想使用最新的Smack4.1.0 在我的项目当中,就先搞一个单独的,希望能跑起来。结果就是简单的都弄不起来。导入所有包后,可以编译通过。
但是一使用到它的包,就抛个异常给我。整了半天也没弄明白是包的原因还是哪配置的问题。
在网上找到这个资料:https://github.com/igniterealtime/Smack/wiki/Smack-4.1-Readme-and-Upgrade-Guide
也不会弄,又是phython又是maven又是Ant的,英语也不好,不知道怎么弄。
![图片说明](https://img-ask.csdn.net/upload/201506/05/1433497785_180037.png)图片说明
有用过的大神能使用的吗?求源码!!!

这是我的代码,就是按官方介绍打出来的:
public void onClick(View v){
    new Thread(new Runnable() {

        @Override
        public void run() {
            try {


                XMPPTCPConnection connection = getConnection();
                connection.connect();
                connection.login("anytime_eeeeee","qq123456","ubuntu");
            } catch (SmackException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (XMPPException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }).start();
}
 private XMPPTCPConnection getConnection(){

        XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder();
        builder.setServiceName("ubuntu");
        builder.setHost("58.64.162.184");
        builder.setPort(5222);
        builder.setCompressionEnabled(false);
        builder.setDebuggerEnabled(false);
        builder.setSendPresence(true);
        builder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);

        XMPPTCPConnection connection = new XMPPTCPConnection(builder.build());
        return connection;
    }

9个回答

ysn003
ysn003   2015.06.09 09:27
已采纳

重新建了个工程,导入了相应的包,在官网的论坛上找到了一个例子,按着例子做就可以运行并跑起来了。
https://community.igniterealtime.org/thread/55618,当然这个是有问题的,他没有使用到server name
我把我的代码放上来,希望新来的学员不要被这恶心的搭环境被搞怕了。
代码地址:http://download.csdn.net/detail/ysn003/8786987

ysn003
ysn003 下面有正确答案
接近 3 年之前 回复
windsunmoon
windsunmoon   Rxr 2015.06.08 17:36

肯定是依赖路径的问题。看看order an export 有没有把smack的包导出。另外可以反编译 apk,看看 反编译后 到底有没有 那个类。

再看看 混淆问题。

ysn003
ysn003 你的答案才是对的,只是当时没认真看 order an export.现在问题是,怎么把悬赏的30c币给你呢?每一次弄这个
接近 3 年之前 回复
ysn003
ysn003 跟整个环境问题相关,其实我也不知道问题出在哪,可能跟skd版本也有关系吧
接近 3 年之前 回复
stringsdn
stringsdn   2015.06.05 18:19

是否在gradle里使用了混淆??????

ysn003
ysn003 回复千本摩的: 我重新再建了一个project.使用了最新的Android5.1 包,并在其他资料里找到了要使用的另外三个包,已经可以运行并连接上服务器了。感谢你的回答
接近 3 年之前 回复
stringsdn
stringsdn 回复ysn003: eclipse 的混淆在哪里 你去看下是否混淆
接近 3 年之前 回复
ysn003
ysn003 我用的是eclipse.因为原来的项目就是在eclipse上面开发的
接近 3 年之前 回复
LogicTeamLeader
LogicTeamLeader   2015.06.05 19:42

你用的IDE是ADT还是Android Studio?这个就是没有找到相关的类,还是导入的包有问题。

ysn003
ysn003 其用的是Eclipse.我也知道是找不到包,但是那个包就在我的路径里面。项目是用eclipse开发的。导入android studio也不会弄
接近 3 年之前 回复
jiuqiyuliang
jiuqiyuliang   2015.06.06 09:01

找不到包异常(NoClassDefFoundError) Didn't find class "org.jivesoftw"你可以上网查一下包含这个类的包

ysn003
ysn003 我知道它说找不到包,但是我都可以import进入那些包。编译是可以通过,也可以运行的。就是在程序使用时运到那方法时,说找不到包
接近 3 年之前 回复
windsunmoon
windsunmoon   Rxr 2015.06.06 18:49

android客户端一般使用asmack,你可以换成这个jar试试。

stringsdn
stringsdn 如果换包了可能方法名变调了
接近 3 年之前 回复
ysn003
ysn003 以前是用asmack的。现在要换成最新的smack4.1.因为之前的asmack官网都已经不更新了。很不稳定,经常掉线了不会自动重连
接近 3 年之前 回复
ysn003
ysn003   2015.06.10 09:14

终于找到真正原因了!
因为之前弄的是测试项目,所以又把所有的smack jar 包制作成 library.结果问题再次出现,
解决方法是:
右键你的项目->Build path ->Configure Build path ->Order and Export
把你制作 的User library 勾选上即可!
图片说明
其实那个勾选不选上到底是什么原理,搞不懂,有哪位懂的分享一下,谢谢

datou431
datou431   Rxr 2015.06.10 15:26

看看order an export 有没有把smack的包导出

windsunmoon
windsunmoon   Rxr 2015.06.11 11:37

export and order 勾选上,意思就是 导出apk的时候,一起打包到apk中

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!