Hoe 32- en 64-bit .so-bestanden in een app te mixen

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

Ten eerste weet ik dat in een app gemengd gebruik van verschillende architecturen van het .so-bestand niet toestaat (deel maakt alleen gebruik van 32, het andere deel gebruikt slechts 64)

Dus ik probeerde een nieuw proces te openen om dynamisch 64 en 32-bits bestanden te laden, maar System.load() gooide de fout en app gecrasht! Hoe dit probleem op te lossen door meerdere processen? Of is er een andere manier om dit op te lossen?

5 Comments
Markus 07/27/2017
Welkom bij SO! Neem even de tijd om de helppagina's te lezen, in het bijzonder de secties met de titel "Welke onderwerpen kan ik hier vragen?" en "Welke soorten vragen moet ik vermijden om te vragen?" . Neem ook alsjeblieft de rondleiding en lees hoe je goede vragen kunt stellen . Ten slotte kunt u leren hoe u een Minimaal, volledig en verifieerbaar voorbeeld kunt maken . Details over fouten zouden veel helpen.
Alex Cohn 07/27/2017
Dat is een cool idee! Maar wat voor soort kinderproces wil je beginnen? Een dienst? Ik denk niet dat dit zou kunnen werken, omdat het systeem beslist om de 32-bits modus in te schakelen op basis van analyse van uw APK en de JVM dienovereenkomstig is ingesteld.
Alex Cohn 07/27/2017
Zie stackoverflow.com/a/31879900/192373 : de pm kan de ABI forceren tijdens het installeren van de app.
Carmelo M 07/28/2017
@AlexCohn Bedankt! Ik ben het met je eens, een kindproces (activiteit) kan dit probleem niet oplossen. [Stackoverflow.com/a/31879900/192373] werkt niet, omdat ik wil dat een deel van de functie 32-bits .so gebruikt, en een deel van de functie gebruikt 64-bit .so, in dezelfde app.
Carmelo M 07/28/2017
@AlexCohn Hebt u nog andere ideeën? Meester

1 Answers


Alex Cohn 07/30/2017.

Wel, ik heb het geprobeerd. Op het eerste gezicht werkt dit: gebruik armeabi gedeelde libs 'op de gebruikelijke manier' en voer een uitvoerbaar bestand arm64-v8a uit vanuit Java met Runtime.exec () of vanuit C met system () .

Je kunt het uitvoerbare bestand in assets plaatsen en het handmatig uitpakken, of je kunt vals spelen en het hernoemen, zodat het begint met lib en eindigt met .so ; nu kunt u dit bestand in de jniLibs/armeabi directory plaatsen.

De andere kant werkt ook: start een 32-bits uitvoerbaar bestand (vergeet niet -fPIE ) van de 64-bits app.

Zorg ervoor dat de zoekpaden van de bibliotheek niet botsen.

2 comments
Carmelo M 08/04/2017
Dat is een leuk idee !!! Mijn project is niet vergelijkbaar met de achtergrondbewerking van de video transcodering, maar moet de driedimensionale afbeeldingen laden via de SurfaceView om te communiceren met de gebruikersbewegingen. Hoe om te gaan met deze gebruikersinteractie is een groot probleem, ik hoop dat je me wat ideeën kunt geven, dank je
Alex Cohn 08/04/2017
Ik denk niet dat je de gebruikersinterface aankunt of live graphics uitvoert via interprocess-communicatie

Related questions

Hot questions

Language

Popular Tags