如何为Android设备编写死的简单本机SERVER程序(不是应用程序)?

ern*_*rn0 10 linux android native pthreads

首先,我相信,这不是一个重复的问题.我不想用NDK编写本机应用程序,我只想将Android设备用作廉价的Linux 服务器.在此上下文中,服务器表示没有UI的程序.此外,服务器是用裸C++编写的,但根本不使用任何库,所以这就是为什么这个问题与其他问题不同.

故事

我们为Linux编写了一个小型服务器,它有一个webserver接口,所以你用一个vanilla浏览器连接它,你可以玩它.我们已将其编译为Linux/x86,Linux/ARM(GuruPlug),Linux/PPC(某种NAS)和Mac OS X Darwin平台.

Linux/ARM版本在我的PalmPré智能手机上运行良好.我刚刚将可执行文件复制到我的手机上(在webOS场景中,没有像越狱这样的东西,有一个官方的"开发者模式",如果你通过输入一个密钥组合激活,你可以用ssh登录你的手机或使用本地ssh应用程序).因此,即使是最小的Linux设备,我们的小型服务器程序(守护程序,可能会说)也在运行.(将千兆级桌面计算机的浏览器连接到智能手机服务器时,这很有趣.)

服务器程序设计为即使在最小的Linux上运行(正如我所说,它运行在NAS,路由器,智能手机上),它只需要STDLIB和PTHREADS.

这个问题

在Android设备上运行简单的服务器程序的直接方法是什么?

  • 我们还没有Android设备.但我认为,任何基于ARM的都可以.服务器的内存占用空间很小,没问题.
  • 我假设,设备必须是root用户才能将可执行文件复制到它并运行.
  • 我不想在设备上安装全新的Linux.它应该继续运行Android,而我们的服务器在后台运行.对于Dalvik而言足够的Linux发行版对我们的服务器来说已经足够了,我很确定.
  • 服务器不应该使用外部设备(USB,触摸屏,音频,摄像头,麦克风 - 谢谢,而不是)仅用于网络服务器的端口(例如8080),这不是由Android分配的.
  • 我有ARM GCC工具链,它的安装不是问题的一部分(除非有技巧).
  • 程序的安装应该是手动的(scp,无论如何).此外,我不想制作包或任何自动部署.
  • 启动服务器程序的问题是另一个问题,我们现在忽略了.

所以,我想用Andrid设备(手机,平板电脑)做同样的事情,就像我在我的webOS设备上做的那样:复制服务器程序并运行它.计算机就是这样,运行程序,不是吗?;)

Mic*_*man 5

我还没有真正尝试过,但是应该可以使用您拥有的ARM GCC编译器,或者使用Android NDK提供的编译器来编译本机应用程序,就像在桌面上使用它一样.

如果您的应用程序很小(文件太多),您可以手动(或在简单的Makefile中)管理编译.以下命令来自AndroidLuaJIT编译指南:

/tmp$ cat test.c
#include <stdio.h>
int main() {
        printf("Hello world!\n");
        return 0;
}
/tmp$ NDK=/opt/ndk
/tmp$ NDKABI=8
/tmp$ NDKVER=$NDK/toolchains/arm-linux-androideabi-4.4.3
/tmp$ NDKP=$NDKVER/prebuilt/darwin-x86/bin/arm-linux-androideabi-
/tmp$ NDKF="--sysroot $NDK/platforms/android-$NDKABI/arch-arm"
/tmp$ ${NDKP}gcc $NDKF -o test test.c 
/tmp$ file test
test: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
Run Code Online (Sandbox Code Playgroud)

显然,如果您使用的是Linux(不是Mac OS X,也不确定Windows),请使用linux-x86而不是darwin-x86将路径更改为NDK安装它的位置.

现在,您必须将已编译的二进制文件移动到您的Android设备,然后运行adb shell以查看它是否有效:

/tmp$ ADB=/opt/sdk/platform-tools/adb
/tmp$ $ADB push test /data/
332 KB/s (3343 bytes in 0.009s)
/tmp$ $ADB shell
# /data/test
Hello world!
Run Code Online (Sandbox Code Playgroud)


小智 1

你肯定需要一个已root的安卓设备。我建议您安装busybox以获得一堆不错的命令行工具,例如wget, tar, gzip等等。您可以使用 获得对设备的 shell 访问权限adb shell,然后su获得 root 访问权限。您可以使用adb pushwget将服务器放置在设备上。
/system 分区以只读方式安装,并且根据制造商的不同,有很多保护措施限制您在那里写入,因此您应该将服务器复制到 /data 分区上的某个位置(例如mkdir /data/myserver)。在此之后,一切都应该非常简单。