Я получаю следующую ошибку, когда я включаю 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 включен.
@Botje, потому что proguard включен
Да, из вашего вопроса это было неясно. Вы пробовали мое предложение?
@Botje, пожалуйста, посмотрите мой ответ, особенно последнее предложение :)
Эх, я предположил, что они попробовали то, что было в ссылке, и не смогли заставить это работать. Вы заслуживаете похвалы за то, что напечатали, что на самом деле сделало волшебное заклинание ProGuard.




Как предполагает @Botje, проблема в вашем случае заключается в том, что собственное имя и определение вашего метода на стороне Java, так сказать, не синхронизируются.
ProGuard заменяет ваш public native String myMethod(); на public native String b();, но ваша собственная реализация сохраняет исходное имя. Вот почему среда выполнения Java не может его найти.
Вам необходимо добавить в файл ProGuard следующее:
-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
}
Пожалуйста, НЕ отмечайте этот ответ как решение, так как с ним пришел @Botje (я только что немного развил объяснение).
@Botje, пожалуйста, добавьте свой ответ, чтобы он мог пометить его как решение.
Предположительно настоящее название вашего метода было не "com.osolutions.otv.utilities.al.b"?