2017-07-27 118 views
1

首先,我知道在一個應用程序中不允許混合使用不同的.so文件體系結構(部分只使用32,其他部分只使用64 )如何在應用程序中混合使用32位和64位.so文件

所以,我試圖打開一個新的進程動態加載64位和32位所以文件,但System.load()扔錯誤和應用程序崩潰!如何通過多個流程解決這個問題?或者還有其他解決方法嗎?

+0

歡迎來到SO!請花些時間閱讀[幫助頁面](http://stackoverflow.com/help),尤其是名爲[「我可以問些什麼話題?」]的章節(http://stackoverflow.com/help/)討論話題)和[「我應該避免問什麼類型的問題?」](http://stackoverflow.com/help/dont-ask)。請參閱[tour](http://stackoverflow.com/tour)並閱讀[如何提出良好問題](http://stackoverflow.com/help/how-to-ask)。最後,請學習如何創建[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。有關錯誤的詳細信息會有很大幫助。 – Markus

+0

這是一個很酷的主意!但是你想開始什麼樣的兒童過程?服務?我認爲這不會起作用,因爲系統根據對APK的分析決定是否打開32位模式,並相應地設置JVM。 –

+0

請參閱https://stackoverflow.com/a/31879900/192373:** pm **可以在安裝應用程序時強制使用ABI。 –

回答

1

嗯,我確實嘗試過。從表面上看,這是可行的:使用armeabi共享庫以'通常的方式',並運行一個arm64-v8a可執行文件從Java與Runtime.exec()或從C與system()

你可以把資產的可執行文件和手動解壓,或者你可以cheat並使其與lib開始,以.so結束其重命名;現在你可以把這個文件放在jniLibs/armeabi目錄下。

相反的方式也起作用:從64位應用程序啓動32位可執行文件(不要忘記-fPIE)。

確保庫搜索路徑不發生衝突。

+0

這是一個很酷的主意!我的項目不是類似於視頻轉碼後臺操作,而是需要加載三維圖形,通過SurfaceView與用戶手勢進行交互。如何處理這些UI交互是一個大問題,我希望你能給我一些想法,謝謝 –

+0

我不認爲你可以通過進程間通信來處理UI或執行活動圖形 –

相關問題