Jak połączyć 32 i 64-bitowe pliki .so w aplikacji

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

Po pierwsze, wiem, że w aplikacji nie można używać mieszanych różnych architektur pliku .so (Część używa tylko 32, druga część tylko 64)

Tak więc, próbowałem otworzyć nowy proces, aby dynamicznie ładować 64 i 32-bitowe pliki, ale System.load() wyrzucił błąd i aplikacja System.load() awarii! Jak rozwiązać ten problem za pomocą wielu procesów? Czy jest jakiś inny sposób rozwiązania tego problemu?

5 Comments
Markus 07/27/2017
Witamy w SO! Poświęć trochę czasu na przeczytanie stron pomocy , szczególnie w sekcjach zatytułowanych "O jakie tematy mogę tutaj zapytać?". i "Jakiego rodzaju pytań powinienem unikać?" . Zapraszam również na wycieczkę i przeczytam o tym, jak zadawać dobre pytania . Na koniec, dowiedz się, jak utworzyć minimalny, kompletny i sprawdzalny przykład . Szczegóły dotyczące błędu bardzo by pomogły.
Alex Cohn 07/27/2017
To świetny pomysł! Ale jaki rodzaj procesu potomnego chcesz rozpocząć? Serwis? Nie sądzę, aby to mogło działać, ponieważ system decyduje, czy włączyć tryb 32-bitowy na podstawie analizy pliku APK, a JVM jest odpowiednio skonfigurowana.
Alex Cohn 07/27/2017
Zobacz stackoverflow.com/a/31879900/192373 : pm może wymusić ABI podczas instalowania aplikacji.
Carmelo M 07/28/2017
@AlexCohn Dzięki! Zgadzam się z tobą, proces potomny (Activity) nie może rozwiązać tego problemu. [Stackoverflow.com/a/31879900/192373] nie działa, ponieważ chcę, aby część funkcji używała 32-bitowego .so, a część funkcja używa 64-bitowego .so, w tej samej aplikacji.
Carmelo M 07/28/2017
@AlexCohn Czy masz jakieś inne pomysły? Mistrz

1 Answers


Alex Cohn 07/30/2017.

Cóż, próbowałem. Na pierwszy armeabi działa to: użyj armeabi shared libs "w zwykły sposób" i uruchom plik wykonywalny arm64-v8a z Java z Runtime.exec () lub C z system () .

Możesz umieścić plik wykonywalny w zasobach i rozpakować go ręcznie lub możesz go oszukać i zmienić jego nazwę tak, aby zaczynał się od lib i kończył się .so ; teraz możesz umieścić ten plik w katalogu jniLibs/armeabi .

Działa również w przeciwny sposób: uruchom 32-bitowy plik wykonywalny (nie zapomnij -fPIE ) z aplikacji 64-bitowej.

Upewnij się, że ścieżki wyszukiwania bibliotek nie kolidują.

2 comments
Carmelo M 08/04/2017
To świetny pomysł !!! Mój projekt nie jest podobny do operacji transkodowania w tle, ale trzeba załadować trójwymiarową grafikę, poprzez SurfaceView, aby współdziałać z gestami użytkownika. Jak sobie poradzić z tymi interakcjami w interfejsie użytkownika to duży problem, mam nadzieję, że możesz mi dać kilka pomysłów, dziękuję
Alex Cohn 08/04/2017
Nie sądzę, abyś mógł obsługiwać interfejs użytkownika lub wykonywać grafikę na żywo za pośrednictwem komunikacji międzyprocesowej

Related questions

Hot questions

Language

Popular Tags