| #!/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 |
| |
| from mobly.controllers.android_device_lib import jsonrpc_shell_base |
| |
| |
| class Sl4aShell(jsonrpc_shell_base.JsonRpcShellBase): |
| def _start_services(self, console_env): |
| """Overrides superclass.""" |
| self._ad.start_services() |
| self._ad.load_sl4a() |
| console_env['s'] = self._ad.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() |
| Sl4aShell().main(args.serial) |