#!/usr/bin/env python3.4 # # Copyright 2016 Google Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Tool to interactively call sl4a methods. SL4A (Scripting Layer for Android) is an RPC service exposing API calls on Android. Original version: https://github.com/damonkohler/sl4a Fork in AOSP (can make direct system privileged calls): https://android.googlesource.com/platform/external/sl4a/ Also allows access to Event Dispatcher, which allows waiting for asynchronous actions. For more information see the Mobly codelab: https://github.com/google/mobly#event-dispatcher Usage: $ sl4a_shell >>> s.getBuildID() u'N2F52' """ import argparse import logging from mobly.controllers.android_device_lib import jsonrpc_shell_base from mobly.controllers.android_device_lib.services import sl4a_service class Sl4aShell(jsonrpc_shell_base.JsonRpcShellBase): def _start_services(self, console_env): """Overrides superclass.""" self._ad.services.register('sl4a', sl4a_service.Sl4aService) console_env['s'] = self._ad.services.sl4a console_env['sl4a'] = self._ad.sl4a console_env['ed'] = self._ad.ed def _get_banner(self, serial): lines = [ 'Connected to %s.' % serial, 'Call methods against:', ' ad (android_device.AndroidDevice)', ' sl4a or s (SL4A)', ' ed (EventDispatcher)' ] return '\n'.join(lines) if __name__ == '__main__': parser = argparse.ArgumentParser(description='Interactive client for sl4a.') parser.add_argument( '-s', '--serial', help='Device serial to connect to (if more than one device is connected)') args = parser.parse_args() logging.basicConfig(level=logging.INFO) Sl4aShell().main(args.serial)