1

我正在尝试使用有根的 Android 平板电脑。我需要在 C/C++ 中运行一些系统应用程序,这些系统应用程序可以在使用/不使用 NDK 的情况下作为本机应用程序运行。这将像现有的命令行应用程序(例如作为本机 ARM Linux 可执行文件的工具箱)一样工作。有这种可能吗?

4

4 回答 4

5

是的你可以。你可以使用 NDK 来做这件事,这会让你的事情变得更容易,交叉编译到 Android 支持的所有平台(ARM 变体和 x86)。您只需要像为本地 Java 方法创建共享库那样做。只需确保更改生成文件以使用BUILD_EXECUTABLE而不是BUILD_SHARED_LIBRARY创建可执行文件。当然,您不需要 APK 文件夹结构,只需要“jni”文件夹。

教程

创建项目文件夹:

mkdir project_folder
cd project_folder/jni
NDK_PROJECT_PATH=<path to>/project_folder

jni在文件夹中创建 Android.mk makefile

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := teste
LOCAL_SRC_FILES := teste.c

include $(BUILD_EXECUTABLE)

jni. 在这种情况下,您可以从上面的 makefile 中看到,它是teste.c

#include <stdio.h>


int main (){

    puts("Hello World");
    return 0;
}

现在转到您的项目文件夹并从那里运行 ndk-build:

# ~/Downloads/android-ndk-r8b/ndk-build 
Compile thumb  : teste <= teste.c
Executable     : teste
Install        : teste => libs/armeabi/teste

虽然它输出到 lib 文件夹,但它是一个可执行文件,您可以使用file

#file libs/armeabi/teste 
libs/armeabi/teste: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped
于 2012-09-14T15:33:01.690 回答
2

是的,这是可能的。当您下载 NDK 时,您会获得一组工具(编译器、链接器等)、头文件和库。它与其他交叉编译环境没有太大区别。

于 2012-09-14T15:13:24.987 回答
0

NDK 带有一个交叉编译器和足够的独立编程环境(包括和库)来移植简单的 C/C++ 应用程序以作为原生 Android 二进制文件运行。查看 NDK 中的 docs/STANDALONE-TOOLCHAIN.html 文件以获取文档。(可在kandroid.com在线获取。)

于 2012-09-14T15:50:20.313 回答
0

我相信 NDK 无法访问足够的系统服务来编写完整的应用程序。你仍然需要用 Java 编写应用程序的脚手架,但你可以编写大量的本地库供 Java 调用。

于 2012-09-14T16:02:40.767 回答