J'ai lu de nombreux threads sur la façon d'ajouter une bibliothèque * .so à Android Studio, mais aucun d'entre eux ne fonctionne, surtout en ce qui concerne le point de texte: cela ne fonctionne pas avec le nouveau xxx (Android Studio, gradle, ...)
Pouvons-nous prendre un nouveau départ s'il vous plaît. J'ai eu:
Android Studio 0.6.0
De la structure du projet, je vois:
Emplacement du SDK:
/usr/share/android-studio/data/sdk
/usr/lib/jvm/default-java
Projet:
Gradle version 1.10
Android Plugin Version 0.11.+
Modules / appli: Propriétés:
Compiler la version 19 des outils de compilation de la version 19.1.0 de Sdk
Dépendances:
{dir=libs, include=[*.jar]} Compile
{dir=libs, include=[*.so]} Provided
m com.android.support: appcompat -v7:19.+ Compile
J'ai les fichiers * .so pré-compilés et sur l'application de démonstration, ils fonctionnent. Je dois changer le code source de l'application, donc je dois reconstruire avec les mêmes fichiers * .so.
android
android-studio
Ronald Wiplinger
la source
la source
Réponses:
Solution actuelle
Créez le dossier
project/app/src/main/jniLibs
, puis placez vos*.so
fichiers dans leurs dossiers abi à cet emplacement. Par exemple,Solution obsolète
Ajoutez les deux extraits de code dans votre fichier gradle.build de module en tant que dépendance:
Comment créer ce pot personnalisé:
La même réponse peut également être trouvée dans la question connexe: Inclure la bibliothèque .so dans apk dans android studio
la source
Compile
la tâche est obsolète. Utiliser à laJavaCompile
place (à partir des réponses connexes)jniLibs
chemin du répertoire dans Gradle Plugin User Guide - Project StructureAjout de la bibliothèque .so dans Android Studio 1.0.2
| --app:
| - | --src:
| - | - | --main
| - | - | - | --jniLibs
| - | - | - | - | --armeabi
| - | - | - | - | - | -. so Fichiers
| - | - | - | - | --x86
| - | - | - | - | - | -. so Fichiers
Référence
https://github.com/commonsguy/sqlcipher-gradle/tree/master/src/main
la source
Solution 1: Création d'un dossier JniLibs
Créez un dossier appelé «jniLibs» dans votre application et les dossiers contenant votre * .so à l'intérieur. Le dossier «jniLibs» doit être créé dans le même dossier que vos dossiers «Java» ou «Assets».
Solution 2: Modification du fichier build.gradle
Si vous ne voulez pas créer un nouveau dossier et conserver vos fichiers * .so dans le dossier libs, c'est possible!
Dans ce cas, ajoutez simplement vos fichiers * .so dans le dossier libs (veuillez respecter la même architecture que la solution 1: libs / armeabi / .so par exemple) et modifiez le fichier build.gradle de votre application pour ajouter le répertoire source des jniLibs.
Vous aurez plus d'explications, avec des captures d'écran pour vous aider ici (étape 6):
http://blog.guillaumeagis.eu/setup-andengine-with-android-studio/
EDIT Cela devait être jniLibs.srcDirs, pas jni.srcDirs - édité le code. Le répertoire peut être un chemin [relatif] qui pointe en dehors du répertoire du projet.
la source
source Sets {
code sous laandroid {
section* bibliothèque .so dans Android Studio
Vous devez générer le dossier jniLibs dans main dans les projets Android Studio et y mettre tous vos fichiers .so. Vous pouvez également intégrer cette ligne dans build.gradle
compiler fileTree (dir: 'libs', inclure: [' .jar', ' .so'])
Ça marche parfaitement
| --app:
| - | --src:
| - | - | --main
| - | - | - | --jniLibs
| - | - | - | - | --armeabi
| - | - | - | - | - | -. so Fichiers
C'est la structure du projet.
la source
Ceci est mon fichier build.gradle, veuillez noter la ligne
Cela inclura le fichier * .so de libs dans apk.
la source
hello-libs
Exemple officiel de CMake pour Android NDKhttps://github.com/googlesamples/android-ndk/tree/840858984e1bb8a7fab37c1b7c571efbe7d6eb75/hello-libs
Je viens de travailler pour moi sur l'hôte Ubuntu 17.10, Android Studio 3, Android SDK 26, donc je vous recommande fortement de baser votre projet dessus.
La bibliothèque partagée est appelée
libgperf
, les parties du code clé sont:bonjour-libs / app / src / main / cpp / CMakeLists.txt :
app / build.gradle :
Ensuite, si vous regardez sous
/data/app
l'appareil, illibgperf.so
sera également là.sur le code C ++, utilisez:
#include <gperf.h>
emplacement de l'en-tête:
hello-libs/distribution/gperf/include/gperf.h
emplacement de la bibliothèque:
distribution/gperf/lib/arm64-v8a/libgperf.so
Si vous ne prenez en charge que certaines architectures, voir: Gradle Build NDK target only ARM
L'exemple git suit les bibliothèques partagées prédéfinies, mais il contient également le système de construction pour les construire également: https://github.com/googlesamples/android-ndk/tree/840858984e1bb8a7fab37c1b7c571efbe7d6eb75/hello-libs/gen-libs
la source
Pour utiliser la bibliothèque native (donc les fichiers) Vous devez ajouter des codes dans le fichier "build.gradle".
Ce code sert à nettoyer le répertoire «armeabi» et à copier les fichiers «so» dans «armeabi» tout en «nettoyant le projet».
J'ai été référé par le bas. https://gist.github.com/pocmo/6461138
la source
J'ai résolu un problème similaire en utilisant des dépendances de lib natives externes qui sont emballées à l'intérieur de fichiers jar. Parfois, ces bibliothèques dépendantes de l'architecture sont regroupées dans un même fichier jar, parfois elles sont divisées en plusieurs fichiers jar. J'ai donc écrit un buildscript pour analyser les dépendances jar pour les bibliothèques natives et les trier dans les bons dossiers de lib android. De plus, cela fournit également un moyen de télécharger des dépendances qui ne se trouvent pas dans les dépôts maven, ce qui est actuellement utile pour faire fonctionner JNA sur Android car tous les jars natifs ne sont pas publiés dans des dépôts maven publics.
la source
J'ai essayé les solutions dans les réponses ci-dessus mais aucune n'a fonctionné pour moi. J'avais une bibliothèque avec des fichiers .so, .dll et .jar. À la fin, j'ai fait cela, vous pouvez voir les détails ici: https://stackoverflow.com/a/54976458/7392868
J'ai copié les fichiers .so dans un dossier nommé jniLibs et les ai collés dans le dossier app / src / main /. Pour les autres dépendances, j'ai utilisé les dépendances de grade.
la source