启用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 android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7331)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
我也使用
初始化了Cpp类static {
System.loadLibrary("baseUrl");
}
如果我禁用了proguard,它将正常工作。启用proguard就是这种情况。
答案 0 :(得分:1)
就像@Botje所建议的那样,看来您的问题是Java端的本地名称和方法的定义不同步。
您的public native String myMethod();
被ProGuard更改为public native String b();
,但是您的本机实现保留了原始名称。这就是Java运行时找不到它的原因。
您需要将以下内容添加到ProGuard文件中:
-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
}
请不要将此答案标记为解决方案,因为它是@Botje附带的(我只是进一步解释了此问题)。
@Botje请添加您自己的答案,以便他可以将其标记为解决方案。