启用 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)
Run Code Online (Sandbox Code Playgroud)
我也使用初始化了 Cpp 类
static {
System.loadLibrary("baseUrl");
}
Run Code Online (Sandbox Code Playgroud)
如果我禁用 proguard 它工作正常。启用 proguard 时就是这种情况。
正如@Botje 所暗示的那样,您的情况似乎问题在于 Java 端的本机名称和方法定义不同步,可以这么说。
您public native String myMethod();被public native String b();ProGuard更改为,但您的本机实现保留原始名称。这就是 Java 运行时找不到它的原因。
您需要将以下内容添加到您的 ProGuard 文件中:
-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
}
Run Code Online (Sandbox Code Playgroud)
请不要将此答案标记为解决方案,因为它是@Botje 带来的(我只是进一步发展了解释)。
@Botje 请添加您自己的答案,以便他可以将其标记为解决方案。
| 归档时间: |
|
| 查看次数: |
2225 次 |
| 最近记录: |