Я прочитал много тем, как добавить библиотеку * .so в Android Studio, но ни один из них не работает, особенно когда дело доходит до текста: это не работает с более новым xxx (Android Studio, gradle, ...)
Можем ли мы начать сначала, пожалуйста. Я получил:
Android Studio 0.6.0
Из структуры проекта я вижу:
Расположение SDK:
/usr/share/android-studio/data/sdk
/usr/lib/jvm/default-java
Проект:
Gradle version 1.10
Android Plugin Version 0.11.+
Модули / приложение: Свойства:
Compile Sdk Version 19 Инструменты сборки версии 19.1.0
зависимости:
{dir=libs, include=[*.jar]} Compile
{dir=libs, include=[*.so]} Provided
m com.android.support: appcompat -v7:19.+ Compile
Я предварительно скомпилировал файлы * .so, и в демонстрационном приложении они работают. Мне нужно изменить исходный код приложения, поэтому мне нужно перестроить с теми же файлами * .so.
android
android-studio
Рональд Виплингер
источник
источник
Ответы:
Текущее решение
Создайте папку
project/app/src/main/jniLibs
, а затем поместите свои*.so
файлы в их папки abi в этом месте. Например,Устаревшее решение
Добавьте оба фрагмента кода в файл gradle.build вашего модуля в качестве зависимости:
Как создать эту кастомную банку:
Тот же ответ также можно найти в связанном вопросе: Включить библиотеку .so в apk в студии Android
источник
Compile
задача устарела. ИспользоватьJavaCompile
вместо (из связанных ответов)jniLibs
путь к каталогу в Руководстве пользователя плагина Gradle - Структура проектаДобавление библиотеки .so в Android Studio 1.0.2
| --app:
| - | --src:
| - | - | --main
| - | - | - | --jniLibs
| - | - | - | - | --armeabi
| - | - | - | - | - | -. Так Файлы
| - | - | - | - | --x86
| - | - | - | - | - | -. so Файлы
Ссылка
https://github.com/commonsguy/sqlcipher-gradle/tree/master/src/main
источник
Решение 1. Создание папки JniLibs
Создайте папку с именем «jniLibs» в своем приложении и папки, содержащие ваши * .so внутри. Папку «jniLibs» необходимо создать в той же папке, что и папки «Java» или «Assets».
Решение 2. Модификация файла build.gradle
Если вы не хотите создавать новую папку и хранить свои файлы * .so в папке libs, это возможно!
В этом случае просто добавьте свои файлы * .so в папку libs (пожалуйста, соблюдайте ту же архитектуру, что и решение 1: например, libs / armeabi / .so) и измените файл build.gradle вашего приложения, чтобы добавить исходный каталог файлов jniLibs.
У вас будет больше объяснений со скриншотами, которые помогут вам здесь (шаг 6):
http://blog.guillaumeagis.eu/setup-andengine-with-android-studio/
EDIT Это должно было быть jniLibs.srcDirs, а не jni.srcDirs - редактировать код. Каталог может быть [относительным] путем, указывающим за пределы каталога проекта.
источник
source Sets {
код вandroid {
разделе* .so библиотека в Android Studio
Вам нужно создать папку jniLibs внутри main в проектах Android Studio и поместить все ваши файлы .so внутрь. Вы также можете интегрировать эту строку в build.gradle
скомпилировать fileTree (dir: 'libs', include: [' .jar', ' .so'])
Это работает отлично
| --App:
| - | --src:
| - | - | --main
| - | - | - | --jniLibs
| - | - | - | - | --armeabi
| - | - | - | - | - | -. so Файлы
Это структура проекта.
источник
Это мой файл build.gradle, обратите внимание на строку
Это будет включать файл * .so libs в apk.
источник
Официальный
hello-libs
пример CMake Android NDKhttps://github.com/googlesamples/android-ndk/tree/840858984e1bb8a7fab37c1b7c571efbe7d6eb75/hello-libs
Просто работал у меня на хосте Ubuntu 17.10, Android Studio 3, Android SDK 26, поэтому я настоятельно рекомендую вам основывать свой проект на нем.
Общая библиотека называется
libgperf
, ключевые части кода:hello-libs / app / src / main / cpp / CMakeLists.txt :
приложение / build.gradle :
Затем, если вы посмотрите
/data/app
на устройство, оноlibgperf.so
тоже будет там.в коде C ++ используйте:
#include <gperf.h>
расположение заголовка:
hello-libs/distribution/gperf/include/gperf.h
расположение библиотеки:
distribution/gperf/lib/arm64-v8a/libgperf.so
Если вы поддерживаете только некоторые архитектуры, см .: Gradle Build NDK таргетинг только на ARM
Пример git отслеживает предварительно созданные общие библиотеки, но он также содержит систему сборки для их фактического создания: https://github.com/googlesamples/android-ndk/tree/840858984e1bb8a7fab37c1b7c571efbe7d6eb75/hello-libs/gen-libs
источник
Для использования native-библиотеки (so files) вам необходимо добавить несколько кодов в файл "build.gradle".
Этот код предназначен для очистки каталога «armeabi» и копирования файлов «so» в «armeabi» во время «чистого проекта».
Я получил ссылку снизу. https://gist.github.com/pocmo/6461138
источник
Я решил аналогичную проблему, используя внешние собственные зависимости lib, которые упакованы внутри файлов jar. Иногда эти зависящие от архитектуры библиотеки упаковываются целиком внутри одного jar-файла, иногда они разделяются на несколько jar-файлов. поэтому я написал скрипт сборки для сканирования зависимостей jar для нативных библиотек и сортировки их по нужным папкам android lib. Кроме того, это также обеспечивает способ загрузки зависимостей, которых нет в репозиториях maven, что в настоящее время полезно для работы JNA на android, поскольку не все собственные jar-файлы публикуются в общедоступных репозиториях maven.
источник
Я пробовал решения в приведенных выше ответах, но ни один из них не помог мне. У меня была библиотека с файлами .so, .dll и .jar. В конце концов, я сделал это, подробности можно увидеть здесь: https://stackoverflow.com/a/54976458/7392868
Я копирую вставленные файлы .so в папку с именем jniLibs и вставляю их в папку app / src / main /. Для других зависимостей я использовал зависимости классов.
источник