Как запустить скрипт QPython из MIT App Inventor Activity Starter и корректно выйти?

Я сделал простое обучающее приложение с помощью MIT App Inventor 2. Приложение ведет журнал в файл журнала, и я создал небольшой скрипт QPython для анализа журнала и отображения статистики.

Я хотел бы использовать Activity Starter для запуска своего скрипта Python, но мне не удалось определить правильный набор Action, ActivityClass, ActivityPackage и Extra[x], чтобы заставить его работать. Я запустил adb на своем телефоне Android, чтобы найти правильные строки, но при попытке я получаю сообщение «601 Соответствующая активность не найдена».

Вот вывод adb для «qpyplus» при запуске скрипта:

I/Timeline( 1898): Timeline: Activity_launch_request id:com.hipipal.qpyplus time:15752330
I/ActivityManager(  862): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.hipipal.qpyplus/com.hipipal.qpylib.MPyApi bnds=[540,456][807,756] (has extras)} from uid 10116 on display 0
V/WindowManager(  862): addAppToken: AppWindowToken{1687ec32 token=Token{120bbc3d ActivityRecord{1ef9e994 u0 com.hipipal.qpyplus/com.hipipal.qpylib.MPyApi t5112}}} to stack=1 task=5112 at 0
V/WindowManager(  862): Adding window Window{e90d72c u0 Starting com.hipipal.qpyplus} at 18 of 26 (after Window{30168e12 u0 edu.mit.appinventor.aicompanion3/edu.mit.appinventor.aicompanion3.Screen1})
I/Timeline(31680): Timeline: Activity_launch_request id:com.hipipal.qpyplus time:15752447
I/ActivityManager(  862): START u0 {cmp=com.hipipal.qpyplus/jackpal.androidterm.Term (has extras)} from uid 10335 on display 0
V/WindowManager(  862): addAppToken: AppWindowToken{382fc5e2 token=Token{1e492ead ActivityRecord{2e34dfc4 u0 com.hipipal.qpyplus/jackpal.androidterm.Term t5112}}} to stack=1 task=5112 at 1
V/WindowManager(  862): Based on layer: Adding window Window{e90d72c u0 Starting com.hipipal.qpyplus} at 18 of 26
V/WindowManager(  862): Adding window Window{390e635c u0 com.hipipal.qpyplus/jackpal.androidterm.Term} at 18 of 27 (before Window{e90d72c u0 Starting com.hipipal.qpyplus})
I/ActivityManager(  862): Displayed com.hipipal.qpyplus/jackpal.androidterm.Term: +117ms (total +245ms)
I/Timeline(  862): Timeline: Activity_windows_visible id: ActivityRecord{2e34dfc4 u0 com.hipipal.qpyplus/jackpal.androidterm.Term t5112} time:15752597

Я прочитал документы и попытался расшифровать журналы и заполнить теги. Я также нашел старый ответ от 2010 года на такой же вопрос, но кажется, что QPython с тех пор продвинулся вперед, потому что рецепт не соответствует моему логарифму (и также не работает). Пожалуйста, посмотрите скриншот обоих вариантов (я здесь новичок, поэтому мне не разрешено вставлять изображения).

скриншот двух неработающих вариантов введите здесь описание изображения Кто-нибудь знает, как мне отформатировать Activity Starter для запуска этого скрипта?

Обновление!
Думаю, Тайфун направил меня на правильный путь. Я последовал его совету и перекомпилировал .apk с новыми разрешениями и установил его так, чтобы ему было разрешено запускать сценарий оболочки. Моя проблема сейчас в том, что QPython, похоже, полностью игнорирует мою просьбу запустить скрипт при запуске. Терминал открывается нормально, но мой скрипт не запускается. Если я запускаю команду вручную, она работает нормально.

есть идеи?

Моя новая конфигурация, которая почти работает.


