Como misturar arquivos .so de 32 e 64 bits em um aplicativo

Carmelo M 09/15/2017. 1 answers, 84 views
java android android linux android-ndk android-ndk ndk-build

Primeiro, eu sei que em um aplicativo não permite o uso misto de diferentes arquiteturas do arquivo .so (Parte só usa 32, a outra parte usa apenas 64)

Então, eu tentei abrir um novo processo para carregar dinamicamente 64 e 32 bits assim arquivos, mas System.load() lançar o erro e app caiu! Como resolver este problema através de múltiplos processos? Ou há outra maneira de resolver isso?

5 Comments
Markus 07/27/2017
Bem-vindo ao SO! Por favor, reserve algum tempo para ler as páginas de ajuda , especialmente as seções "Quais tópicos posso perguntar aqui?" e "Que tipos de perguntas devo evitar perguntar?" . Também, por favor, faça o tour e leia sobre como fazer boas perguntas . Por fim, aprenda como criar um Exemplo Mínimo, Completo e Verificável . Detalhes sobre erros ajudariam muito.
Alex Cohn 07/27/2017
Essa é uma ideia legal! Mas que tipo de processo infantil você quer começar? Um serviço? Não acho que isso funcione, porque o sistema decide ativar o modo de 32 bits com base na análise do seu APK, e a JVM é configurada de acordo.
Alex Cohn 07/27/2017
Veja stackoverflow.com/a/31879900/192373 : o pm pode forçar a ABI durante a instalação do aplicativo.
Carmelo M 07/28/2017
@AlexCohn Obrigado! Eu concordo com você, um processo filho (Atividade) não pode resolver este problema。 [stackoverflow.com/a/31879900/192373] não está funcionando, porque eu quero parte da função usa 32-bit .so, e parte do função usa 64 bits .so, no mesmo aplicativo.
Carmelo M 07/28/2017
@AlexCohn Você tem outras idéias? mestre

1 Answers


Alex Cohn 07/30/2017.

Bem, eu tentei. À primeira vista, isso funciona: use armeabi shared libs 'da maneira usual' e execute um executável arm64-v8a partir de Java com Runtime.exec () ou de C com system () .

Você pode colocar o executável em ativos e descompactá-lo manualmente, ou pode enganar e renomeá-lo para que ele comece com lib e termine com .so ; Agora você pode colocar este arquivo no diretório jniLibs/armeabi .

O caminho oposto também funciona: inicie o executável de 32 bits (não se esqueça de -fPIE ) do aplicativo de 64 bits.

Certifique-se de que os caminhos de pesquisa da biblioteca não entrem em conflito.

2 comments
Carmelo M 08/04/2017
Essa é uma ideia legal !!! Meu projeto não é semelhante à operação de fundo de transcodificação de vídeo, mas precisa carregar os gráficos tridimensionais, através do SurfaceView para interagir com os gestos do usuário. Como lidar com essas interações da interface do usuário é um grande problema, espero que você possa me dar algumas idéias, obrigado
Alex Cohn 08/04/2017
Eu não acho que você pode manipular a interface do usuário ou executar gráficos ao vivo através de comunicação entre processos

Related questions

Hot questions

Language

Popular Tags