Android include so library

How to Include *.so Library in Android Studio?

The SO file stands for Shared Library. You compile all C++ code into the.SO file when you write it in C or C++. The SO file is a shared object library that may be dynamically loaded during Android runtime. Library files are larger, often ranging from 2MB to 10MB in size. As a result, the app becomes bloated. Another thing to keep in mind is that several.SO files need to be included in the APK to support several architectures such as armeabi and x86. .so files are the ABI Files, ABI stands for Application Binary Interface. The ABI specifies how your app’s machine code should communicate with the OS during execution. The NDK is a software development kit. As a result, files are compared to these definitions.

Including the .so files in the Android Studio Project

So what if you want to include some .so files in your Android App or Android Project, well there are several ways to do that, but we will be finding out the perfect ones that can help you get the library included in no time! Keep on reading this article!

Method #1: Creating the JniLibs folder

Create a folder called “jniLibs” in your app, along with the directories that contain your *.so. The “jniLibs” folder should be established alongside your “Java” and “Assets” directories.

Method #2: Modification of the build.gradle file

It is feasible to avoid creating a new folder and maintain your *.so files in the libs folder! In that case, just place your *.so files in the libs folder (following the same architecture as Solution 1: libs/armeabi/.so, for example) and update your app’s build.gradle file to include the jniLibs source directory.

Method #3: Putting files within ABI Folder

Put your .so files in the libs folder as shown in the folder to add them

Figure 1. Understanding the Structure of the .jar & so file

Then add this code to your project

Method #4: Cleaning and Adding to “armeabi”

Method #5: Using the ABI Filters

If you’re using Android Studio 4.1.2, and have tried to specify the NDK

Источник

Как включить *.so библиотеку в Android Studio?

Я прочитал много потоков, как добавить библиотеку *.so в Android Studio, но никто из них не работает, особенно когда дело доходит до точки текста: это не работает с новым xxx (Android Studio, gradle. )

Мы можем начать с нуля. Я получил:

Android Studio 0.6.0

Из структуры проекта я вижу:

Скомпилируйте Sdk Version 19 Build Tools Версия 19.1.0

Я получил файлы *.so, предварительно скомпилированные, и в демонстрационном приложении они работают. Я должен изменить исходный код приложения, поэтому мне нужно перестроить с теми же файлами *.so.

ОТВЕТЫ

Ответ 1

Создайте новую папку project/app/src/main/jniLibs , а затем поместите ваши файлы *.so со своими папками abi в это местоположение.

Читайте также:  Преобразовать int string android

Устаревшее решение

Добавьте оба фрагмента кода в свой файл gradle.build в качестве зависимости:

Как создать эту настраиваемую банку:

Тот же ответ можно найти и в связанном с ним вопросе: Включить .so библиотеку в apk в андроид-студии

Ответ 2

Добавление .so Library в Android Studio 1.0.2

  • Создать папку «jniLibs» внутри «src/main/»
  • Поместите все ваши библиотеки .so внутри папки «src/main/jniLibs»
  • Структура папки выглядит,
    | —app:
    | — | —src:
    | — | — | —main
    | — | — | — | —jniLibs
    | — | — | — | — | —armeabi
    | — | — | — | — | — | — | -.
    | — | — | — | — | —x86
    | — | — | — | — | — | — | -.
  • Никакой дополнительный код не требует просто синхронизации вашего проекта и запуска вашего приложения.

Ответ 3

*. поэтому библиотека в Android Studio

Вам нужно создать папку jniLibs внутри main в проектах android Studio и поместить все ваши файлы .so внутри. Вы также можете интегрировать эту строку в build.gradle

compile fileTree (dir: ‘libs’, include: [‘.jar’, ‘. so’])

Он отлично работает

Это структура проекта.

Ответ 4

Решение 1. Создание папки JniLibs

Создайте в своем приложении папку «jniLibs» и папки, содержащие ваш *.so внутри. Папка «jniLibs» должна быть создана в той же папке, что и папки «Java» или «Assets».

Решение 2. Модификация файла build.gradle

Если вы не хотите создавать новую папку и сохраняете свои файлы *.so в папке libs, это возможно!

В этом случае просто добавьте файлы *.so в папку libs (пожалуйста, соблюдайте ту же архитектуру, что и решение 1: libs/armeabi/.so) и измените файл build.gradle вашего приложения, чтобы добавить исходный каталог jniLibs.

У вас будет больше объяснений со скриншотами, которые помогут вам здесь (шаг 6):

Ответ 5

Это мой файл build.gradle, обратите внимание на строку

Это будет включать файл libs *.so в apk.

