Netty 3.4.1.Final在Android上不起作用 [英] Netty 3.4.1.Final does not work on Android

查看:78
本文介绍了Netty 3.4.1.Final在Android上不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

昨天我试图从3.3.2最终快照升级到最新版本.但是,由于以下错误,它在Android上失败:

  • /AndroidRuntime(720):致命异常:主要 E/AndroidRuntime(720):java.lang.NoClassDefFoundError:java.util.concurrent.LinkedTransferQueue E/AndroidRuntime(720):位于org.jboss.netty.util.internal.QueueFactory.createQueue(QueueFactory.java:48)

事实证明,在Android(这是2.3)上,DetecationUtil.javaVersion()返回7,因为Deflater类包含字段SYNC_FLUSH.以下是Deflater.getDeclaredFields()的所有字段.

04-25 08:08:51.305:I/System.out(25674):[公共静态最终int java.util.zip.Deflater.BEST_COMPRESSION,公共静态最终int java.util.zip.Deflater.BEST_SPEED,公共静态最终int java.util.zip.Deflater.DEFAULT_COMPRESSION,公共静态最终int java.util.zip.Deflater.DEFAULT_STRATEGY,公共静态最终int java.util.zip.Deflater.DEFLATED,公共静态最终int java.util. zip.Deflater.FILTERED,私有静态最终int java.util.zip.Deflater.FINISH,公共静态最终int java.util.zip.Deflater.FULL_FLUSH,公共静态最终int java.util.zip.Deflater.HUFFMAN_ONLY,公共静态final int java.util.zip.Deflater.NO_COMPRESSION,公共静态final int java.util.zip.Deflater.NO_FLUSH,私有静态final [B java.util.zip.Deflater.STUB_INPUT_BUFFER,public static final int java.util.zip .Deflater.SYNC_FLUSH,私有[B java.util.zip.Deflater.inputBuffer,私有布尔型java.util.zip.Deflater.finished,私有long java.util.zip.Deflater.streamHandle,私有int java. util.zip.Deflater.inLength,私有int java.util.zip.Deflater.inRead,私有int java.util.zip.Deflater.compressLevel,私有int java.util.zip.Deflater.strategy,私有int java.util. zip.Deflater.flushParm]

还有其他方法可以解决此问题,使其可以在Android平台上运行吗?我还没有调查(尚未...).如果android是一个应受支持的平台,也许我们还可以检查android特定的类?

可以将类似的东西添加到DetectionUtil中的int javaVersion0()中:

try {
        Class.forName("android.app.Application");
        return 5;
    } catch (ClassNotFoundException e) {
        //Ignore
    }

亲切的问候/约翰·拉斯克(Johan Rask)

解决方案

请在netty的问题跟踪器中打开一个问题.我将确保我们在下周发布的下一个版本中进行处理.

请参阅问题跟踪器[1].

[1] https://github.com/netty/netty/issues

Yesterday I tried to upgrade from 3.3.2.Final-SNAPSHOT to latest release. However, it fails on Android due to the following error:

  • /AndroidRuntime( 720): FATAL EXCEPTION: main E/AndroidRuntime( 720): java.lang.NoClassDefFoundError: java.util.concurrent.LinkedTransferQueue E/AndroidRuntime( 720): at org.jboss.netty.util.internal.QueueFactory.createQueue(QueueFactory.java:48)

It turns out that on Android (this is 2.3), DetecationUtil.javaVersion() returns 7 since the Deflater class contains the field SYNC_FLUSH. Below are all fields Deflater.getDeclaredFields().

04-25 08:08:51.305: I/System.out(25674): [public static final int java.util.zip.Deflater.BEST_COMPRESSION, public static final int java.util.zip.Deflater.BEST_SPEED, public static final int java.util.zip.Deflater.DEFAULT_COMPRESSION, public static final int java.util.zip.Deflater.DEFAULT_STRATEGY, public static final int java.util.zip.Deflater.DEFLATED, public static final int java.util.zip.Deflater.FILTERED, private static final int java.util.zip.Deflater.FINISH, public static final int java.util.zip.Deflater.FULL_FLUSH, public static final int java.util.zip.Deflater.HUFFMAN_ONLY, public static final int java.util.zip.Deflater.NO_COMPRESSION, public static final int java.util.zip.Deflater.NO_FLUSH, private static final [B java.util.zip.Deflater.STUB_INPUT_BUFFER, public static final int java.util.zip.Deflater.SYNC_FLUSH, private [B java.util.zip.Deflater.inputBuffer, private boolean java.util.zip.Deflater.finished, private long java.util.zip.Deflater.streamHandle, private int java.util.zip.Deflater.inLength, private int java.util.zip.Deflater.inRead, private int java.util.zip.Deflater.compressLevel, private int java.util.zip.Deflater.strategy, private int java.util.zip.Deflater.flushParm]

Is there any other way that this could be solved so it can work on Android platform? I have not looked into that (yet...). IF android is a platform that should be supported maybe we could also check for android specific classes?

Something like this could be added to int javaVersion0() in DetectionUtil:

try {
        Class.forName("android.app.Application");
        return 5;
    } catch (ClassNotFoundException e) {
        //Ignore
    }

Kind regards /Johan Rask

解决方案

Please open a issue in the issue tracker of netty. I will make sure we handle it in the next release which should be out next week.

See issue tracker is here [1].

[1] https://github.com/netty/netty/issues

这篇关于Netty 3.4.1.Final在Android上不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