JNIEnv FindClass () не может найти пакет / класс, который является частью библиотеки привязки Xamarin Android - PullRequest
1 голос
/ 30 июня 2019

Я пытаюсь вызвать функцию Kotlin из C ++ через JNI.

Функция Kotlin находится в классе, который является частью библиотеки Android Binding, подключенной к приложению Xamarin.

Код C ++ находится в собственной библиотеке того же приложения Xamarin.

Я вызываю FindClass () с этой строкой кода:

 jclass classObj = m_env->FindClass("de/companyname/packagename/MyKotlinClass");

m_env является допустимым указателем на среду JNI (например, я могу успешно найти стандартные классы библиотеки Java).Вышеприведенная строка кода завершается с

java.lang.ClassNotFoundException: не найден класс "de / companyname / packagename / MyKotlinClass" по пути: DexPathList [[directory "."], NativeLibraryDirectories =[/ vendor / lib, / system / lib]]

В файле classes.dex apk со знаком я вижу MyKotlinClass с правильным путем.Но почему-то JNI не может его найти.

Это потому, что класс Kotlin является частью AAR, который включен в библиотеку привязок Android?Что я могу сделать, чтобы JNI нашел свой класс?

1 Ответ

0 голосов
/ 03 июля 2019

Я нашел решение, вызвав FindClass () из кода C ++, который включен в AAR в библиотеке привязок Android . Затем я могу вызвать этот C ++ из моего основного модуля C ++, используя dlopen.

Это хорошее решение для меня, потому что я контролирую содержимое AAR. Если у вас есть сторонний AAR, я думаю, он также будет работать, если вы добавите отдельный файл C ++ .so в свою библиотеку привязок Android, но я не тестировал этот сценарий.

...