Come mescolare file .so a 32 e 64 bit in un'app

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

Innanzitutto, so che in un'app non è consentito l'uso misto di diverse architetture del file .so (parte utilizza solo 32, l'altra parte utilizza solo 64)

Così, ho provato ad aprire un nuovo processo per caricare dinamicamente file a 64 e 32 bit, ma System.load() lancia l'errore e l'app si è bloccata! Come risolvere questo problema attraverso più processi? O c'è un altro modo per risolvere questo?

5 Comments
Markus 07/27/2017
Benvenuto in SO! Si prega di prendere un po 'di tempo per leggere le pagine di aiuto , in particolare le sezioni denominate "Quali argomenti posso chiedere di qui?" e "Quali tipi di domande dovrei evitare di chiedere?" . Inoltre, per favore, prendi il tour e leggi come fare delle buone domande . Infine, ti preghiamo di imparare come creare un esempio minimo, completo e verificabile . Dettagli sull'errore sarebbero di grande aiuto.
Alex Cohn 07/27/2017
Questa è una bella idea! Ma che tipo di processo figlio vuoi iniziare? Un servizio? Non penso che questo potrebbe funzionare, perché il sistema decide se attivare la modalità a 32 bit in base all'analisi del tuo APK e la JVM viene configurata di conseguenza.
Alex Cohn 07/27/2017
Vedi stackoverflow.com/a/31879900/192373 : il pm può forzare l'ABI mentre installa l'app.
Carmelo M 07/28/2017
@AlexCohn Grazie! Sono d'accordo con te, un processo figlio (Attività) non può risolvere questo problema. [StackOverflow.com/a/31879900/192373] non funziona, perché voglio che parte della funzione usi .so 32-bit, e parte del la funzione utilizza 64so .so, nella stessa app.
Carmelo M 07/28/2017
@AlexCohn Hai altre idee? Maestro

1 Answers


Alex Cohn 07/30/2017.

Beh, ci ho provato A prima vista, funziona: usa le librerie condivise armeabi 'nel solito modo' ed esegui un eseguibile arm64-v8a da Java con Runtime.exec () o da C con system () .

Puoi mettere l'eseguibile nelle risorse e decomprimerlo manualmente, oppure puoi imbrogliarlo e rinominarlo in modo che inizi con lib e finisca con .so ; ora puoi inserire questo file nella directory jniLibs/armeabi .

Funziona anche nel modo opposto: avvia l'eseguibile a 32 bit (non dimenticare -fPIE ) dall'app 64-bit.

Assicurati che i percorsi di ricerca della libreria non entrino in conflitto.

2 comments
Carmelo M 08/04/2017
Questa è una bella idea !!! Il mio progetto non è simile all'operazione di background di transcodifica video, ma è necessario caricare la grafica tridimensionale, attraverso SurfaceView per interagire con i gesti dell'utente. Come affrontare questa interazione con l'interfaccia utente è un grosso problema, spero che tu possa darmi qualche idea, grazie
Alex Cohn 08/04/2017
Non penso che tu possa gestire l'interfaccia utente o eseguire grafica dal vivo attraverso la comunicazione tra processi

Related questions

Hot questions

Language

Popular Tags