2016-11-13 4 views
1

Я хочу создать небольшое приложение для Android, которое я могу запустить из командной строки android, пока я удаленно подключен к устройству Android через ssh. Я не хочу кнопки/launcher/icon или gui-интерфейса любого типа.Как создать приложение командной строки для Android?

Я предпочитаю делать это в golang, если это возможно.

Я попытался с помощью gomobile (golang.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) 

приложение является лишь небольшой привет мир сервер HTTP. Как я могу установить и запустить его таким образом, чтобы я мог использовать его, как другие программы командной строки, встроенные в android, для которых не требуются gui (ls, cat, cd и т. Д.).

+1

'я start' не принимает APK в качестве аргумента. Это для запуска Android-активности (которой у вас нет) с помощью «Intent» (которого у вас нет). У APK нет интерфейса командной строки, такого как тот, который вы ищете. Вы можете скомпилировать собственный бинарный файл, загрузить его на устройство, пометить как исполняемый файл и попытаться запустить его из командной строки. – CommonsWare

+0

Да, я не очень умный. Я смог построить его, установив android-ndk и выполнив 'CC =" $ NDK_ROOT/bin/arm-linux-androideabi-gcc "GOOS = linux GOARCH = arm GOARM = 7 CGO_ENABLED = 0 go build -v -o goserv main.go' – hermancain

ответ

5

Появляется отличаться в зависимости от системы и версии, но мне нужно, чтобы получить андроид NDK отсюда:

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

и установка ToolChain

./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 только CC, GOOS=android к GOOS=linux, и необходимо установить CGO_ENABLED=0.

Это было на Linux Fedora 25 Beta с Go 1.7.4

Смежные вопросы