Bagaimana untuk menggabungkan 32 dan 64-bit .so fail dalam aplikasi

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

Pertama, saya tahu bahawa dalam aplikasi tidak membenarkan penggunaan bercampur pelbagai arsitektur fail .so (Bahagian hanya menggunakan 32, bahagian lain hanya menggunakan 64)

Jadi, saya cuba Buka proses baru untuk dinamik memuat 64 dan 32 bit supaya fail, tetapi System.load() membuang kesilapan dan aplikasi jatuh! Bagaimana untuk menyelesaikan masalah ini melalui pelbagai proses? Atau ada cara lain untuk menyelesaikannya?

5 Comments
Markus 07/27/2017
Selamat datang ke SO! Sila luangkan sedikit masa untuk membaca halaman bantuan , terutamanya bahagian yang bernama "Apakah topik yang boleh saya tanyakan di sini?" dan "Apakah jenis soalan yang harus saya hindari bertanya?" . Sila juga ambil lawatan dan membaca tentang cara bertanya soalan yang baik . Akhir sekali sila belajar cara membuat Contoh Minimal, Lengkap, dan Boleh Diperiksa . Butiran mengenai kesilapan akan banyak membantu.
Alex Cohn 07/27/2017
Itulah idea yang hebat! Tetapi apakah jenis proses anak yang anda mahu mulakan? Perkhidmatan? Saya tidak fikir ini boleh berfungsi, kerana sistem memutuskan sama ada untuk menghidupkan mod 32-bit berdasarkan analisa APK anda, dan JVM disediakan dengan sewajarnya.
Alex Cohn 07/27/2017
Lihat stackoverflow.com/a/31879900/192373 : pm boleh memaksa ABI semasa memasang aplikasi.
Carmelo M 07/28/2017
@AlexCohn Terima kasih! Saya bersetuju dengan anda, proses kanak-kanak (Aktiviti) tidak dapat menyelesaikan masalah ini. [Stackoverflow.com/a/31879900/192373] tidak berfungsi, kerana saya mahu sebahagian daripada fungsi menggunakan 32-bit .so, dan sebahagian daripada fungsi menggunakan 64-bit .so, dalam aplikasi yang sama.
Carmelo M 07/28/2017
@AlexCohn Adakah anda mempunyai idea lain? Sarjana

1 Answers


Alex Cohn 07/30/2017.

Nah, saya cuba. Di hadapannya, ini berfungsi: gunakan armeabi bersama shared armeabi 'dengan cara yang biasa', dan jalankan arm64-v8a boleh dieksekusi dari Java dengan Runtime.exec () atau dari C dengan system () .

Anda boleh meletakkan aset yang boleh laku dan membongkarnya secara manual, atau anda boleh menipu dan menamakannya supaya ia bermula dengan lib dan berakhir dengan .so ; kini anda boleh meletakkan fail ini dalam direktori jniLibs/armeabi .

Cara bertentangan juga berfungsi: melancarkan 32-bit boleh laksana (jangan lupa -fPIE ) dari aplikasi 64-bit.

Pastikan laluan carian perpustakaan tidak bertembung.

2 comments
Carmelo M 08/04/2017
Itulah idea yang keren !!! Projek saya tidak serupa dengan operasi latar belakang transcoding video, tetapi perlu memuatkan grafik tiga dimensi, melalui SurfaceView untuk berinteraksi dengan gerak isyarat pengguna. Bagaimana menangani interaksi UI ini adalah satu masalah besar, saya harap anda dapat memberi saya beberapa idea, terima kasih
Alex Cohn 08/04/2017
Saya tidak fikir anda boleh mengendalikan UI atau melakukan grafik langsung melalui komunikasi antara proses

Related questions

Hot questions

Language

Popular Tags