【问题标题】:Kafka Android issue卡夫卡安卓问题
【发布时间】:2017-06-02 16:52:09
【问题描述】:

我无法在 Android 应用中使用 Kafka 生产者。我收到以下异常。,

Caused by: java.lang.ClassNotFoundException: Didn't find class "javax.management.DynamicMBean" on path: DexPathList[[dex file "/data/data/com.a.kafkaproducer/files/instant-run/dex/slice-zookeeper-3.4.6_8a38f89467d40a18afbd8baad7b29088157e6083-classes.dex", dex file "/data/data/com.a.kafkaproducer/files/instant-run/dex/slice-zkclient-0.8_e811ffc59b2b86f143b12056ea3479df3f628d5a-classes.dex", dex file "/data/data/com.a.kafkaproducer/files/instant-run/dex/slice-support-annotations-25.1.0_c6c37b5425fad5a782cbe7db2279266099bc29a9-classes.dex", dex file "/data/data/com.a.kafkaproducer/files/instant-run/dex/slice-snappy-java-1.1.2.6_848c76c3e0ca3a9ed4d0c95a6eeba1e11cd43625-classes.dex", dex file "/data/data/com.a.kafkaproducer/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/com.a.kafkaproducer/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/com.a.kafkaproducer/files/instant-run/dex/slice-slice_7-classes.dex", dex file



`at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:56)
I/art:     at java.lang.Class 
com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader.findClass(java.lang.String) (IncrementalClassLoader.java:90)
I/art:     at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:380)
I/art:     at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
I/art:     at java.lang.Class dalvik.system.DexFile.defineClassNative(java.lang.String, java.lang.ClassLoader, java.lang.Object, dalvik.system.DexFile) (DexFile.java:-2)
I/art:     at java.lang.Class dalvik.system.DexFile.defineClass(java.lang.String, java.lang.ClassLoader, java.lang.Object, dalvik.system.DexFile, java.util.List) (DexFile.java:296)
I/art:     at java.lang.Class dalvik.system.DexFile.loadClassBinaryName(java.lang.String, java.lang.ClassLoader, java.util.List) (DexFile.java:289)
I/art:     at java.lang.Class dalvik.system.DexPathList.findClass(java.lang.String, java.util.List) (DexPathList.java:418)
I/art:     at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:54)
I/art:     at java.lang.Class com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader.findClass(java.lang.String) (IncrementalClassLoader.java:90)
I/art:     at java.lang.Class com.android.tools.fd.runtime.IncrementalClassLoader.findClass(java.lang.String) (IncrementalClassLoader.java:62)
I/art:     at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:380)
I/art:     at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:367)
I/art:     at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:367)
I/art:     at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
I/art:     at void org.apache.kafka.clients.producer.KafkaProducer.<init>(org.apache.kafka.clients.producer.ProducerConfig, org.apache.kafka.common.serialization.Serializer, org.apache.kafka.common.serialization.Serializer) (KafkaProducer.java:223)
I/art:     at void org.apache.kafka.clients.producer.KafkaProducer.<init>(java.util.Properties) (KafkaProducer.java:188)
I/art:     at void com.nokia.kafkaproducer.Producer.<init>(java.lang.String, java.lang.Boolean) (Producer.java:29)
I/art:     at void com.nokia.kafkaproducer.MainActivity$1.onClick(android.view.View) (MainActivity.java:35)
I/art:     at boolean android.view.View.performClick() (View.java:5637)
I/art:     at void android.view.View$PerformClick.run() (View.java:22429)
I/art:     at void android.os.Handler.handleCallback(android.os.Message) (Handler.java:751)
I/art:     at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:95)
I/art:     at void android.os.Looper.loop() (Looper.java:154)
I/art:     at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6119)
I/art:     at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
I/art:     at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:886)
I/art:     at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:776)`

使用以下 Gradle 依赖项:

    dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.1.0'

// https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients
compile group: 'org.apache.kafka', name: 'kafka-clients', version:     '0.10.1.1'  testCompile 'junit:junit:3.8.1' }

我正在使用来自 Github repo 的 Producer 示例

任何帮助表示赞赏 谢谢

【问题讨论】:

  • 请发布您的build.gradle 文件的dependencies 块。
  • @Code-Apprentice 添加 gradle 依赖块

标签: java android android-gradle-plugin apache-kafka kafka-producer-api


【解决方案1】:

kafka 客户端库是针对 Java 标准版开发的,javax.management 包是其中的一部分。然而,这个包不是 Android 使用的 Dalvik 运行时的一部分,它只提供 Java SE API 的一个子集。您需要找到一个包含 Kafka 使用的类的 JAR 文件,并将其放入项目的 libs 文件中。

【讨论】:

    【解决方案2】:

    在你的构建 gradle 中输入它

        android {
        compileSdkVersion 22
        buildToolsVersion "23.0.0"
             defaultConfig {
                 minSdkVersion 14 //lower than 14 doesn't support multidex
                 targetSdkVersion 22
                 // Enabling multidex support.
                 multiDexEnabled true
             }
    }
    dependencies {
        compile 'com.android.support:multidex:1.0.1'
    }
    

    希望对你有帮助:)

    【讨论】:

    • 您能否详细解释一下这将如何解决问题?
    • @Code-Apprentice 在 Logcat 我看到了 dex 错误,所以启用了 multidex 解决了这个问题。如果有错请告诉我
    • 为什么multidex会解决问题?您应该引用您认为重要的错误部分并解释导致问题的原因。这将帮助其他人了解您的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 2013-01-07
    • 2022-07-13
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多