Eu li muitos tópicos sobre como adicionar uma biblioteca * .so ao Android Studio, mas nenhum deles funciona, especialmente quando se trata do ponto do texto: isso não funciona com o xxx mais recente (Android Studio, gradle, ...)
Podemos começar de novo, por favor. Eu tenho:
Android Studio 0.6.0
Na estrutura do projeto, vejo:
Localização do SDK:
/usr/share/android-studio/data/sdk
/usr/lib/jvm/default-java
Projeto:
Gradle version 1.10
Android Plugin Version 0.11.+
Módulos / aplicativo: Propriedades:
Compile Sdk Versão 19 Versão 19.1.0 das Ferramentas de Construção
Dependências:
{dir=libs, include=[*.jar]} Compile
{dir=libs, include=[*.so]} Provided
m com.android.support: appcompat -v7:19.+ Compile
Eu tenho os arquivos * .so pré-compilados e no aplicativo demo eles estão trabalhando. Eu tenho que mudar o código fonte do aplicativo, então preciso reconstruir com os mesmos arquivos * .so.
android
android-studio
Ronald Wiplinger
fonte
fonte
Respostas:
Solução Atual
Crie a pasta
project/app/src/main/jniLibs
e, em seguida, coloque seus*.so
arquivos nas pastas abi desse local. Por exemplo,Solução preterida
Adicione os dois trechos de código no arquivo gradle.build do módulo como uma dependência:
Como criar este jar personalizado:
A mesma resposta também pode ser encontrada em perguntas relacionadas: Inclua a biblioteca .so no apk no android studio
fonte
Compile
tarefa foi descontinuada. Use emJavaCompile
vez disso (a partir de respostas relacionadas)jniLibs
caminho do diretório no Guia do Usuário Gradle Plugin - Estrutura do ProjetoAdicionando a biblioteca .so no Android Studio 1.0.2
| |app:
| - | --src:
| - | - | --main
| - | - | - | --jniLibs
| - | - | - | - | --armeabi
| - | - | - | - | - | -. so Arquivos
| - | - | - | - | --x86
| - | - Arquivos | - | - | - | -. so
Referência
https://github.com/commonsguy/sqlcipher-gradle/tree/master/src/main
fonte
Solução 1: Criação de uma pasta JniLibs
Crie uma pasta chamada "jniLibs" em seu aplicativo e as pastas que contêm seu * .so dentro. A pasta "jniLibs" precisa ser criada na mesma pasta que as pastas "Java" ou "Ativos".
Solução 2: modificação do arquivo build.gradle
Se você não deseja criar uma nova pasta e manter seus arquivos * .so na pasta libs, é possível!
Nesse caso, basta adicionar seus arquivos * .so à pasta libs (respeite a mesma arquitetura da solução 1: libs / armeabi / .so, por exemplo) e modifique o arquivo build.gradle do seu aplicativo para adicionar o diretório de origem dos jniLibs.
Você terá mais explicações, com capturas de tela para ajudá-lo aqui (Etapa 6):
http://blog.guillaumeagis.eu/setup-andengine-with-android-studio/
EDIT Tinha que ser jniLibs.srcDirs, não jni.srcDirs - editou o código. O diretório pode ser um caminho [relativo] que aponta para fora do diretório do projeto.
fonte
source Sets {
código naandroid {
seçãobiblioteca * .so no Android Studio
Você precisa gerar a pasta jniLibs dentro do main nos projetos do Android Studio e colocar todos os seus arquivos .so dentro. Você também pode integrar esta linha no build.gradle
compile fileTree (dir: 'libs', inclua: [' .jar', ' .so'])
É funcionar perfeitamente
| --app:
| - | --src:
| - | - | --main
| - | - | - | --jniLibs
| - | - | - | - | --armeabi
Arquivos | - | - | - | - | - | -. so
Essa é a estrutura do projeto.
fonte
Este é o meu arquivo build.gradle, observe a linha
Isso incluirá o arquivo * .so da libs no apk.
fonte
hello-libs
Exemplo oficial do Android NDK CMakehttps://github.com/googlesamples/android-ndk/tree/840858984e1bb8a7fab37c1b7c571efbe7d6eb75/hello-libs
Acabei de trabalhar para mim no host Ubuntu 17.10, Android Studio 3, Android SDK 26, por isso recomendo fortemente que você baseie seu projeto nele.
A biblioteca compartilhada é chamada
libgperf
, as partes do código-chave são:Olá, libs / app / src / main / cpp / CMakeLists.txt :
app / build.gradle :
Então, se você olhar embaixo
/data/app
do dispositivo,libgperf.so
também estará lá.no código C ++, use:
#include <gperf.h>
localização do cabeçalho:
hello-libs/distribution/gperf/include/gperf.h
localização da lib:
distribution/gperf/lib/arm64-v8a/libgperf.so
Se você suportar apenas algumas arquiteturas, consulte: Gradle Build NDK target only ARM
O exemplo git rastreia as bibliotecas compartilhadas pré-construídas, mas também contém o sistema de construção para construí-las também: https://github.com/googlesamples/android-ndk/tree/840858984e1bb8a7fab37c1b7c571efbe7d6eb75/hello-libs/gen-libs
fonte
Para usar a biblioteca nativa (arquivos)) Você precisa adicionar alguns códigos no arquivo "build.gradle".
Este código serve para limpar o diretório "armeabi" e copiar os arquivos 'so' para o "armeabi" enquanto o 'projeto limpo'.
Fui indicado a partir do abaixo. https://gist.github.com/pocmo/6461138
fonte
Eu resolvi um problema semelhante usando dependências de lib nativas externas empacotadas dentro de arquivos jar. Às vezes, essas bibliotecas dependentes da arquitetura são empacotadas totalmente em um jar, às vezes são divididas em vários arquivos jar. Então, eu escrevi alguns buildscript para verificar as dependências do jar em busca de bibliotecas nativas e classificá-las nas pastas corretas da biblioteca android. Além disso, isso também fornece uma maneira de baixar dependências que não são encontradas nos repositórios maven, que atualmente são úteis para que o JNA funcione no Android, porque nem todos os jars nativos são publicados em repositórios públicos do maven.
fonte
Tentei as soluções nas respostas acima, mas nenhuma funcionou para mim. Eu tinha uma biblioteca com arquivos .so, .dll e .jar. No final, eu fiz isso, você pode ver os detalhes aqui: https://stackoverflow.com/a/54976458/7392868
Copiei os arquivos .so em uma pasta chamada jniLibs e colei dentro da pasta app / src / main /. Para outras dependências, usei as dependências de notas.
fonte