Почему FindLibrary возвращает 0?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Почему FindLibrary возвращает 0?

Сообщение Anonymous »


Я пытаюсь создать лаунчер для SAMP Android. Все шло хорошо до интеграции самого SAMP (сборка69). libsamp.so не может найти адрес соседней библиотеки libGTASA.so.

Инициализация всех библиотек (Java)

статический { vmVersion = ноль; System.out.println("**** Загрузка SO"); пытаться { vmVersion = System.getProperty("java.vm.version"); System.out.println("vmVersion " + vmVersion); System.out.println("**** Загрузка libImmEmulatorJ.so"); System.loadLibrary("ImmEmulatorJ"); } catch (ExceptionInInitializerError | UnsatisfiedLinkError e) { } System.out.println("**** Загрузка libGTASA.so"); System.loadLibrary("GTASA"); System.out.println("**** Загрузка libsamp.so"); System.loadLibrary("самп"); } Найти библиотеку в libsamp.so (C++ JNI)

jint JNI_OnLoad(JavaVM *vm, void *зарезервировано) { Log("Библиотека SAMP загружена! Время сборки: " __DATE__ " " __TIME__); g_libGTASA = FindLibrary("libGTASA.so"); если (g_libGTASA == 0) { Log("ОШИБКА: адрес libGTASA.so не найден!"); вернуть 0; } Log("Базовый адрес образа libGTASA.so: 0x%X", g_libGTASA); Сранд (время (0)); InitHookStuff(); InitRenderWareFunctions(); УстановитьСпециальныеХуки(); pthread_t поток; pthread_create(&thread, 0, Init, 0); составить акт о сигакте; act.sa_sigaction = обработчик; sigemptyset(&act.sa_mask); act.sa_flags = SA_SIGINFO; sigaction(SIGSEGV, &act, 0); вернуть JNI_VERSION_1_4; } Найтибиблиотеку:

uintptr_t FindLibrary(библиотека const char*) { символьное имя файла[0xFF] = {0}, буфер[2048] = {0}; ФАЙЛ *fp = 0; адрес uintptr_t = 0; sprintf(имя файла, "/proc/%d/maps", getpid() ); fp = fopen(имя файла, "rt" ); если (фп == 0) { Log("ОШИБКА: невозможно открыть файл %s", filename); идти готово; } while(fgets(буфер, sizeof(буфер), fp)) { if( strstr(буфер, библиотека) ) { адрес = (uintptr_t)strtoul(буфер, 0, 16); перерыв; } } сделанный: если (фп) fзакрыть (фп); обратный адрес; } Журнал приложения:

2023-10-28 14:57:32.800 29054-29054 System.out com.kalinovka.game Я **** Загрузка ТАК 2023-10-28 14:57:32.800 29054-29054 System.out com.kalinovka.game I vmVersion 2.1.0 2023-10-28 14:57:32.800 29054-29054 System.out com.kalinovka.game I **** Загрузка libImmEmulatorJ.so 2023-10-28 14:57:32.804 29054-29054 System.out com.kalinovka.game I **** Загрузка libGTASA.so 2023-10-28 14:57:32.813 29054-29054 NVEvent com.kalinovka.game D Вызывается JNI_OnLoad 2023-10-28 14:57:32.813 29054-29054 NVEvent com.kalinovka.game D РегистрацияNatives 12 2023-10-28 14:57:32.813 29054-29054 System.out com.kalinovka.game I **** Загрузка libsamp.so 2023-10-28 14:57:32.815 29054-29054 AXL com.kalinovka.game У меня библиотека SAMP загружена! Время сборки: 28 октября 2023 г., 14:47:20. 2023-10-28 14:57:32.819 29054-29054 AXL com.kalinovka.game У меня ОШИБКА: адрес libGTASA.so не найден! 2023-10-28 14:57:32.820 29054-29054 AndroidRuntime com.kalinovka.game D Выключение ВМ 2023-10-28 14:57:32.823 29054-29054 AndroidRuntime com.kalinovka.game E FATAL Exception: main Процесс: com.kalinovka.game, PID: 29054 java.lang.UnsatisfiedLinkError: из JNI_OnLoad возвращена неверная версия JNI в "/data/app/~~AIt22YvJlsdkRyH_N_WAEw==/com.kalinovka.game-G93aBwDihlPGnVBadiHFkQ==/base.apk!/lib/armeabi-v7a/libsamp.so" : 0 в java.lang.Runtime.loadLibrary0(Runtime.java:1082) в java.lang.Runtime.loadLibrary0(Runtime.java:1003) в java.lang.System.loadLibrary(System.java:1661) по адресу com.kalinovka.game.core.GTASA.(GTASA.java:28) в java.lang.Class.newInstance(собственный метод) в android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95) в androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45) в android.app.Instrumentation.newActivity(Instrumentation.java:1287) в android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3701) в android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3977) в android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:109) в android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:135) в android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) в android.app.ActivityThread$H.handleMessage(ActivityThread.java:2374) в android.os.Handler.dispatchMessage(Handler.java:106) в android.os.Looper.loopOnce(Looper.java:233) в android.os.Looper.loop(Looper.java:344) в android.app.ActivityThread.main(ActivityThread.java:8249) в java.lang.reflect.Method.invoke (собственный метод) по адресу com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:589) на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1071) 2023-10-28 14:57:32.894 29054-29054 Процесс com.kalinovka.game Отправляю сигнал. ПИД: 29054 СИГНАЛ: 9 Ошибка: из JNI_OnLoad возвращена неверная версия JNI — поскольку libsamp.so отправил 0, вы можете игнорировать это

Я удалил все ссылки на libsamp.so и приложение работает, сама GTASA инициализируется по id, это значит, что libGTASA.so загружена и работает.

Я изменил имя библиотеки в FindLibrary, она тоже вернула ноль. Указывает на проблему с доступом на уровне Android API.

Нашел такую ​​же проблему на русскоязычном сайте, но решения не было, но в вопросе было указано, что эта ошибка возникает только на Android API 30+
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»