Библиотека Netty не работает в Android версии apk?

#android #netty

#Android #netty

Вопрос:

Я создал прокси-сервер с netty на Android, используя коды, доступные на netty GitHub, например, на самом деле, я просто копирую их и использую в Android. вот пример прокси-сервера netty:https://github.com/netty/netty/tree/4.0/example/src/main/java/io/netty/example/proxy Теперь я столкнулся с двумя проблемами: первый netty не работает должным образом при первом запуске, но после закрытия приложения и повторного открытия оно работает хорошо, я не знаю, почему при первом запуске оно не работает. 2. netty не работает в режиме выпуска, и когда я проверяю журналы, я вижу эту ошибку

 Rejecting re-init on previously-failed class java.lang.Class<g.b.b.k>: java.lang.ExceptionInInitializerError: 
        at void g.b.b.m.<clinit>() (ByteBufUtil.java:82)
        at void g.b.b.k.<clinit>() (ByteBufAllocator.java:24)
        at void g.b.c.f0.<init>(g.b.c.e, g.b.c.y0) (DefaultChannelConfig.java:59)
        at void g.b.c.f0.<init>(g.b.c.e) (DefaultChannelConfig.java:72)
        at void g.b.c.i1.e.<init>(g.b.c.i1.g, java.net.ServerSocket) (DefaultServerSocketChannelConfig.java:50)
        at void g.b.c.i1.k.b$b.<init>(g.b.c.i1.k.b, g.b.c.i1.k.b, java.net.ServerSocket) (NioServerSocketChannel.java:201)
        at void g.b.c.i1.k.b$b.<init>(g.b.c.i1.k.b, g.b.c.i1.k.b, java.net.ServerSocket, g.b.c.i1.k.b$a) (NioServerSocketChannel.java:199)
        at void g.b.c.i1.k.b.<init>(java.nio.channels.ServerSocketChannel) (NioServerSocketChannel.java:90)
        at void g.b.c.i1.k.b.<init>() (NioServerSocketChannel.java:75)
        at java.lang.Object java.lang.reflect.Constructor.newInstance0(java.lang.Object[]) (Constructor.java:-2)
        at java.lang.Object java.lang.reflect.Constructor.newInstance(java.lang.Object[]) (Constructor.java:343)
        at g.b.c.e g.b.c.z0.a() (ReflectiveChannelFactory.java:44)
        at g.b.c.j g.b.a.a.v() (AbstractBootstrap.java:310)
        at g.b.c.j g.b.a.a.o(java.net.SocketAddress) (AbstractBootstrap.java:272)
        at g.b.c.j g.b.a.a.g(java.net.SocketAddress) (AbstractBootstrap.java:268)
        at g.b.c.j g.b.a.a.e(int) (AbstractBootstrap.java:246)
        at void d.a.a.f.d.run() (MainProxyServer.java:55)
        at void d.a.a.j.j$c$a.a(m.a.a.a) (Main.kt:115)
        at java.lang.Object d.a.a.j.j$c$a.invoke(java.lang.Object) (Main.kt:94)
        at void m.a.a.b$a.a() (Async.kt:138)
        at java.lang.Object m.a.a.b$a.invoke() (Async.kt:-1)
        at java.lang.Object m.a.a.c.call() (Async.kt:-1)
        at void java.util.concurrent.FutureTask.run() (FutureTask.java:266)
        at void java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run() (ScheduledThreadPoolExecutor.java:301)
        at void java.util.concurrent.ThreadPoolExecutor.runWorker(java.util.concurrent.ThreadPoolExecutor$Worker) (ThreadPoolExecutor.java:1167)
        at void java.util.concurrent.ThreadPoolExecutor$Worker.run() (ThreadPoolExecutor.java:641)
        at void java.lang.Thread.run() (Thread.java:919)
  

но она хорошо работает в режиме отладки.

Комментарии:

1. Я выполняю ту же работу, что и вы, я нашел этот код ( github.com/monkeyWie/proxyee ), и я изменил некоторые коды, чтобы она могла работать на Android, ошибки не происходит, но другое устройство не может связаться с этим прокси-сервером. Можете ли вы дать мне какую-нибудь идею, чтобы разобраться в этом?

Ответ №1:

о первой проблеме, возможно, вам нужно добавить ProviderInstaller в ваше приложение, потому что некоторые версии Android, такие как Android 5, похоже, не могут обрабатывать SSL, но, добавив это, я думаю, проблема будет устранена.

Ответ №2:

Что касается второй проблемы, есть 2 варианта ее решения:

  1. просто добавьте -keep class io.netty.**{*;} в файл с именем proguard-rules.pro в этом модуле.

  2. отключите путаницу кода, измените файл с именем build.gradle в этом модуле следующим образом:

 .....
buildTypes {
....
      release {
          minifyEnabled false
          .....
      }
....
}
....
  

Выберите один в вашем состоянии.

Комментарии:

1. Пожалуйста, добавляйте любые дополнительные вопросы в комментариях или в качестве нового вопроса.

2. @Yatin что? почему вы можете отредактировать мой ответ? я тоже хочу эти полномочия… я просто сказал это, потому что, возможно, он может дать мне несколько идей в общении. кстати, я чувствую неуважение, потому что вы редактируете мой контент по своему усмотрению.

3. Здравствуйте, в мои намерения не входило проявлять к вам неуважение. Ответы не для дальнейших разъяснений. Вы можете задать эти вопросы в комментариях. Я восстановил ваш ответ в его первоначальном виде.

4. @Yatin На самом деле не нужно все откатывать. Ваша грамматика и формат лучше. Я разумный человек, могу принять критику. Было бы достаточно вернуть мой вопрос, если все в порядке.

5. И теперь я знаю, что в следующий раз буду задавать вопросы в комментарии.