【发布时间】:2014-03-26 09:02:27
【问题描述】:
我有想要在 Android 库上执行的 C 代码。
我在 Windows 中通过NDK 编译了这段代码,如下所示:
set SYSROOT=%NDK%\platforms\android-17\arch-arm
cd %NDK%/toolchains/arm-linux-androideabi-4.6\prebuilt\windows-x86_64\bin
arm-linux-androideabi-gcc.exe --sysroot=%SYSROOT% -c "C:\main.c" -o "C:\main.o"
然后我通过adb推送了.obj文件:
adb push C:\main.o /data/local/tmp
adb shell chmod 777 /data/local/tmp/main.o
之后我尝试执行这个文件:
adb shell /data/local/tmp/main.o
但我收到以下错误:
[Android] not executable: magic=7F45
所以我尝试通过以下代码通过 Android 应用程序执行:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
String fileName="/data/local/tmp/main.o";
File file = new File(fileName);
//get file type
MimeTypeMap mime = MimeTypeMap.getSingleton();
String ext = file.getName().substring(file.getName().indexOf(".")+1);
String type = mime.getMimeTypeFromExtension(ext);
//run
intent.setDataAndType(Uri.fromFile(file), type);
startActivity(intent);
}
但是当我尝试运行我的应用程序时,它关闭并且我收到了消息:
unfortunately, myApplication has stopped
谁能帮帮我?
编辑:
我认为编译与我的 Android 机器不匹配。如何找到需要为特定 Android 版本编译的 gcc? NDK(%NDK%\toolchains) 里面有一些编译器,不知道该用哪一个。
【问题讨论】:
-
这不是为 Android 构建的正确方法。您应该遵循 NDK 文档并使用带有 ndk-build 的 Android.mk 来构建可执行文件,或者更符合 NDK 的意图,从 Java 应用程序调用的 jni 共享库。您还可以按照说明创建独立的工具链并与现有的项目构建系统一起使用,但这很棘手。
标签: android c android-ndk adb