Ejabberdサーバーとsmackライブラリを使用してチャットメッセンジャーを実装しようとしていますが、smackのすべてのjarファイルと依存関係を統合するのに苦労しています。 Android Studioを使用しています。
私のbuild.gradle(module):
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(project):
// 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()
}
}
質問:
エラーを削除する方法またはエラーの原因となる可能性があるもの。いくつかの依存関係が欠落している可能性がありますか?
スモックを使用すると、アプリのサイズが大きくなります。ライブラリを使用せず、代わりにサーバーサイドコードを記述せずにIMを実現できますか? node-jsにejabberdライブラリを使用し、ejabberdの代わりにAndroidアプリがnodejsと通信するように?
そして、はい、私はもっと多くのこと:
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クラスを実行しているときにエラーが発生します
質問で行われたことを行うと、ライブラリを統合できるようになります。
プロジェクト全体ではなくファイルを実行していました。これはばかげた間違いに聞こえるかもしれませんが、プロジェクトをビルドした後はすべて正常に機能しました。
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'