代码之家  ›  专栏  ›  技术社区  ›  tir38

Android Gradle Plugin test apk builder会自动为我的测试apk建立多索引吗?如果是这样,为什么会产生“NoSuchMethodError”

  •  2
  • tir38  · 技术社区  · 6 年前

    这一切都始于运行检测测试时的以下错误:

    java.lang.NoSuchMethodError: No static method closeQuietly(Ljava/net/ServerSocket;)V in class Lokhttp3/internal/Util; or its super classes (declaration of 'okhttp3.internal.Util' appears in /data/app/com.example-vKdPJoTLl49ntRbZfsRBqQ==/base.apk!classes2.dex)
    at okhttp3.mockwebserver.MockWebServer$2.execute(MockWebServer.java:333)
    at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)
    

    我注意到的第一件事是测试apk有两个 .dex

    classes.dex classes2.dex

    此外,我在中看到了“missing”方法 第一 德克斯。

    为什么它被列为“引用”而不是“定义”的方法?又不是说有什么好消息 Util 框架提供的类。

    classes2.dex . 为什么要在classes2.dex中查找?为什么不两个都看呢?

    一切

    更新:

    原来这个方法在我的app.apk(不是test.apk)中是需要的。当我更新应用程序apk的proguard规则时,一切正常。我还是不知道为什么应用程序中需要这个类?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Community prosti    4 年前

    java.lang.NoSuchMethodError错误 :

    closeQuietly(java.net.ServerSocket )课堂上 okhttp3.internal.Util

    方法 closeQuietly(java.net.ServerSocket) 可能没有使用。

    -keep class okhttp3.internal.Util {
        public static void closeQuietly(java.net.ServerSocket);
    }
    
        2
  •  0
  •   tir38    5 年前

    我不知道我怎么会不知道这一点,但显然多索引是在API 21上默认启用的+

    https://developer.android.com/studio/build/multidex#mdex-on-l

    默认情况下,您不需要multidex支持库。

    所以是的,这很正常。可能发生的情况是类不在第一个dex文件中。

    推荐文章