На момент запуска Java была единственным официально поддерживаемым языком программирования для создания распространяемого пакета APK. Android Native Development Kit (Android NDK), который позволит разработчикам создавать программные компоненты Android с C
и C++
. Помимо поддержки собственного кода, Google также расширение Android для поддержки популярных языков динамических сценариев и Google запустил Среду сценариев Android (ASE), но теперь она имеет открытый исходный код и известна как Уровень сценариев для Android (SL4A предоставляет языки сценариев для Android, позволяя редактировать и выполнять сценарии и интерактивные интерпретаторы непосредственно на устройстве Android.) И позволяет сторонним разработчикам создавать простые приложения для Android с perl
, JRuby
, Python
, LUA
и BeanShell
.SL4A позволяет быстро создавать прототипы приложений для Android на самом устройстве с использованием языков сценариев высокого уровня. Эти скрипты имеют доступ ко многим API, доступным для полноценных приложений Android, но с значительно упрощенным интерфейсом, и вы можете встроить свой скрипт в отдельный APK.
Вы спросите, а зачем писать скрипты вместо реальных Android-приложений? По общему признанию, среда разработки Android значительно упрощает жизнь, но вы привязаны к компьютеру для выполнения своей работы. ASE позволяет вам разрабатывать на самом устройстве с использованием языков сценариев высокого уровня, чтобы быстро опробовать вашу идею в той ситуации, когда она вам нужна. Взгляните на следующий пример сценария Lua, чтобы убедиться в этом:
Если положить телефон экраном вниз, звонок будет отключен. Повторный поворот лицевой стороной вверх включит звонок.
require "android" android.startSensing() android.sleep(1) --Give the sensors a moment to come online. silent = false while true do s = android.readSensors() facedown = s.result and s.result.zforce and s.result.zforce > 9 if facedown and not silent then android.vibrate() --A short vibration to indicate we're in silent mode. android.setRingerSilent(true) silent = true elseif not facedown and silent then android.setRingerSilent(false) silent = false end android.sleep(1) end
Вот еще один полезный сценарий, на этот раз на Python.
«Произносите сообщения чата вслух по мере их поступления»
import android, xmpp _SERVER = 'talk.google.com', 5223 class SayChat(object): def __init__(self): self.droid = android.Android() username = self.droid.getInput('Username')['result'] password = self.droid.getInput('Password')['result'] jid = xmpp.protocol.JID(username) self.client = xmpp.Client(jid.getDomain(), debug=[]) self.client.connect(server=_SERVER) self.client.RegisterHandler('message', self.message_cb) if not self.client: print 'Connection failed!' return auth = self.client.auth(jid.getNode(), password, 'botty') if not auth: print 'Authentication failed!' return self.client.sendInitPresence() def message_cb(self, session, message): jid = xmpp.protocol.JID(message.getFrom()) username = jid.getNode() text = message.getBody() self.droid.speak('%s says %s' % (username, text)) def run(self): try: while True: self.client.Process(1) except KeyboardInterrupt: pass saychat = SayChat() saychat.run()
Эти скрипты демонстрируют несколько доступных API, доступных как для Lua, так и для Python. Он предназначен для работы в качестве службы и отключает звонок, когда телефон кладется экраном вниз. Для некоторых языков сценариев, таких как BeanShell, можно получить прямой доступ к Java API Android. Для упрощения в ASE есть класс AndroidFacade. Для других языков, таких как Python и Lua, API предоставляется через вызовы JSON RPC прокси. Естественно, это означает, что только та часть API, которая была обернута AndroidFacade и AndroidProxy, доступна для кросс-скомпилированных интерпретаторов, таких как Python и Lua. К счастью, и AndroidFacade, и AndroidProxy легко расширить.