将 Smack 与聊天应用程序的 Android Studio 项目集成
Integrating Smack with Android Studio project for chat application
我正在尝试使用 ejabberd 服务器和 smack 库实现聊天信使,但很难集成 smack 的所有 jar 和依赖项。我正在使用 android Studio。
我的build.gradle(模块):
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.example.nit.xmppclient"
minSdkVersion 18
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'
compile "org.igniterealtime.smack:smack-android:4.1.0"
compile "org.igniterealtime.smack:smack-tcp:4.1.0"
compile "org.igniterealtime.smack:smack-android-extensions:4.1.0"
compile 'org.ogce:xpp3:1.1.6'
}
首先我遇到了 XMLpullparser 错误,然后我添加了 xpp3。但是在我添加 xpp3 之后我得到
Error:Gradle: Execution failed for task ':app:preDexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/usr/lib/jvm/java-7-openjdk-amd64/bin/java'' finished with non-zero exit value 1
build.gradle(项目):
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.2.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
maven {
url 'https://oss.sonatype.org/content/repositories/snapshots'
}
mavenCentral()
}
}
问题:
如何消除错误或可能导致错误的原因。我可能缺少一些依赖项?
使用 smock 会增加应用程序的大小。我可以在不使用任何库和编写服务器端代码的情况下实现 IM 吗?
就像为 node-js 使用 ejabberd 库和 android 应用程序与 nodejs 而不是 ejabberd 交谈?
是的,我还有更多事情:
public class XMPPClient {
private static int port = 5222;
private static String host = "my-ip";
private static String service = "my.com";
static XMPPTCPConnectionConfiguration conf = XMPPTCPConnectionConfiguration.builder()
.setServiceName(service)
.setPort(port)
.setHost(host)
.setCompressionEnabled(false).build();
static XMPPTCPConnection connection = new XMPPTCPConnection(conf);
public static void register(String username, String password) throws SmackException.NotConnectedException, XMPPException.XMPPErrorException, SmackException.NoResponseException {
AccountManager accountManager = AccountManager.getInstance(connection);
accountManager.createAccount(username,password);
}
public static void main (String args[]) throws SmackException.NotConnectedException, XMPPException.XMPPErrorException, SmackException.NoResponseException {
register("user", "password");
}
}
我在 运行 XMPPClient class
时遇到错误
看来您需要添加 multidex 支持。在您应用的 build.gradle 文件
中添加 multidex 支持
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
尝试更改您的依赖项并使用 gradles 进行构建
compile 'org.igniterealtime.smack:smack-android:4.1.6'
compile 'org.igniterealtime.smack:smack-tcp:4.1.6'
compile 'org.igniterealtime.smack:smack-im:4.1.6'
compile 'org.igniterealtime.smack:smack-extensions:4.1.6'
如果按照问题he/she中的方法进行操作,就可以集成库。
我只是 运行 文件而不是整个项目,这听起来可能是个愚蠢的错误,但在构建项目后一切正常。
我正在尝试使用 ejabberd 服务器和 smack 库实现聊天信使,但很难集成 smack 的所有 jar 和依赖项。我正在使用 android Studio。
我的build.gradle(模块):
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.example.nit.xmppclient"
minSdkVersion 18
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'
compile "org.igniterealtime.smack:smack-android:4.1.0"
compile "org.igniterealtime.smack:smack-tcp:4.1.0"
compile "org.igniterealtime.smack:smack-android-extensions:4.1.0"
compile 'org.ogce:xpp3:1.1.6'
}
首先我遇到了 XMLpullparser 错误,然后我添加了 xpp3。但是在我添加 xpp3 之后我得到
Error:Gradle: Execution failed for task ':app:preDexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/usr/lib/jvm/java-7-openjdk-amd64/bin/java'' finished with non-zero exit value 1
build.gradle(项目):
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.2.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
maven {
url 'https://oss.sonatype.org/content/repositories/snapshots'
}
mavenCentral()
}
}
问题:
如何消除错误或可能导致错误的原因。我可能缺少一些依赖项?
使用 smock 会增加应用程序的大小。我可以在不使用任何库和编写服务器端代码的情况下实现 IM 吗? 就像为 node-js 使用 ejabberd 库和 android 应用程序与 nodejs 而不是 ejabberd 交谈?
是的,我还有更多事情:
public class XMPPClient {
private static int port = 5222;
private static String host = "my-ip";
private static String service = "my.com";
static XMPPTCPConnectionConfiguration conf = XMPPTCPConnectionConfiguration.builder()
.setServiceName(service)
.setPort(port)
.setHost(host)
.setCompressionEnabled(false).build();
static XMPPTCPConnection connection = new XMPPTCPConnection(conf);
public static void register(String username, String password) throws SmackException.NotConnectedException, XMPPException.XMPPErrorException, SmackException.NoResponseException {
AccountManager accountManager = AccountManager.getInstance(connection);
accountManager.createAccount(username,password);
}
public static void main (String args[]) throws SmackException.NotConnectedException, XMPPException.XMPPErrorException, SmackException.NoResponseException {
register("user", "password");
}
}
我在 运行 XMPPClient class
时遇到错误看来您需要添加 multidex 支持。在您应用的 build.gradle 文件
中添加 multidex 支持 android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
尝试更改您的依赖项并使用 gradles 进行构建
compile 'org.igniterealtime.smack:smack-android:4.1.6'
compile 'org.igniterealtime.smack:smack-tcp:4.1.6'
compile 'org.igniterealtime.smack:smack-im:4.1.6'
compile 'org.igniterealtime.smack:smack-extensions:4.1.6'
如果按照问题he/she中的方法进行操作,就可以集成库。
我只是 运行 文件而不是整个项目,这听起来可能是个愚蠢的错误,但在构建项目后一切正常。