Ошибка поиска собственной библиотеки (libjnidispatch.so) с использованием jna для доступа к файлу .so

Обратите внимание, что этот вопрос является продолжением вопроса Другой вопрос, который я задал здесь некоторое время назад.

Чего бы я хотел добиться?

Я хотел бы использовать JNA (версия 4.5.2 с Android Studio) для достижения следующих целей:

  1. Сначала я хотел бы получить список всех вызываемых функций из данного файла .so.
  2. Когда у меня есть этот список, я хотел бы вызвать определенную функцию

Что я делал до сих пор?

Пока что код файла MainActivita.java моего тестового приложения выглядит следующим образом:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String MyLibraryString = MyLibrary.Instance.toString();
    }

    public interface MyLibrary extends Library
    {
        MyLibrary Instance = (MyLibrary ) Native.loadLibrary("nameOfMyLibraryWithoutSoExtension", MyLibrary.class);
    }
}

С какими проблемами я столкнулся?

Раньше я получал сообщение об ошибке, что моя библиотека не найдена на моем устройстве Android, но после помещения ее в подпапку «jniLibs» мое приложение, похоже, может ее обнаружить. К сожалению, теперь я получаю сообщение об ошибке

java.lang.UnsatisfiedLinkError: Native library (com/sun/jna/android-aarch64/libjnidispatch.so) not found in resource path (.)

всякий раз, когда я пытаюсь запустить приложение на своем устройстве. Я уже пытался извлечь файл "libjnidispatch.so" из файла JNA.jar и поместить его в соответствующие подпапки (как описано здесь), но это не сработало.

Структура подпапки "app \ src \ main \ jniLibs" моего приложения выглядит следующим образом:

app\src\main\jniLibs\arm64-v8a\myLibrary.so 
... 
app\src\main\jniLibs\arm64-v8a\libjnidispatch.so

app\src\main\jniLibs\armeabi\myLibrary.so 
... 
app\src\main\jniLibs\armeabi\libjnidispatch.so

app\src\main\jniLibs\armeabi-v7a\myLibrary.so 
... 
app\src\main\jniLibs\armeabi-v7a\libjnidispatch.so

app\src\main\jniLibs\mips\myLibrary.so 
... 
app\src\main\jniLibs\mips\libjnidispatch.so

app\src\main\jniLibs\mips64\myLibrary.so 
... 
app\src\main\jniLibs\mips64\libjnidispatch.so

app\src\main\jniLibs\x86\myLibrary.so 
... 
app\src\main\jniLibs\x86\libjnidispatch.so

app\src\main\jniLibs\x86_64\myLibrary.so 
... 
app\src\main\jniLibs\x86_64\libjnidispatch.so

Любая помощь будет высоко оценен.

Android предъявляет особые требования к любым библиотекам JNI, загружаемым в ваше приложение. Установите свойство jna.debug_load.jna=true, чтобы увидеть, где JNA ищет библиотеку jnidispatch. В качестве первой попытки он использует System.loadLibrary("jnidispatch"). Также убедитесь, что у вас есть libjnidispatch.so для правильной архитектуры.

technomage 13.08.2018 20:31

Большое спасибо за ваш комментарий. Я включил это свойство через "System.setProperty (" jna.debug_load.jna "," true ");". К сожалению, я не могу найти в logcat сообщений, связанных с jnidispatch. Это единственное сообщение, которое я могу получить при поиске «jni»: «10734-10734 /? I / art: Late-enable -Xcheck: jni»

Hagbard 14.08.2018 15:39

Вам нужно будет проверить, куда Android перенаправляет stdout / stderr для процесса Java.

technomage 24.08.2018 17:22
0
3
758
0

Другие вопросы по теме