使用c/c ++的Android系统应用程序?

hsn*_*snm 1 c linux android arm native

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

And*_*ani 5

是的你可以.您可以使用NDK来实现它,使您更容易使用,交叉编译到Android支持的所有平台(ARM变体和x86).您只需要像为本机Java方法创建共享库一样.只需确保更改要使用的makefile BUILD_EXECUTABLE而不是BUILD_SHARED_LIBRARY创建可执行文件.当然你不需要APK文件夹结构,只需要"jni"文件夹.

教程

创建项目文件夹:

mkdir project_folder
cd project_folder/jni
NDK_PROJECT_PATH=<path to>/project_folder
Run Code Online (Sandbox Code Playgroud)

jni文件夹中创建Android.mk makefile

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := teste
LOCAL_SRC_FILES := teste.c

include $(BUILD_EXECUTABLE)
Run Code Online (Sandbox Code Playgroud)

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

#include <stdio.h>


int main (){

    puts("Hello World");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

# ~/Downloads/android-ndk-r8b/ndk-build 
Compile thumb  : teste <= teste.c
Executable     : teste
Install        : teste => libs/armeabi/teste
Run Code Online (Sandbox Code Playgroud)

虽然它是输出到lib文件夹,但它是一个可执行文件,你可以检查 file

#file libs/armeabi/teste 
libs/armeabi/teste: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped
Run Code Online (Sandbox Code Playgroud)