person Morten Reintz    schedule 24.01.2016    source источник
comment
см. документацию, как установить свойства... возможно, вы захотите попробовать что-нибудь и опубликовать скриншот ваших блоков...   -  person Taifun    schedule 24.01.2016
comment
Спасибо за ваши предложения @Taifun. Я читал документы, но забыл сказать об этом или опубликовать скриншот. Извини! Я отредактировал свой вопрос соответственно.   -  person Morten Reintz    schedule 24.01.2016
comment
Что произойдет, если вы используете action= android.intent.action.MAIN, package=com.hipipal.qpyplus и class=com.hipipal.qpylib.MPyApi? Можете ли вы предоставить ссылку на эту информацию из сети, которую вы нашли?   -  person Taifun    schedule 24.01.2016
comment
Спасибо @Taifun! С вашими предложениями я получаю представление журнала QPython, но не вывод сценария. Он просто говорит, что скрипт Python запущен. Я не знаю, запускает ли он предполагаемый сценарий или нет, поскольку я еще не нашел способ его указать. Пост от 2010 года, в котором они якобы заработали, находится здесь. . В очередной раз благодарим за помощь! Я не знаю, как указать, какой сценарий запускать, и не могу найти конкретную ссылку на мой сценарий в выводе logcat.   -  person Morten Reintz    schedule 24.01.2016
comment
Эта ссылка описывает, как использовать SL4A вместе с App Inventor, см. также мой Пример App Inventor Classic здесь. В качестве альтернативы вы можете запустить сценарий оболочки, см. также этот фрагмент, в котором используется эмулятор терминала Jackpal. .   -  person Taifun    schedule 25.01.2016
comment
Еще раз спасибо @taifun. Я хотел бы запустить это как сценарий оболочки, но, поскольку я не рутировал свое устройство, я не могу просмотреть /data/data, чтобы найти исполняемый файл python. Есть предложения о том, как найти исполняемый файл qpython из jackpal?   -  person Morten Reintz    schedule 26.01.2016
comment
Я нашел путь к исполняемому файлу, но мне не разрешено запускать его без прав root. Поскольку мне не разрешено запускать это из jackpal, я продолжу попытки заставить qpython запускать мой скрипт, поскольку у него есть правильные разрешения. Я до сих пор не понял, как настроить ExtraKey и ExtraValue для запуска конкретного скрипта. Вывод logcat говорит мне, что у qpyplus/jackpal.androidterm.Term есть дополнения, но тогда он становится немного мутным. Если кто-нибудь знает, какие параметры я должен передать через ExtraKey и ExtraValue из приведенного выше дампа logcat, я был бы очень признателен!   -  person Morten Reintz    schedule 27.01.2016
comment
Данные должны быть где-то здесь, но я не могу понять: {cmp=com.hipipal.qpyplus/jackpal.androidterm.Term (есть дополнения)} из uid 10335 на дисплее 0 V/WindowManager( 861) : addAppToken: AppWindowToken{20bf5c1 token=Token{c40c6a8 ActivityRecord{7ca3ecb u0 com.hipipal.qpyplus/jackpal.androidterm.Term t5248}}} to stack=1 task=5248 at 2 V/WindowManager(861): Добавление окна Window{21036df2 u0 com.hipipal.qpyplus/jackpal.androidterm.Term} на 20 из 28 (после Window{1199c59a u0 PopupWindow:19603529 EXITING})   -  person Morten Reintz    schedule 27.01.2016
comment
Обновление выше. Тайфун наставил меня на правильный путь, но я еще не дошел до конца. QPython запускается, но не запускает мой скрипт при инициализации. Может ли кто-нибудь рискнуть предположить, почему?   -  person Morten Reintz    schedule 27.01.2016
comment
Как уже было сказано ранее, используйте SL4A вместе с вашим текущим скриптом или используйте эмулятор терминала Jackpal вместе со скриптом shell. В качестве альтернативы можно проанализировать журнал непосредственно в App Inventor.   -  person Taifun    schedule 28.01.2016
comment
Да, как я уже говорил ранее, jackpal не может запускать исполняемый файл Python. Тогда я немного пойду по пути SL4A. Спасибо еще раз. Может быть, я просто перепишу все это. Просто мне очень нравится Python и очень не нравится JavaScript ;-)   -  person Morten Reintz    schedule 28.01.2016
comment
Вы пытались установить приложение Terminal Emulator и запустить скрипт есть? Если вы запустите это, то оно также должно работать с использованием моего примера   -  person Taifun    schedule 28.01.2016
comment
Да, это проблема. Я попробовал это, и самому Term не разрешено запускать исполняемый файл qpython. Разрешен только jackpal, включенный в Qpython ... Я полностью с вами в том, как это должно работать, если бы терминалу было разрешено запускать python в первую очередь. Qpython также использует jacpal, но почему-то игнорирует мой параметр инициализации...   -  person Morten Reintz    schedule 28.01.2016


Ответы (1)


http://i.hizliresim.com/mLqgP4.png

action="com.hipipal.qpyplus.action.MPyApi"
classname="com.hipipal.qpyplus.MPyApi"
packagename="com.hipipal.qpyplus"
extras={"app" : "appid", "act" : "onPyApi", "flag" : "onQPyExec", "param" : "", "pycode" : "print 'selam'\nprint 'naber'"}

Это работает нормально :)

person Hakan Kisa    schedule 19.05.2016