Smack和aSmack之间有什么区别?

13

我无法在Android上使用Smack,但aSmack却可以完美地工作。当对比源代码时,它们看起来有些相似,区别从何而来?

Smack和aSmack之间有什么区别?

4个回答

12

Smack < 4.1在Android上不起作用,主要是因为Android缺少API(例如大多数javax API)。这就是aSmack构建环境的诞生原因,可以修改Smack以便在Android上使用。

除了许多较小的更改外,最大的变化有:

  1. 禁用Android不支持的XMPP SASL认证方法
  2. 使用Apache Harmony替代javax API进行SASL认证

确保在执行任何XMPP相关操作之前,阅读README并初始化相关代码。

更多信息可在https://github.com/Flowdalic/asmack/wiki/Modifications找到。


如果您不介意,是否可以给出一些详细原因,解释为什么会发生这种情况呢?基本上Dalvik可以运行标准的Java代码,对吗? - Ravindranath Akila
非常感谢!我曾对为什么无法使用Smack感到困惑...谢谢! - Ravindranath Akila
如果您发现这个答案有帮助,请考虑点赞。 - Flow
你能帮我一个忙吗?这是 asmack 为不同的 Android 版本提供不同 jar 包的原因吗?有什么具体原因吗?为什么不能使用相同的 jar 包? - Ravindranath Akila
1
目前,aSmack不同Android API级别的版本之间唯一的区别是它们使用该级别的android.jar进行构建。这不会导致任何功能上的差异,并且在撰写本文时,使用哪个版本都没有影响。 - Flow
那么,如果我们为4.0构建应用程序,它将与未来版本的Android向前兼容?我的理解是,例如,如果您使用标准API制作3.2(Honeycomb)的应用程序,它将一直工作,直到API被弃用。因此,如果我使用asmack 3.2版本发布后的版本,只要没有任何API被弃用,它就可以在所有设备上运行。 - Ravindranath Akila

5
如项目描述所述,ASmack 添加了一组对常规 Smack 的补丁。有关更多详细信息,请查看此对话
问候。

我想说的是,我有Smack和aSmack的源代码,但是这两个代码并没有什么不同,以至于Smack不能在Android上工作。是哪个补丁或者哪个因素阻止了Smack在Android上使用,并使得aSmack可以在Android上正常工作呢? - SPB

1

你可以查看 talkmyphone 的实现方式。我认为他们在Android上使用了Smack。


如果我没记错,talkmyphone使用的是这里的相当古老的smack补丁:http://davanum.wordpress.com/2007/12/31/android-just-use-smack-api-for-xmpp/,带有这个差异:http://people.apache.org/~dims/android/smack-android.diff - Flow

1

它修改了Smack以使其能够在Android上运行。

我不确定这些更改是什么,除了修改ProviderManager机制以便从适用于Android的目录中加载smack.providers XML文件。默认情况下,Smack会从自己的资源目录加载此文件,但在Android中无法访问。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接