Ответ 6

Чтобы использовать собственную библиотеку (так что файлы) Вам нужно добавить некоторые коды в файл «build.gradle».

Этот код предназначен для очистки каталога «armeabi» и копирования файлов «so» в «armeabi», в то время как «чистый проект».

Ответ 7

Я решил подобную проблему, используя внешние родственные зависимости lib, которые упакованы внутри файлов jar. Иногда эти библиотеки зависимостей архитектуры упаковываются все в одну банку, иногда они разбиваются на несколько файлов jar. поэтому я написал некоторый buildscript для сканирования зависимостей jar для родных libs и сортировки их в правильные папки Android для Android. Кроме того, это также обеспечивает способ загрузки зависимостей, которые не найдены в maven-репозиториях, которые в настоящее время полезны для работы JNA на андроиде, потому что не все родные банки публикуются в публичных репозиториях maven.

Ответ 8

Официальный анонс Android NDK hello-libs Пример CMake

Просто работал у меня на хосте Ubuntu 17.10, Android Studio 3, Android SDK 26, поэтому я настоятельно рекомендую вам основывать свой проект на нем.

Общая библиотека называется libgperf , key code части:

Затем, если вы посмотрите на /data/app на устройстве, там будет libgperf.so .

на С++-коде, используйте: #include

расположение заголовка: hello-libs/distribution/gperf/include/gperf.h

Если вы поддерживаете только некоторые архитектуры, см. Gradle Создание только NDK-цели только ARM

Источник

Русские Блоги

Как Android вызывает сторонние SO библиотеки

Описание проблемы: Как Android вызывает сторонние SO библиотеки;
известные условия: Библиотека SO — это библиотека подключений версии Android (файл * .so), которая предоставляет подробные инструкции по интерфейсу;
Знай решение:
1. Поместите файл SO непосредственно в libs / armeabi, затем System.loadLibrary («xxx») в коде, затем в public native static int xxx_xxx_xxx (), затем вы можете напрямую вызвать метод xxx_xxx_xxx ();
2. Второе решение состоит в том, чтобы создать свой собственный файл SO, вызвать сторонний SO в своем собственном файле SO, а затем вызвать свой собственный SO в программе. Это более сложно. Требуется создать файл класса Java, сгенерировать файл .h и написать Исходный файл C включает в себя файл .h, сгенерированный перед включением соответствующего метода, и, наконец, использует скрипт ndk-build в комплекте разработки android NDK для создания соответствующей общей библиотеки .so;
Решить:
1. Возможны ли вышеуказанные два варианта? В чем проблема, если это невозможно?
2. В чем разница между двумя схемами? Почему вторые решения используются в основном в Интернете?
3. Существует только один файл * .so, и предоставляется подробное описание интерфейса. Можно ли его использовать в ANDROID?

Прежде всего, это зависит от того, является ли этот SO SO спецификации JNI, например, возвращает ли он тип, который JNI не поддерживает напрямую. Другими словами, может ли это так называться непосредственно как JNI. Если ответ «нет», вы можете выбрать только второй вариант.

Если ответ «да», это зависит от того, хотите ли вы, чтобы эта библиотека SO была напрямую представлена ​​слою JAVA. Если ответ «нет», вы можете выбрать только второе решение, например, вы также являетесь поставщиком библиотеки.

Как правило, если у вас есть только SO, это означает, что это предоставляется вам другими, и вы можете попросить другую сторону предоставить вам поддержку файлов вызовов JAVA.

1. Это зависит от того, соответствует ли SO спецификации вызова JNI. Это зависит от ваших собственных пожеланий.
2. Поскольку второй метод является наиболее гибким, могут быть реализованы различные ситуации.
3. Да

Источник

How to include *.so library in Android Studio?

Posted by: admin December 8, 2017 Leave a comment

I read many threads how to add a *.so library to Android Studio, but none of them works, especially when it comes to the point of text: This does not work with the newer xxx (Android Studio, gradle, …)

Can we make a fresh start please. I got:

Android Studio 0.6.0

From Project Structure I see:

Compile Sdk Version 19
Build Tools Version 19.1.0

I got the *.so files pre-compiled and at the demo app they are working. I have to change the source code of the app, so I need to rebuild with the same *.so files.

Create new folder project/app/src/main/jniLibs and then put your *.so files with his abi folders to this location.

Deprecated solution

Add both code snippets in your module gradle.build file as a dependency:

How to create this custom jar:

Same answer can also be found in related question: Include .so library in apk in android studio

