| #!/usr/bin/env python |
| # |
| # Copyright (C) 2015 The Android Open Source Project |
| # |
| # 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. |
| # |
| """Installs an SDK and creates emulators for buildbot testing.""" |
| from __future__ import print_function |
| |
| import os |
| import platform |
| import shutil |
| import subprocess |
| |
| |
| DEVICES = { |
| '10': ['x86'], |
| '16': ['armeabi-v7a', 'mips', 'x86'], |
| '23': ['armeabi-v7a', 'x86', 'x86_64'], |
| } |
| |
| |
| def get_sdk(): |
| os_name = platform.system().lower() |
| ext = 'tgz' |
| if os_name == 'darwin': |
| os_name = 'macosx' |
| ext = 'zip' |
| |
| url = 'http://dl.google.com/android/android-sdk_r24.3.4-{}.{}'.format( |
| os_name, ext) |
| |
| package_name = os.path.basename(url) |
| if os.path.exists(package_name): |
| os.remove(package_name) |
| |
| sdk_dir = 'android-sdk-' + os_name |
| if os.path.exists(sdk_dir): |
| shutil.rmtree(sdk_dir) |
| |
| subprocess.check_call(['curl', '-O', url]) |
| if ext == 'tgz': |
| subprocess.check_call(['tar', 'xf', package_name]) |
| else: |
| subprocess.check_call(['unzip', package_name]) |
| |
| if os.path.exists(package_name): |
| os.remove(package_name) |
| |
| return sdk_dir |
| |
| |
| def install_components(sdk_manager): |
| packages = [ |
| 'platform-tools', |
| ] |
| |
| for api, abis in DEVICES.items(): |
| packages.append('android-' + api) |
| for abi in abis: |
| packages.append('sys-img-{}-android-{}'.format(abi, api)) |
| |
| print('Installing packages:') |
| print('\n'.join(packages)) |
| |
| filter_arg = ','.join(packages) |
| |
| cmd = [ |
| sdk_manager, 'update', 'sdk', '--no-ui', '--all', '--filter', |
| filter_arg, |
| ] |
| subprocess.check_call(cmd) |
| |
| |
| def create_devices(sdk_manager): |
| for api, abis in DEVICES.items(): |
| for abi in abis: |
| avd_name = '-'.join([abi, api]) |
| api_name = 'android-' + api |
| |
| print('Creating AVD for {}'.format(avd_name)) |
| |
| cmd = [ |
| sdk_manager, 'create', 'avd', '--force', '--name', avd_name, |
| '--target', api_name, '--abi', abi, |
| ] |
| proc = subprocess.Popen(cmd, stdin=subprocess.PIPE) |
| proc.communicate('no\n') # No custom hardware profile. |
| |
| |
| def main(): |
| os.chdir(os.getenv('HOME')) |
| |
| sdk_dir = get_sdk() |
| sdk_manager = os.path.join(sdk_dir, 'tools/android') |
| install_components(sdk_manager) |
| create_devices(sdk_manager) |
| |
| |
| if __name__ == '__main__': |
| main() |