Så här blandar du 32 och 64-bitars .so-filer i en app

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

Först jag vet att i en app tillåter inte blandad användning av olika arkitekturer av .so-filen (Del endast använder 32, den andra delen använder endast 64)

Så, jag försökte öppna en ny process för att dynamiskt ladda 64 och 32-bitars så filer, men System.load() kasta felet och appen kraschade! Hur löser du detta problem genom flera processer? Eller finns det något annat sätt att lösa detta?

5 Comments
Markus 07/27/2017
Välkommen till SO! Vänligen ta en stund att läsa hjälpsidorna , särskilt de avsnitt som heter "Vilka ämnen kan jag fråga om här?" och "Vilka typer av frågor borde jag undvika att fråga?" . Ta även med på turnén och läs om hur du ställer bra frågor . Slutligen lära dig hur du skapar ett minimalt, komplett och verifierbart exempel . Detaljer om fel skulle hjälpa till mycket.
Alex Cohn 07/27/2017
Det är en cool idé! Men vilken typ av barnprocess vill du börja? En tjänst? Jag tror inte att detta kan fungera, eftersom systemet bestämmer om du vill aktivera 32-bitarsläge baserat på analys av din APK, och JVM är inställd i enlighet därmed.
Alex Cohn 07/27/2017
Se stackoverflow.com/a/31879900/192373 : pm kan tvinga ABI när du installerar appen.
Carmelo M 07/28/2017
@ AlexCohn Tack! Jag håller med dig, en barnprocess (Aktivitet) kan inte lösa detta problem. [Stackoverflow.com/a/31879900/192373] fungerar inte, för jag vill att en del av funktionen använder 32-bitars .so och en del av funktionen använder 64-bitars .so, i samma app.
Carmelo M 07/28/2017
@AlexCohn Har du några andra idéer? Bemästra

1 Answers


Alex Cohn 07/30/2017.

Jo, jag försökte. På det här armeabi fungerar det: använd armeabi shared libs på vanligt sätt och kör en arm64-v8a körbar från Java med Runtime.exec () eller från C med system () .

Du kan lägga körbarheten i tillgångar och packa upp den manuellt, eller du kan fuska och byta namn på den så att den börjar med lib och slutar med .so ; Nu kan du lägga den här filen i jniLibs/armeabi katalogen.

Det motsatta sättet fungerar också: starta 32-bitars körbar (glöm inte -fPIE ) från 64-bitars app.

Se till att bibliotekets sökvägar inte kolliderar.

2 comments
Carmelo M 08/04/2017
Det är en cool idé !!! Mitt projekt liknar inte den grafiska transkodningsbakgrundsoperationen, men måste ladda den tredimensionella grafiken genom SurfaceView för att interagera med användarens gester. Hur man hanterar dessa gränssnitt interaktioner är ett stort problem, jag hoppas du kan ge mig några idéer, tack
Alex Cohn 08/04/2017
Jag tror inte att du kan hantera användargränssnitt eller utföra levande grafik genom interprocesskommunikation

Related questions

Hot questions

Language

Popular Tags