有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓 java。lang.UnsatifiedLinkError:找不到java的实现。启用proguard时的lang.字符串

当我启用proguard时,出现以下错误

java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String com.osolutions.otv.utilities.al.b() (tried Java_com_osolutions_otv_utilities_al_b and Java_com_osolutions_otv_utilities_al_b__)
   at com.osolutions.otv.utilities.al.b(Native Method)
   at com.osolutions.otv.utilities.al.<clinit>(Unknown Source)
   at com.osolutions.otv.activity.SplashScreenActivity.a(Unknown Source)
   at com.osolutions.otv.activity.y.run(Unknown Source)
   at 安卓.os.Handler.handleCallback(Handler.java:739)
   at 安卓.os.Handler.dispatchMessage(Handler.java:95)
   at 安卓.os.Looper.loop(Looper.java:148)
   at 安卓.app.ActivityThread.main(ActivityThread.java:7331)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
   at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

我还使用

static {
     System.loadLibrary("baseUrl");
}

如果我禁用proguard,它可以正常工作。这是启用proguard时的情况


共 (1) 个答案

  1. # 1 楼答案

    正如@Botje所建议的,您的案例中的问题似乎是Java端的本地名称和方法定义不同步

    ProGuard会将public native String myMethod();更改为public native String b();,但本机实现保留原始名称。这就是Java运行时找不到它的原因

    您需要将以下内容添加到ProGuard文件中:

    -keepclasseswithmembernames,includedescriptorclasses class * {
        native <methods>;
    }
    

    请不要将这个答案标记为解决方案,因为是@Botje带来的(我只是进一步解释了一下)

    @Botje请添加您自己的答案,以便他将其标记为解决方案