Как вы извлекаете Android собственные файлы "* jni.so" (например, "arm64-v8a" и т. Д.) С помощью gradle, например, при попытке использовать mapsforge-vtm? - PullRequest
0 голосов
/ 06 апреля 2020

Я создал небольшое приложение с Android Activity, которое использует библиотеку карт mapsforge-vtm , чтобы показать автономную карту с помощью файла mapsforge.

Эти две зависимости были необходимы в моем файле build.gradle:

implementation 'org.mapsforge:vtm-android:0.13.0'
implementation 'org.mapsforge:vtm-themes:0.13.0'

Когда я впервые попытался запустить приложение, оно не удалось с UnsatisfiedLinkError 'не смог найти "libvtm-jni.so"' После некоторого поиска в Google мне удалось работать обойти эту проблему вручную (но действительно ли это необходимо?), скопировав кучу файлов (см. далее), а затем добавив следующее в мой build.gradle:

android {
    ...

    defaultConfig {
        ...

    buildTypes {
        ...

    sourceSets {
        main {
            file("natives").eachDir() { dir ->
                jniLibs.srcDirs += "${dir.path}/lib"
            }
        }
    }

Это были файлы (в пределах эти каталоги) Я скопировал, чтобы заставить его работать:

https://github.com/mapsforge/vtm/tree/master/vtm-android/natives

Оттуда я скопировал весь каталог содержимого "natives" из URL выше в "natives" "directory in my" app "directory.

Мой вопрос заключается в том, как сделать это лучше, без необходимости копировать файлы вручную, как я сделал?

Я имею в виду файлы, которые я скопировал кажется, существует в хранилище Maven вместе с "vtm- android -0.13.0.jar", который я добавил с одной из моих зависимостей gradle. Вы можете увидеть его здесь:

https://repo1.maven.org/maven2/org/mapsforge/vtm-android/0.13.0/

По вышеуказанной ссылке вы можете найти файл "vtm- android -0.13.0.jar", но также нативные файлы, например "vtm- android -0.13.0-natives-arm64-v8a.jar". Если вы скачаете этот jar-файл natives и откроете его, например, с помощью 7-Zip, вы увидите, что внутри него находится «libvtm-jni.so».

Итак, поскольку там есть файлы natives, я полагаю, должен быть какой-то хороший способ их автоматического извлечения вместо того, чтобы вручную копировать файлы, как я сделал?

...