如何在应用程序中混合使用32位和64位.so文件

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

首先,我知道在应用程序中不允许混合使用不同的.so文件体系结构(部分只使用32,另一部分只使用64)

所以,我试图打开一个新的进程来动态加载64位和32位文件,但System.load()抛出错误和应用程序崩溃! 如何通过多个流程解决这个问题? 或者还有其他解决方法吗?

5 Comments
Markus 07/27/2017
欢迎来到SO! 请花些时间阅读帮助页面 ,特别是名为“我可以在这里问什么问题?”的部分。“我应该避免问什么类型的问题?” 。 也请参观并阅读如何提出好问题 。 最后,请了解如何创建一个最小,完整和可验证的示例 。 有关错误的详细信息会有很大帮助。
Alex Cohn 07/27/2017
这是一个很酷的主意! 但是你想开始什么样的儿童过程? 服务? 我认为这不会起作用,因为系统根据对APK的分析决定是否打开32位模式,并相应地设置JVM。
Alex Cohn 07/27/2017
请参阅stackoverflow.com/a/31879900/192373pm可以在安装应用程序pm强制使用ABI。
Carmelo M 07/28/2017
@AlexCohn谢谢! 我同意你,一个子进程(Activity)不能解决这个问题。[stackoverflow.com/a/31879900/192373]不工作,因为我想部分函数使用32位.so和部分函数在同一个应用程序中使用64位.so。
Carmelo M 07/28/2017
@AlexCohn你有什么其他想法吗? 主

1 Answers


Alex Cohn 07/30/2017.

那么,我确实尝试过。 从表面armeabi ,这是有效的:以常用的方式使用armeabi共享库“,并使用Runtime.exec()从Java运行arm64-v8a可执行文件,或使用system()从C运行arm64-v8a可执行文件。

您可以将可执行文件放在资产中并手动解压缩,也可以作弊并重命名,以便以lib开头并以.so结尾; 现在你可以把这个文件放在jniLibs/armeabi目录下。

相反的方式也适用:从64位应用程序启动32位可执行文件(不要忘记-fPIE )。

确保库搜索路径不冲突。

2 comments
Carmelo M 08/04/2017
这是一个很酷的主意! 我的项目不是类似于视频转码后台操作,而是需要加载三维图形,通过SurfaceView与用户手势进行交互。 如何处理这些UI交互是一个大问题,我希望你能给我一些想法,谢谢
Alex Cohn 08/04/2017
我不认为你可以通过进程间通信处理UI或执行实时图形

Related questions

Hot questions

Language

Popular Tags