Sådan blandes 32 og 64-bit .so filer i en app

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

For det første ved jeg, at i en app ikke tillader blandet brug af forskellige arkitekturer af .so filen (Del kun bruger 32, den anden del bruger kun 64)

Så jeg forsøgte at åbne en ny proces til dynamisk at indlæse 64 og 32-bit så filer, men System.load() kaster fejlen og appen faldt ned! Sådan løses dette problem gennem flere processer? Eller er der nogen anden måde at løse dette på?

5 Comments
Markus 07/27/2017
Velkommen til SO! Brug venligst lidt tid til at læse hjælpsiderne , især afsnittene "Hvilke emner kan jeg spørge om her?" og "Hvilke typer spørgsmål skal jeg undgå at spørge?" . Også tag turen og læs om, hvordan du stiller gode spørgsmål . Endelig bedes du lære at oprette et minimalt, fuldstændigt og verificerbart eksempel . Oplysninger om fejl ville hjælpe meget.
Alex Cohn 07/27/2017
Det er en god ide! Men hvilken slags børneproces vil du starte? En tjeneste? Jeg tror ikke, at dette kunne fungere, fordi systemet bestemmer, om du vil tænde 32-bit-tilstand baseret på analyse af din APK, og JVM'en er konfigureret i overensstemmelse hermed.
Alex Cohn 07/27/2017
Se stackoverflow.com/a/31879900/192373 : pm'en kan tvinge ABI under installationen af ​​appen.
Carmelo M 07/28/2017
@ AlexCohn Tak! Jeg er enig med dig, en børneproces (Aktivitet) kan ikke løse dette problem. [Stackoverflow.com/a/31879900/192373] virker ikke, fordi jeg vil have en del af funktionen, der bruger 32-bit .so og en del af funktion bruger 64-bit. så i samme app.
Carmelo M 07/28/2017
@AlexCohn Har du andre ideer? Mestre

1 Answers


Alex Cohn 07/30/2017.

Nå, jeg prøvede. På forsiden fungerer dette: Brug armeabi shared libs 'på den sædvanlige måde' og kør en arm64-v8a eksekverbar fra Java med Runtime.exec () eller fra C med system () .

Du kan sætte den eksekverbare i aktiver og udpakke den manuelt, eller du kan snyde og omdøbe den, så den starter med lib og slutter med .so ; nu kan du sætte denne fil i jniLibs/armeabi biblioteket.

Den modsatte måde virker også: -fPIE 32-bit eksekverbar (glem ikke -fPIE ) fra 64-bit app.

Sørg for, at bibliotekets søgeveje ikke kolliderer.

2 comments
Carmelo M 08/04/2017
Det er en cool ide !!! Mit projekt svarer ikke til video-transcoding-baggrundsoperationen, men skal indlæse den tredimensionale grafik gennem SurfaceView for at interagere med brugerbevægelserne. Hvordan man håndterer disse UI interaktion er et stort problem, jeg håber du kan give mig nogle ideer, tak
Alex Cohn 08/04/2017
Jeg tror ikke, du kan håndtere brugergrænsefladen eller udføre live grafik gennem interprocess kommunikation

Related questions

Hot questions

Language

Popular Tags