Czytałem wiele wątków, jak dodać bibliotekę * .so do Android Studio, ale żaden z nich nie działa, szczególnie jeśli chodzi o treść: To nie działa z nowszym xxx (Android Studio, gradle, ...)
Czy możemy zacząć od nowa? Mam:
Android Studio 0.6.0
Ze struktury projektu widzę:
Lokalizacja SDK:
/usr/share/android-studio/data/sdk
/usr/lib/jvm/default-java
Projekt:
Gradle version 1.10
Android Plugin Version 0.11.+
Moduły / aplikacja: Właściwości:
Kompiluj Sdk w wersji 19 Narzędzia do budowania w wersji 19.1.0
Zależności:
{dir=libs, include=[*.jar]} Compile
{dir=libs, include=[*.so]} Provided
m com.android.support: appcompat -v7:19.+ Compile
Mam wstępnie skompilowane pliki * .so i działają w aplikacji demonstracyjnej. Muszę zmienić kod źródłowy aplikacji, więc muszę przebudować z tymi samymi plikami * .so.
android
android-studio
Ronald Wiplinger
źródło
źródło
Odpowiedzi:
Aktualne rozwiązanie
Utwórz folder
project/app/src/main/jniLibs
, a następnie umieść*.so
pliki w ich folderach abi w tej lokalizacji. Na przykład,Przestarzałe rozwiązanie
Dodaj oba fragmenty kodu w pliku gradle.build modułu jako zależność:
Jak stworzyć ten niestandardowy słoik:
Tę samą odpowiedź można również znaleźć w powiązanym pytaniu: Dołącz bibliotekę .so do apk w Android Studio
źródło
Compile
zadanie zostało wycofane. UżyjJavaCompile
zamiast tego (z powiązanych odpowiedzi)jniLibs
ścieżki katalogu w Podręczniku użytkownika wtyczki Gradle - Struktura projektuDodanie biblioteki .so w Android Studio 1.0.2
następująco: | --app:
| - | --src:
| - | - | --main
| - | - | - | --jniLibs
| - | - | - | - | --armeabi
| - | - | - | - | - | -. so Pliki
| - | - | - | - | --x86
| - | - | - | - | - | -. so Pliki
Odniesienia
https://github.com/commonsguy/sqlcipher-gradle/tree/master/src/main
źródło
Rozwiązanie 1: Utworzenie folderu JniLibs
Utwórz folder o nazwie „jniLibs” w swojej aplikacji i foldery zawierające plik * .so w środku. Folder „jniLibs” należy utworzyć w tym samym folderze, co foldery „Java” lub „Assets”.
Rozwiązanie 2: Modyfikacja pliku build.gradle
Jeśli nie chcesz tworzyć nowego folderu i przechowywać swoje pliki * .so w folderze libs, jest to możliwe!
W takim przypadku po prostu dodaj swoje pliki * .so do folderu libs (przestrzegaj tej samej architektury, co rozwiązanie 1: na przykład libs / armeabi / .so) i zmodyfikuj plik build.gradle swojej aplikacji, aby dodać katalog źródłowy z jniLibs.
Będziesz mieć więcej wyjaśnień, z pomocnymi zrzutami ekranu (krok 6):
http://blog.guillaumeagis.eu/setup-andengine-with-android-studio/
EDIT Musiało to być jniLibs.srcDirs, a nie jni.srcDirs - edytowano kod. Katalog może być ścieżką [względną], która wskazuje poza katalog projektu.
źródło
source Sets {
kod wandroid {
sekcjiBiblioteka * .so w Android Studio
Musisz wygenerować folder jniLibs w głównym projekcie Android Studio i umieścić w nim wszystkie pliki .so. Możesz również zintegrować tę linię w build.gradle
compile fileTree (dir: 'libs', include: [' .jar', ' .so'])
Działa idealnie
| --app:
| - | --src:
| - | - | --main
| - | - | - | --jniLibs
| - | - | - | - | --armeabi
| - | - | - | - | - | -. so Pliki
Taka jest struktura projektu.
źródło
To jest mój plik build.gradle. Zwróć uwagę na linię
Będzie to obejmować plik * .so biblioteki libs do apk.
źródło
Oficjalny
hello-libs
przykład CMake dla Androida NDKhttps://github.com/googlesamples/android-ndk/tree/840858984e1bb8a7fab37c1b7c571efbe7d6eb75/hello-libs
Po prostu pracował dla mnie na hoście Ubuntu 17.10, Android Studio 3, Android SDK 26, więc zdecydowanie polecam oprzeć swój projekt na nim.
Biblioteka współdzielona jest nazywana
libgperf
, kluczowe części kodu to:hello-libs / app / src / main / cpp / CMakeLists.txt :
app / build.gradle :
Wtedy, jeśli spojrzysz pod
/data/app
urządzenie,libgperf.so
również tam będzie.w kodzie C ++ użyj:
#include <gperf.h>
lokalizacja nagłówka:
hello-libs/distribution/gperf/include/gperf.h
lokalizacja biblioteki:
distribution/gperf/lib/arm64-v8a/libgperf.so
Jeśli obsługujesz tylko niektóre architektury, zobacz: Gradle Build NDK jest przeznaczony tylko dla ARM
Przykładowy git śledzi wstępnie skompilowane biblioteki współdzielone, ale zawiera również system kompilacji do ich tworzenia: https://github.com/googlesamples/android-ndk/tree/840858984e1bb8a7fab37c1b7c571efbe7d6eb75/hello-libs/gen-libs
źródło
Aby korzystać z biblioteki natywnej (plików so), musisz dodać kilka kodów w pliku „build.gradle”.
Ten kod służy do czyszczenia katalogu „armeabi” i kopiowania plików „so” do „armeabi” podczas „czyszczenia projektu”.
Zostałem skierowany z dołu. https://gist.github.com/pocmo/6461138
źródło
Rozwiązałem podobny problem, używając zewnętrznych natywnych zależności lib, które są spakowane w plikach jar. Czasami te biblioteki zależne od architektury są pakowane razem w jednym pliku jar, czasami są podzielone na kilka plików jar. więc napisałem skrypt kompilacyjny, aby przeskanować zależności jar dla natywnych bibliotek i posortować je do odpowiednich folderów bibliotek Androida. Dodatkowo zapewnia to również sposób pobierania zależności, których nie ma w repozytoriach maven, co jest obecnie przydatne, aby JNA działało na Androidzie, ponieważ nie wszystkie natywne pliki JAR są publikowane w publicznych repozytoriach maven.
źródło
Wypróbowałem rozwiązania z powyższych odpowiedzi, ale żadne nie zadziałało. Miałem bibliotekę z plikami .so, .dll i .jar. Na koniec zrobiłem to, szczegóły możesz zobaczyć tutaj: https://stackoverflow.com/a/54976458/7392868
Skopiowałem wklejone pliki .so do folderu o nazwie jniLibs i wkleiłem je do folderu app / src / main /. W przypadku innych zależności użyłem zależności klas.
źródło