gpt4 book ai didi

android - 从 android 应用程序运行 C 二进制文件 : particulare case

转载 作者:太空宇宙 更新时间:2023-11-04 07:01:46 24 4
gpt4 key购买 nike

我有一个要在 Android 上启动的 C 项目。

我使用 NDK 编译项目,生成二进制文件并将其嵌入到应用程序中以启动它。该项目使用了autotools,我使用了androgenizer生成和调整 Android.mk秒。它还使用 openssl,所以我按照 this 为 android 编译了它。 , 和二进制使用编译 libcrypto.so .

应用程序只做:

  • 加载 libcrypto.so
  • 复制二进制文件
  • 执行二进制文件

这是一段代码

Process mybinProcess;
File target = new File(getFilesDir(), "mybin");
InputStream in = getResources().openRawResource(R.raw.mybin);

try {
OutputStream out = new FileOutputStream(target);
FileUtils.copy(in, out);
FileUtils.chmod(target, 0755);

if(target.exists()){
String[] command = {target.getAbsolutePath()};
mybinProcess = Runtime.getRuntime().exec(command);
BufferedReader output = FileUtils.getOuput(mybinProcess);
BufferedReader error = FileUtils.getError(mybinProcess);

// [...] print stdout et stderr

mybinProcess.waitFor();
int exitval=mybinProcess.exitValue(); //exit value is 1

stdout 给我二进制文件的语法错误:

/data/data/com.myproject.mybin/files/mybin[1]: syntax error: ' 4   4' unexpected

当我尝试从 adb shell 启动二进制文件时,出现了错误

root@generic_x86:/data/user/0/com.myproject/files # ./mybin
/system/bin/sh: ./mybin: not executable: 32-bit ELF file

我打开了mybin在十六进制编辑器中,语法错误出现在库 /usr/lib/libc.so.1 的字符串之前.但是在模拟器上目录 /usr不存在。我认为它来自 ndk,ndk-build 的最后一个编译行从 <ndk>/platforms/android-19/arch-arm/usr/lib 中包含一个.此外,在<ndk>/platforms/android-19/arch-arm/usr/lib只有libc.so而不是 libc.so.1 .

关于我可以在哪里搜索以修复它并使其正常工作,我有什么想法吗?


我的配置:

  • NDK:r11c
  • Android 平台:19
  • 安卓工作室:2.1
  • SDK : r24.4.1
  • mybin (ndk) 在 Linux 上编译,在 Windows 上编译 apk (Android Studio)

最佳答案

构建可在 Android 上运行的可执行文件是 possible ,但不是正确的方法 IMO,您应该为您的 native 二进制库构建一个 JNI 接口(interface)并调用 C 库。

这里有一个简单的例子:

http://developer.android.com/ndk/samples/sample_hellojni.html

我们使用 javacpp 取得了很大的成功如果您有很多 JNI 调用,则生成 JNI 代码。如果您只需要一两个电话,我可能会手写。

关于android - 从 android 应用程序运行 C 二进制文件 : particulare case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37208497/

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