Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Duvias Android Studio e JNI

1) não é dll, é so... ;)
2) sim, ele linka dinamicamente com a chamada System.loadLibrary()
3) veja se as libs estão dentro do APK gerado
4) este erro é que estas libs estão com dependência na libhoudini.so, você precisa incluir ela também
5) não é exception, é error, por isso não pega no try/catch


2016-01-26 11:53 GMT-02:00 Tiago Grillo <tijgrillo@gmail.com>:
Thiago tentei simplesmente criar a pasta jniLibs e colocar lá os .so (em suas respectivas pastas) tenho o seguinte erro
java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libhoudini.so" not found

achei na net uns caras falando de colocar no gradle estas linhas
task copyJniLibs(type: Copy) {
from 'libs/armeabi'
into 'src/main/jniLibs/armeabi'
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn(copyJniLibs)
}
clean.dependsOn 'cleanCopyJniLibs' 

mas o erro persiste, o interessante, ou não, é que meu android studio não reconhece os metodos da dll, mas o projeto compila normal. mas quando chamo uns deles vem o erro acima e o aplicativo para, mesmo com try catch. 

2016-01-26 10:51 GMT-02:00 Thiago Lopes Rosa <thiago.rosa@gmail.com>:
Primeiramente, se eles já forneceram as libs pré-compiladas acho que você não precisa compilá-las novamente (apenas se você fizer alguma alteração no wrapper.c).

O ndk-build no Android Studio ainda é muito limitado (pelo menos até a última vez que mexi nele). Ele gera o próprio Android.mk durante a compilação, ou seja, ele não está utilizando o Android.mk fornecido.

No seu caso, acho que basta colocar as libs dentro do diretório jniLibs separadas pelos ABIs corretos (no padrão é src/main/jniLibs/seus_targets_abi/sua_lib.so), do mesmo jeito que você disse que elas já estão separadas.



Thiago



2016-01-26 10:33 GMT-02:00 Tiago Grillo <tijgrillo@gmail.com>:
Ola,

    Preciso por umas classes nativas de um fornecedor no meu projeto para fazer a integração, mas tá dificil... :'(

    Vamos a minha saga... (o projeto exemplo que ele me mandou esta em eclipse)

    Eu tenho os arquivos Android.mk, Application.mk comm.h wrapper.c que estão na pasta JNI

    Tenho em libs as pastas armeabi, armeabi-v7a, mips e x86 que tem praticamente os mesmos arquivos (em questão de nome, entendo que cada um foi compilado para uma arquitetura de so).

    Nelas tem os arquivos gdb.setup, gdbserver, libsat-jni.so, libsatprotocol.so

    No Android Studio

    Eu pedi uma pasta JNI e coloquei os 4 primeiros arquivos que citei

    Depois mudei a visão da IDE de Android para Project achei a pasta libs e copiei as 4 pastas e seus arquivos para lá.

    Na sequencia fui no build.gradle da app e coloquei a linha
ndk {
moduleName "sat-jni"
}

    Depois disso ao fazer make do meu produto da o erro
Error:(22, 0) Error: NDK integration is deprecated in the current plugin.  Consider trying the new experimental plugin.  For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental.  Set "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration.
<a href="openFile:C:\Projetos\CloudBox1\Droidl\CloudBox1\app\build.gradle">Open File</a>

    Ai pesquisei e achei na net que tenho que mudar no gradle-wrapper.properties 
         de  distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip 
      para  distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip 
    e no build.gradle da aplicação
         de  com.android.tools.build:gradle:1.3.0
      para  com.android.tools.build:gradle-experimental:0.6.0-alpha7

    mas ai tive o erro
Error:(1, 0) Plugin with id 'com.android.application' not found.
<a href="openFile:C:\Projetos\CloudBox1\Droidl\CloudBox1\app\build.gradle">Open File</a>

     Bom dai vi que poderia por uma tag no gradle.properties que diz para deixar eu usar o modo depreciado mesmo
android.useDeprecatedNdk=true

    Dai aparentemente até achou minhas libs e tal mas dai estou com o erro
Error:Execution failed for task ':app:compileArmDebugNdk'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Users\tijgrillo\AppData\Local\Android\sdk\ndk-bundle\ndk-build.cmd'' finished with non-zero exit value 2

    Eu entendo que é por que esta faltando alguma configuração para conseguir compilar os arquivos da pasta jni.

    Minhas perguntas são: 

      1) Tenho mesmo que por tudo isso no meu projeto?

      2) Não consigo por apenas um .jar (ou .qualquer_coisa) e usar?

      3) Qual a melhor forma de fazer? com sem o depreciado?

      4) Por favor se alguém tiver uma receita de bolo pra eu fazer esta porcar.. funcionar!?!?!

Obrigado a todos,
Tiago Grillo

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário