Saya membaca banyak utas cara menambahkan pustaka * .so ke Android Studio, tetapi tidak ada yang berfungsi, terutama jika menyangkut poin teks: Ini tidak berfungsi dengan xxx yang lebih baru (Android Studio, gradle, ...)
Bisakah kita membuat awal yang baru. Saya mendapatkan:
Android Studio 0.6.0
Dari Struktur Proyek saya melihat:
Lokasi SDK:
/usr/share/android-studio/data/sdk
/usr/lib/jvm/default-java
Proyek:
Gradle version 1.10
Android Plugin Version 0.11.+
Modul / aplikasi: Properti:
Kompilasi Sdk Versi 19 Build Tools Versi 19.1.0
Dependensi:
{dir=libs, include=[*.jar]} Compile
{dir=libs, include=[*.so]} Provided
m com.android.support: appcompat -v7:19.+ Compile
Saya mendapatkan file * .so yang telah dikompilasi sebelumnya dan di aplikasi demo mereka berfungsi. Saya harus mengubah kode sumber aplikasi, jadi saya perlu membangun kembali dengan file * .so yang sama.
android
android-studio
Ronald Wiplinger
sumber
sumber
Jawaban:
Solusi Saat Ini
Buat folder
project/app/src/main/jniLibs
, lalu letakkan*.so
file Anda di dalam folder abi mereka di lokasi itu. Misalnya,Solusi yang tidak berlaku lagi
Tambahkan kedua cuplikan kode dalam file gradle.build modul Anda sebagai dependensi:
Cara membuat toples khusus ini:
Jawaban yang sama juga dapat ditemukan pada pertanyaan terkait: Include .so library in apk in android studio
sumber
Compile
tugas sudah tidak digunakan lagi. GunakanJavaCompile
sebagai gantinya (dari jawaban terkait)jniLibs
jalur direktori di Panduan Pengguna Plugin Gradle - Struktur ProyekMenambahkan Library .so di Android Studio 1.0.2
| --app:
| - | --src:
| - | - | --main
| - | - | - | --jniLibs
| - | - | - | - | --armeabi
| - | - | - | - | - | -. jadi Berkas
| - | - | - | - | --x86
| - | - | - | - | - | -. Jadi File
Referensi
https://github.com/commonsguy/sqlcipher-gradle/tree/master/src/main
sumber
Solusi 1: Pembuatan folder JniLibs
Buat folder bernama "jniLibs" ke dalam aplikasi Anda dan folder yang berisi * .so Anda di dalamnya. Folder "jniLibs" harus dibuat di folder yang sama dengan folder "Java" atau "Assets".
Solusi 2: Modifikasi file build.gradle
Jika Anda tidak ingin membuat folder baru dan menyimpan file * .so Anda ke dalam folder libs, itu mungkin!
Jika demikian, cukup tambahkan file * .so Anda ke dalam folder libs (harap hormati arsitektur yang sama dengan solusi 1: libs / armeabi / .so misalnya) dan ubah file build.gradle aplikasi Anda untuk menambahkan direktori sumber dari jniLibs.
Anda akan memiliki lebih banyak penjelasan, dengan tangkapan layar untuk membantu Anda di sini (Langkah 6):
http://blog.guillaumeagis.eu/setup-andengine-with-android-studio/
EDIT Itu harus jniLibs.srcDirs, bukan jni.srcDirs - yang mengedit kodenya. Direktori dapat berupa jalur [relatif] yang mengarah ke luar direktori proyek.
sumber
source Sets {
kode di bawahandroid {
bagian* .so library di Android Studio
Anda harus membuat folder jniLibs di dalam main di proyek Android Studio dan meletakkan semua file .so Anda di dalamnya. Anda juga dapat mengintegrasikan baris ini di build.gradle
kompilasi fileTree (dir: 'libs', sertakan: [' .jar', ' .so'])
Ini bekerja dengan sempurna
| --app:
| - | --src:
| - | - | --main
| - | - | - | --jniLibs
| - | - | - | - | --armeabi
| - | - | - | - | - | -. Jadi File
Ini adalah struktur proyek.
sumber
Ini adalah file build.gradle saya, Harap perhatikan barisnya
Ini akan menyertakan file * .so libs ke apk.
sumber
hello-libs
Contoh CMake resmi Android NDKhttps://github.com/googlesamples/android-ndk/tree/840858984e1bb8a7fab37c1b7c571efbe7d6eb75/hello-libs
Baru saja bekerja untuk saya di host Ubuntu 17.10, Android Studio 3, Android SDK 26, jadi saya sangat menyarankan agar Anda mendasarkan proyek Anda padanya.
Perpustakaan bersama disebut
libgperf
, bagian kode kuncinya adalah:halo-libs / app / src / main / cpp / CMakeLists.txt :
app / build.gradle :
Kemudian, jika Anda melihat
/data/app
perangkat di bawah ,libgperf.so
akan ada juga.pada kode C ++, gunakan:
#include <gperf.h>
lokasi tajuk:
hello-libs/distribution/gperf/include/gperf.h
lokasi lib:
distribution/gperf/lib/arm64-v8a/libgperf.so
Jika Anda hanya mendukung beberapa arsitektur, lihat: Gradle Build NDK hanya menargetkan ARM
Contoh git melacak pustaka bersama prebuilt, tetapi juga berisi sistem build untuk benar-benar membangunnya juga: https://github.com/googlesamples/android-ndk/tree/840858984e1bb8a7fab37c1b7c571efbe7d6eb75/hello-libs/gen-libs
sumber
Untuk menggunakan native-library (file jadi) Anda perlu menambahkan beberapa kode di file "build.gradle".
Kode ini untuk membersihkan direktori "armeabi" dan menyalin file 'so' ke dalam "armeabi" saat 'membersihkan proyek'.
Saya telah dirujuk dari bawah. https://gist.github.com/pocmo/6461138
sumber
Saya telah memecahkan masalah serupa menggunakan dependensi lib asli eksternal yang dikemas di dalam file jar. Terkadang pustaka dependend arsitektur ini dikemas semuanya di dalam satu jar, terkadang mereka dipecah menjadi beberapa file jar. jadi saya menulis beberapa buildscript untuk memindai dependensi jar untuk lib asli dan mengurutkannya ke dalam folder lib android yang benar. Selain itu, ini juga menyediakan cara untuk mendownload dependensi yang tidak ditemukan di repo maven yang saat ini berguna untuk membuat JNA berfungsi di android karena tidak semua native jar dipublikasikan di repo maven publik.
sumber
Saya mencoba solusi dalam jawaban di atas tetapi tidak ada yang berhasil untuk saya. Saya memiliki perpustakaan dengan file .so, .dll, dan .jar. Pada akhirnya saya melakukan ini, Anda dapat melihat detailnya di sini: https://stackoverflow.com/a/54976458/7392868
Saya menyalin menempelkan file .so di folder bernama jniLibs dan menempelkannya di dalam folder app / src / main /. Untuk dependensi lain saya menggunakan dependensi kelas.
sumber