gpt4 book ai didi

android - 如何在我的 Android 应用程序中运行打包的二进制文件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:31 25 4
gpt4 key购买 nike

我有一个 Android 应用程序需要运行我编写的自定义二进制应用程序。我已经使用 ndk 构建了二进制文件并将其打包在 res/raw 下的 apk 中

我做了这样的事情来首先运行 su 进程。

Process process;
process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());

之后我该怎么做才能从资源中运行二进制文件?这里还有另一个问题建议使用 AssetManager,但我不明白如何做。我检查了一些带有二进制文件的开源应用程序(android-wifi-tether 等),但我在其源代码中的任何地方都没有看到 AssetManager,也不明白他们是如何做到的。

最佳答案

有一种令人讨厌的 hacky 方法可以欺骗 Android 为您做这件事(我成功地做到了)。

安装应用程序时,Android 会将适合您架构的库从 libs/$ARCH/libfoo.so 复制到 /data/data/$PACKAGE/libs 给你。棘手的一点是它将复制lib$SOMETHING.so 形式的文件。它甚至会保留执行权限。

因此,如果您将 su 可执行文件重命名为 libsu.so,Android 将为您完成所有工作。然后,您可以使用 Activity 提供的路径找到它。

但是,请注意! Android 不是为运行独立应用而设计的,Zygote 确实不太适合 fork 。我发现 Runtime.exec() 存在竞争条件并且可能会崩溃。我发现的唯一可靠技术是使用 JNI 实现一个小库,该库执行 fork 和 exec,而不触及 fork 和 exec 之间的任何其他数据。我在这里确实有关于此的所有详细信息的问题,但我找不到它。

我现在无法访问任何代码,但如果您需要,我可以在周一为您找到一些代码。

关于android - 如何在我的 Android 应用程序中运行打包的二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6839767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com