Include so files android

How to include .so files in Android Studio project

over 6 years ago

From here you can learn to include or integrate .so files into your code. Files that contain the .so file extension are most commonly used for shared library files. Programs written in the C and C++ language load a shared library when they are launched on a user’s hard drive.Therefore SO stands for Shared Object, it doesn’t have anything to do with obfuscation, it just means someone wrote parts of the app in C.

In some cases, there is existing C code and it’s just easier for the programmer to build a JNI interface to call the library from Java; in other cases, the programmer wants the speed advantage that compiled C has over Java. And of course, if i want to hide how some part of my application works, writing that in C and compiling it to a .so makes it much harder to reverse.

Well I have implemented this while I was integrating SQL Cipher in my application developing android studio. So below are the steps that I have followed for including .so files :-

  • create a folder named jiniLibs inside the main folder of application.
  • after you have to create three sub-folder inside jiniLibs named armeabi , armeabi-v7a and x86 . As the library loader will try to look for libraries that most closely match the architecture that you’re running on. In general, you should compile one version of the library for each of the abis that you’re planning to support (armeabi, armeabi-v7a, x86, mips) so that the compiler can optimize correctly.
  • And in these folder you have to copy the respective files that you are provided with. In my case I have generated these different versions with the help of commands provided library developers document.

And in last you have to compile all the jars present in the code packet by including a line in the .gradle file of the app like the way it is added below :-

Well after lot of search I have came across this and it helps. Hope this will do the same for you. 🙂

Источник

Как включить *.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 в это местоположение.

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

Добавьте оба фрагмента кода в свой файл 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

Источник

Как включить библиотеку * .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):

Источник

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

Я искал библиотеку, которая должна конвертировать .doc/.docx в .pdf на платформе Android.

Я получил pdFTron android sdk, так как они предоставили файл libPDFNetC.so.

Для преобразования существует класс Convert, внутри которого существует метод toPDF(),
в этом методе они внутренне называются native методом FileToPdf(). Я пробовал этот код, но не смог вызвать этот собственный метод и получал ошибки

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

Вам нужно убедиться, что файл .so, который отображается в собственном интерфейсе, доступен в вашей системе и может быть найден Java.

В вашем Java-коде должен быть вызов типа System.loadLibrary(«

  • «) или System.load(«/path/to/libs/lib
  • .so») .
    Это даст указание JVM искать библиотеку с заданным именем и загружать ее.

      System.load(«/path/to/libs/lib
    • .so») будет просто искать файл, указанный в качестве аргумента, и загрузить его.
      System.loadLibrary(«
    • будет выглядеть в сконфигурированном пути библиотеки для библиотеки с именем lib
    • .so . Путь библиотеки берется из системной переменной java.library.path .

    Также убедитесь, что загружаемая вами версия библиотеки совместима с отображением Java JNI!

    Вам нужно связать свою окончательную общую библиотеку, созданную Android NDK, с помощью ndk-build в общей библиотеке PDF, которую вы сказали , которую вы уже скомпилировали для архитектуры ARM.
    (Убедитесь, что это так, иначе библиотека не будет работать на Android!)

    Для этого, если, например, у вас есть следующая структура каталогов:

    В файле Android.mk необходимо иметь следующий контент:

    и содержимое файла Application.mk (для использования стандартной библиотеки С++ и создания окончательной общей библиотеки для двух разных версий архитектуры ARM):

    Затем после компиляции кода из Eclipse или из командной строки с помощью ndk-build script он скомпилирует вашу окончательную общую библиотеку и свяжет ее с вашей предварительно созданной общей библиотекой (т.е. в общей библиотеке PDF, которую вы сказали, которую вы пытаетесь использовать).

    Для общих библиотек apk, сгенерированный и размещенный на устройстве/эмуляторе, содержит окончательную общую библиотеку, а также все готовые разделяемые библиотеки, которые вы связываете с, в отличие от ссылок на статические библиотеки, которые не связаны внутри apk.

    В вашем случае использования у вас должно быть две разделяемые библиотеки в каталоге lib вашего приложения Android после распаковки apk на устройстве.
    Вы можете проверить это, выполнив следующую команду с терминала:

    Замените com.company.myapp с вашим именем пакета приложений.

    Кроме того, не забудьте включить внутри статического контекста класса Java:

    Источник

    Читайте также:  Android tv box snapdragon
  • Оцените статью