Πώς να αναμίξετε αρχεία 32 και 64-bit .so σε μια εφαρμογή

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

Πρώτον, γνωρίζω ότι σε μια εφαρμογή δεν επιτρέπεται ανάμεικτη χρήση διαφορετικών αρχιτεκτονικών του αρχείου .so (το μέρος χρησιμοποιεί μόνο 32, το άλλο μέρος χρησιμοποιεί μόνο 64)

Έτσι, προσπάθησα να System.load() μια νέα διαδικασία για να φορτώσω δυναμικά 64 και 32 bit τέτοια αρχεία, αλλά το System.load() έριξε το σφάλμα και η εφαρμογή συνετρίβη! Πώς να λύσετε αυτό το πρόβλημα μέσω πολλαπλών διαδικασιών; Ή μήπως υπάρχει άλλος τρόπος επίλυσης αυτού;

5 Comments
Markus 07/27/2017
Καλώς ήρθατε στο SO! Αφιερώστε λίγο χρόνο για να διαβάσετε τις σελίδες βοήθειας , ειδικά τις ενότητες με τίτλο "Τι θέματα μπορώ να ρωτήσω εδώ;" και "Τι είδους ερωτήσεις πρέπει να αποφύγω να ρωτάω"; . Επίσης, παρακαλώ πάρτε την περιοδεία και διαβάστε πώς να θέσετε καλές ερωτήσεις . Τέλος, μάθετε πώς μπορείτε να δημιουργήσετε ένα ελάχιστο, πλήρες και επαληθεύσιμο παράδειγμα . Λεπτομέρειες σχετικά με το σφάλμα θα βοηθούσαν πολύ.
Alex Cohn 07/27/2017
Αυτή είναι μια δροσερή ιδέα! Αλλά τι είδους παιδική διαδικασία θέλετε να ξεκινήσετε; Μια υπηρεσία? Δεν νομίζω ότι αυτό θα μπορούσε να λειτουργήσει, επειδή το σύστημα αποφασίζει αν θα ενεργοποιήσει τη λειτουργία 32 bit με βάση την ανάλυση του APK σας και η JVM θα ρυθμιστεί ανάλογα.
Alex Cohn 07/27/2017
Δείτε το stackoverflow.com/a/31879900/192373 : το pm μπορεί να αναγκάσει το ABI κατά την εγκατάσταση της εφαρμογής.
Carmelo M 07/28/2017
@ ΑlexCohn Ευχαριστώ! Συμφωνώ μαζί σας, μια διαδικασία παιδιού (Δραστηριότητα) δεν μπορεί να λύσει αυτό το πρόβλημα. [Stackoverflow.com/a/31879900/192373] δεν λειτουργεί, επειδή θέλω μέρος της λειτουργίας να χρησιμοποιεί 32-bit .so, και μέρος της λειτουργία χρησιμοποιεί 64-bit .so, στην ίδια εφαρμογή.
Carmelo M 07/28/2017
@AlexCohn Έχετε άλλες ιδέες; Κύριος

1 Answers


Alex Cohn 07/30/2017.

Λοιπόν, το έκανα. Στο armeabi του, αυτό λειτουργεί: χρησιμοποιήστε το armeabi shared libs 'με τον συνήθη τρόπο' και εκτελέστε ένα εκτελέσιμο arm64-v8a από την Java με το Runtime.exec () ή από το C με το σύστημα () .

Μπορείτε να βάλετε το εκτελέσιμο σε στοιχεία ενεργητικού και να το ξεδιαλγάσετε με το χέρι, ή μπορείτε να το εξαπατήσετε και να το μετονομάσετε έτσι ώστε να ξεκινά με lib και να τελειώνει με .so ; τώρα μπορείτε να βάλετε αυτό το αρχείο στον κατάλογο jniLibs/armeabi .

Ο αντίθετος τρόπος λειτουργεί επίσης: εκκινήστε εκτελέσιμο αρχείο 32 bit (μην ξεχνάτε -fPIE ) από εφαρμογή 64 bit.

Βεβαιωθείτε ότι οι διαδρομές αναζήτησης της βιβλιοθήκης δεν έρχονται σε σύγκρουση.

2 comments
Carmelo M 08/04/2017
Αυτή είναι μια δροσερή ιδέα! Το σχέδιό μου δεν είναι παρόμοιο με τη λειτουργία φόντου μεταγλώττισης βίντεο, αλλά πρέπει να φορτώσετε τα τρισδιάστατα γραφικά, μέσω του SurfaceView, για να αλληλεπιδράσετε με τις χειρονομίες του χρήστη. Πώς να αντιμετωπίσετε αυτή την αλληλεπίδραση UI είναι ένα μεγάλο πρόβλημα, ελπίζω να μου δώσετε μερικές ιδέες, σας ευχαριστώ
Alex Cohn 08/04/2017
Δεν νομίζω ότι μπορείτε να χειριστείτε το UI ή να εκτελέσετε ζωντανά γραφικά μέσω επικοινωνίας μεταξύ διαδικασιών

Related questions

Hot questions

Language

Popular Tags