2016-11-13 61 views
1

我想构建一个android应用程序的小应用程序,我可以从android命令行运行,同时通过ssh远程连接到android设备。我不想要任何形式的按钮/启动器/图标或GUI界面。我该如何构建一个android的命令行应用程序?

如果可能的话,我宁愿在golang中这样做。

我尝试使用gomobilegolang.org/x/mobile),但是当我把我的APK设备上,并尝试运行它,我得到的错误:

[email protected]:/data/data/berserker.android.apps.sshdroid/home $ am start gserv.apk           
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] pkg=gserv.apk } 
java.lang.SecurityException: Permission Denial: startActivity asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL 
    at android.os.Parcel.readException(Parcel.java:1546) 
    at android.os.Parcel.readException(Parcel.java:1499) 
    at android.app.ActivityManagerProxy.startActivityAsUser(ActivityManagerNative.java:2504) 
    at com.android.commands.am.Am.runStart(Am.java:770) 
    at com.android.commands.am.Am.onRun(Am.java:307) 
    at com.android.internal.os.BaseCommand.run(BaseCommand.java:47) 
    at com.android.commands.am.Am.main(Am.java:98) 
    at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method) 
    at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:249) 

该应用程序只是一个小的hello world HTTP服务器。如何安装和的方式,允许我使用它就像内置到不需要GUI(lscatcd等)Android其它命令行程序运行它。

+1

'am start'不会将APK作为参数。它是通过一个“Intent”(你没有的)开始一个Android活动(你没有)。 APK没有像您正在寻找的命令行界面。欢迎您编译本机二进制文件,将其上传到设备,将其标记为可执行文件,并尝试从命令行运行它。 – CommonsWare

+0

是的,我不是很聪明。我能够通过安装Android的NDK,并运行'CC = “$ NDK_ROOT /斌/ ARM-Linux的androideabi-gcc的” 全球海洋观测系统的Linux = = GOARCH手臂GOARM = 7 CGO_ENABLED = 0要建立-v -o来构建它goserv main.go' – hermancain

回答

5

出现由系统版本有所不同,但我需要得到从这里的Android NDK:

https://developer.android.com/ndk/downloads/index.html

和安装其它工具

./android-ndk-r10c/build/tools/make-standalone-toolchain.sh --platform=android-21 --install-dir=$NDK_ROOT

,然后生成二进制用

CC="$NDK_ROOT/bin/arm-linux-androideabi-gcc" GOOS=linux GOARCH=arm GOARM=7 CGO_ENABLED=0 go build -v -o goserv main.go

我最该信息从这里:https://github.com/golang/go/issues/9412

但需要改变改变一些路径,改变CC_FOR_TARGET只是CCGOOS=androidGOOS=linux,并设置CGO_ENABLED=0需要。

这是Linux上的Fedora 25 Beta 1.7.4