13a40342f775236cdeb99171aeddfd25925f09f77Dan Albert#!/usr/bin/env python 23a40342f775236cdeb99171aeddfd25925f09f77Dan Albert# 33a40342f775236cdeb99171aeddfd25925f09f77Dan Albert# Copyright (C) 2015 The Android Open Source Project 43a40342f775236cdeb99171aeddfd25925f09f77Dan Albert# 53a40342f775236cdeb99171aeddfd25925f09f77Dan Albert# Licensed under the Apache License, Version 2.0 (the "License"); 63a40342f775236cdeb99171aeddfd25925f09f77Dan Albert# you may not use this file except in compliance with the License. 73a40342f775236cdeb99171aeddfd25925f09f77Dan Albert# You may obtain a copy of the License at 83a40342f775236cdeb99171aeddfd25925f09f77Dan Albert# 93a40342f775236cdeb99171aeddfd25925f09f77Dan Albert# http://www.apache.org/licenses/LICENSE-2.0 103a40342f775236cdeb99171aeddfd25925f09f77Dan Albert# 113a40342f775236cdeb99171aeddfd25925f09f77Dan Albert# Unless required by applicable law or agreed to in writing, software 123a40342f775236cdeb99171aeddfd25925f09f77Dan Albert# distributed under the License is distributed on an "AS IS" BASIS, 133a40342f775236cdeb99171aeddfd25925f09f77Dan Albert# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 143a40342f775236cdeb99171aeddfd25925f09f77Dan Albert# See the License for the specific language governing permissions and 153a40342f775236cdeb99171aeddfd25925f09f77Dan Albert# limitations under the License. 163a40342f775236cdeb99171aeddfd25925f09f77Dan Albert# 173a40342f775236cdeb99171aeddfd25925f09f77Dan Albert"""Installs an SDK and creates emulators for buildbot testing.""" 183a40342f775236cdeb99171aeddfd25925f09f77Dan Albertfrom __future__ import print_function 193a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 203a40342f775236cdeb99171aeddfd25925f09f77Dan Albertimport os 213a40342f775236cdeb99171aeddfd25925f09f77Dan Albertimport platform 223a40342f775236cdeb99171aeddfd25925f09f77Dan Albertimport shutil 233a40342f775236cdeb99171aeddfd25925f09f77Dan Albertimport subprocess 243a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 253a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 263a40342f775236cdeb99171aeddfd25925f09f77Dan AlbertDEVICES = { 273a40342f775236cdeb99171aeddfd25925f09f77Dan Albert '10': ['x86'], 283a40342f775236cdeb99171aeddfd25925f09f77Dan Albert '16': ['armeabi-v7a', 'mips', 'x86'], 293a40342f775236cdeb99171aeddfd25925f09f77Dan Albert '23': ['armeabi-v7a', 'x86', 'x86_64'], 303a40342f775236cdeb99171aeddfd25925f09f77Dan Albert} 313a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 323a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 333a40342f775236cdeb99171aeddfd25925f09f77Dan Albertdef get_sdk(): 343a40342f775236cdeb99171aeddfd25925f09f77Dan Albert os_name = platform.system().lower() 353a40342f775236cdeb99171aeddfd25925f09f77Dan Albert ext = 'tgz' 363a40342f775236cdeb99171aeddfd25925f09f77Dan Albert if os_name == 'darwin': 373a40342f775236cdeb99171aeddfd25925f09f77Dan Albert os_name = 'macosx' 383a40342f775236cdeb99171aeddfd25925f09f77Dan Albert ext = 'zip' 393a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 403a40342f775236cdeb99171aeddfd25925f09f77Dan Albert url = 'http://dl.google.com/android/android-sdk_r24.3.4-{}.{}'.format( 413a40342f775236cdeb99171aeddfd25925f09f77Dan Albert os_name, ext) 423a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 433a40342f775236cdeb99171aeddfd25925f09f77Dan Albert package_name = os.path.basename(url) 443a40342f775236cdeb99171aeddfd25925f09f77Dan Albert if os.path.exists(package_name): 453a40342f775236cdeb99171aeddfd25925f09f77Dan Albert os.remove(package_name) 463a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 473a40342f775236cdeb99171aeddfd25925f09f77Dan Albert sdk_dir = 'android-sdk-' + os_name 483a40342f775236cdeb99171aeddfd25925f09f77Dan Albert if os.path.exists(sdk_dir): 493a40342f775236cdeb99171aeddfd25925f09f77Dan Albert shutil.rmtree(sdk_dir) 503a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 513a40342f775236cdeb99171aeddfd25925f09f77Dan Albert subprocess.check_call(['curl', '-O', url]) 523a40342f775236cdeb99171aeddfd25925f09f77Dan Albert if ext == 'tgz': 533a40342f775236cdeb99171aeddfd25925f09f77Dan Albert subprocess.check_call(['tar', 'xf', package_name]) 543a40342f775236cdeb99171aeddfd25925f09f77Dan Albert else: 553a40342f775236cdeb99171aeddfd25925f09f77Dan Albert subprocess.check_call(['unzip', package_name]) 563a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 573a40342f775236cdeb99171aeddfd25925f09f77Dan Albert if os.path.exists(package_name): 583a40342f775236cdeb99171aeddfd25925f09f77Dan Albert os.remove(package_name) 593a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 603a40342f775236cdeb99171aeddfd25925f09f77Dan Albert return sdk_dir 613a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 623a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 633a40342f775236cdeb99171aeddfd25925f09f77Dan Albertdef install_components(sdk_manager): 643a40342f775236cdeb99171aeddfd25925f09f77Dan Albert packages = [ 653a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 'platform-tools', 663a40342f775236cdeb99171aeddfd25925f09f77Dan Albert ] 673a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 683a40342f775236cdeb99171aeddfd25925f09f77Dan Albert for api, abis in DEVICES.items(): 693a40342f775236cdeb99171aeddfd25925f09f77Dan Albert packages.append('android-' + api) 703a40342f775236cdeb99171aeddfd25925f09f77Dan Albert for abi in abis: 713a40342f775236cdeb99171aeddfd25925f09f77Dan Albert packages.append('sys-img-{}-android-{}'.format(abi, api)) 723a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 733a40342f775236cdeb99171aeddfd25925f09f77Dan Albert print('Installing packages:') 743a40342f775236cdeb99171aeddfd25925f09f77Dan Albert print('\n'.join(packages)) 753a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 763a40342f775236cdeb99171aeddfd25925f09f77Dan Albert filter_arg = ','.join(packages) 773a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 783a40342f775236cdeb99171aeddfd25925f09f77Dan Albert cmd = [ 793a40342f775236cdeb99171aeddfd25925f09f77Dan Albert sdk_manager, 'update', 'sdk', '--no-ui', '--all', '--filter', 803a40342f775236cdeb99171aeddfd25925f09f77Dan Albert filter_arg, 813a40342f775236cdeb99171aeddfd25925f09f77Dan Albert ] 823a40342f775236cdeb99171aeddfd25925f09f77Dan Albert subprocess.check_call(cmd) 833a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 843a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 853a40342f775236cdeb99171aeddfd25925f09f77Dan Albertdef create_devices(sdk_manager): 863a40342f775236cdeb99171aeddfd25925f09f77Dan Albert for api, abis in DEVICES.items(): 873a40342f775236cdeb99171aeddfd25925f09f77Dan Albert for abi in abis: 883a40342f775236cdeb99171aeddfd25925f09f77Dan Albert avd_name = '-'.join([abi, api]) 893a40342f775236cdeb99171aeddfd25925f09f77Dan Albert api_name = 'android-' + api 903a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 913a40342f775236cdeb99171aeddfd25925f09f77Dan Albert print('Creating AVD for {}'.format(avd_name)) 923a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 933a40342f775236cdeb99171aeddfd25925f09f77Dan Albert cmd = [ 943a40342f775236cdeb99171aeddfd25925f09f77Dan Albert sdk_manager, 'create', 'avd', '--force', '--name', avd_name, 953a40342f775236cdeb99171aeddfd25925f09f77Dan Albert '--target', api_name, '--abi', abi, 963a40342f775236cdeb99171aeddfd25925f09f77Dan Albert ] 973a40342f775236cdeb99171aeddfd25925f09f77Dan Albert proc = subprocess.Popen(cmd, stdin=subprocess.PIPE) 983a40342f775236cdeb99171aeddfd25925f09f77Dan Albert proc.communicate('no\n') # No custom hardware profile. 993a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 1003a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 1013a40342f775236cdeb99171aeddfd25925f09f77Dan Albertdef main(): 1023a40342f775236cdeb99171aeddfd25925f09f77Dan Albert os.chdir(os.getenv('HOME')) 1033a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 1043a40342f775236cdeb99171aeddfd25925f09f77Dan Albert sdk_dir = get_sdk() 1053a40342f775236cdeb99171aeddfd25925f09f77Dan Albert sdk_manager = os.path.join(sdk_dir, 'tools/android') 1063a40342f775236cdeb99171aeddfd25925f09f77Dan Albert install_components(sdk_manager) 1073a40342f775236cdeb99171aeddfd25925f09f77Dan Albert create_devices(sdk_manager) 1083a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 1093a40342f775236cdeb99171aeddfd25925f09f77Dan Albert 1103a40342f775236cdeb99171aeddfd25925f09f77Dan Albertif __name__ == '__main__': 1113a40342f775236cdeb99171aeddfd25925f09f77Dan Albert main() 112