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

标签 java android linux android-ndk ndk-build

首先,我知道在一个app中不允许混合使用不同架构的.so文件(一部分只用32位,另一部分只用64位)

于是,我尝试开启一个新进程来动态加载64位和32位so文件,但是System.load()抛出错误,app崩溃了!如何通过多进程解决这个问题?还是有其他方法可以解决?

最佳答案

好吧,我试过了。从表面上看,这是可行的:“以通常的方式”使用 armeabi 共享库,并使用 Runtime.exec() 或从 Java 运行 arm64-v8a 可执行文件来自 C 与 system() .

您可以将可执行文件放在 Assets 中并手动解压,或者您可以cheat并重命名它,使其以 lib 开头并以 .so 结尾;现在你可以把这个文件放在 jniLibs 中/armeabi 目录。

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

确保库搜索路径不冲突。

关于java - 如何在应用程序中混合使用 32 位和 64 位 .so 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45353090/

相关文章:

java - 比较两个使用断言转换为对象的json列表

java - 在多台机器上运行 tomcat 时的 Quartz 集群设置

android - 错误 :No such property: GROUP for class: org. gradle.api.publication.maven.internal.ant.DefaultGroovyMavenDeployer

java - 无法在 Android 中使用 BroadcastReceiver 上下文初始化接口(interface)

linux - 如何为 ETH "link down"/"link up"设置 udev 规则?

c++ - 如何从 C/C++ 在 Linux 中设置 IRQ 优先级?

java - 如何使用 jexcelapi 或 Apache HSSF 跟踪更改

java - 我如何在 Java 中转义 URL(文档不清楚)?

android - Android抽象类SQLiteOpenHelper中的version是什么意思

linux - 用于更新 Spacewalk channel 的 Oracle Linux 7 信息库