Adding .so Library in Android Studio 1.0.2

  1. Create Folder “jniLibs” inside “src/main/”
  2. Put all your .so libraries inside “src/main/jniLibs” folder
  3. Folder structure looks like,

|–|–|–|–|–|–.so Files

No extra code requires just sync your project and run your application.

Reference

*.so library in Android Studio

You have to generate jniLibs folder inside main in android Studio projects and put your all .so files inside. You can also integrate this line in build.gradle

compile fileTree(dir: ‘libs’, include: [‘.jar’,’.so’])

It’s work perfectly

This is the project structure.

Solution 1 : Creation of a JniLibs folder

Create a folder called “jniLibs” into your app and the folders containing your *.so inside.
The “jniLibs” folder needs to be created in the same folder as your “Java” or “Assets” folders.

Solution 2 : Modification of the build.gradle file

If you don’t want to create a new folder and keep your *.so files into the libs folder, it is possible !

In that case, just add your *.so files into the libs folder (please respect the same architecture as the solution 1 : libs/armeabi/.so for instance) and modify the build.gradle file of your app to add the source directory of the jniLibs.

You will have more explanations, with screenshots to help you here ( Step 6 ):

This is my build.gradle file, Please note the line

This will include libs’s *.so file to apk.

To use native-library (so files)
You need to add some codes in the “build.gradle” file.

This code is for cleaing “armeabi” directory and copying ‘so’ files into “armeabi” while ‘clean project’.

I have solved a similar problem using external native lib dependencies that are packaged inside of jar files. Sometimes these architecture dependend libraries are packaged alltogether inside one jar, sometimes they are split up into several jar files. so i wrote some buildscript to scan the jar dependencies for native libs and sort them into the correct android lib folders. Additionally this also provides a way to download dependencies that not found in maven repos which is currently usefull to get JNA working on android because not all native jars are published in public maven repos.

android – How do I display a CalendarView in an AlertDialog?

Questions: I’m trying to display the CalendarView in an Alert Dialog, but all that shows up is the month/year and the days of the week. These are the contents of the layout file:

How do I convert a PSD design to Android xml?

Questions: Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers. Want to improve this question? Update the question so it’s on-topic for Stack Over.

Источник

Как включить библиотеку * .so в Android Studio?

Я прочитал много тем, как добавить библиотеку * .so в Android Studio, но ни один из них не работает, особенно когда дело доходит до текста: это не работает с более новым xxx (Android Studio, gradle, . )

Можем ли мы начать сначала, пожалуйста. Я получил:

Android Studio 0.6.0

Из структуры проекта я вижу:

Модули / приложение: Свойства:

Compile Sdk Version 19 Инструменты сборки версии 19.1.0

Я предварительно скомпилировал файлы * .so, и в демонстрационном приложении они работают. Мне нужно изменить исходный код приложения, поэтому мне нужно перестроить с теми же файлами * .so.

Текущее решение

Создайте папку project/app/src/main/jniLibs , а затем поместите свои *.so файлы в их папки abi в этом месте. Например,

Устаревшее решение

Добавьте оба фрагмента кода в файл gradle.build вашего модуля в качестве зависимости:

Как создать эту кастомную банку:

Тот же ответ также можно найти в связанном вопросе: Включить библиотеку .so в apk в студии Android

Добавление библиотеки .so в Android Studio 1.0.2

  1. Создайте папку «jniLibs» внутри «src / main /»
  2. Поместите все свои библиотеки .so в папку «src / main / jniLibs»
  3. Структура папки выглядит так:
    | —app:
    | — | —src:
    | — | — | —main
    | — | — | — | —jniLibs
    | — | — | — | — | —armeabi
    | — | — | — | — | — | -. Так Файлы
    | — | — | — | — | —x86
    | — | — | — | — | — | -. so Файлы
  4. Никакого дополнительного кода не требуется, просто синхронизируйте ваш проект и запустите приложение.

Решение 1. Создание папки JniLibs

Создайте папку с именем «jniLibs» в своем приложении и папки, содержащие ваши * .so внутри. Папку «jniLibs» необходимо создать в той же папке, что и папки «Java» или «Assets».

Решение 2. Модификация файла build.gradle

Если вы не хотите создавать новую папку и хранить свои файлы * .so в папке libs, это возможно!

В этом случае просто добавьте свои файлы * .so в папку libs (пожалуйста, соблюдайте ту же архитектуру, что и решение 1: например, libs / armeabi / .so) и измените файл build.gradle вашего приложения, чтобы добавить исходный каталог файлов jniLibs.

У вас будет больше объяснений со скриншотами, которые помогут вам здесь (шаг 6):

Источник

Читайте также:  Android check system language
Оцените статью