Home | History | Annotate | Download | only in tests
      1 #!/usr/bin/env python
      2 #
      3 # Copyright (C) 2015 The Android Open Source Project
      4 #
      5 # Licensed under the Apache License, Version 2.0 (the "License");
      6 # you may not use this file except in compliance with the License.
      7 # You may obtain a copy of the License at
      8 #
      9 #      http://www.apache.org/licenses/LICENSE-2.0
     10 #
     11 # Unless required by applicable law or agreed to in writing, software
     12 # distributed under the License is distributed on an "AS IS" BASIS,
     13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 # See the License for the specific language governing permissions and
     15 # limitations under the License.
     16 #
     17 """Installs an SDK and creates emulators for buildbot testing."""
     18 from __future__ import print_function
     19 
     20 import os
     21 import platform
     22 import shutil
     23 import subprocess
     24 
     25 
     26 DEVICES = {
     27     '10': ['x86'],
     28     '16': ['armeabi-v7a', 'mips', 'x86'],
     29     '23': ['armeabi-v7a', 'x86', 'x86_64'],
     30 }
     31 
     32 
     33 def get_sdk():
     34     os_name = platform.system().lower()
     35     ext = 'tgz'
     36     if os_name == 'darwin':
     37         os_name = 'macosx'
     38         ext = 'zip'
     39 
     40     url = 'http://dl.google.com/android/android-sdk_r24.3.4-{}.{}'.format(
     41         os_name, ext)
     42 
     43     package_name = os.path.basename(url)
     44     if os.path.exists(package_name):
     45         os.remove(package_name)
     46 
     47     sdk_dir = 'android-sdk-' + os_name
     48     if os.path.exists(sdk_dir):
     49         shutil.rmtree(sdk_dir)
     50 
     51     subprocess.check_call(['curl', '-O', url])
     52     if ext == 'tgz':
     53         subprocess.check_call(['tar', 'xf', package_name])
     54     else:
     55         subprocess.check_call(['unzip', package_name])
     56 
     57     if os.path.exists(package_name):
     58         os.remove(package_name)
     59 
     60     return sdk_dir
     61 
     62 
     63 def install_components(sdk_manager):
     64     packages = [
     65         'platform-tools',
     66     ]
     67 
     68     for api, abis in DEVICES.items():
     69         packages.append('android-' + api)
     70         for abi in abis:
     71             packages.append('sys-img-{}-android-{}'.format(abi, api))
     72 
     73     print('Installing packages:')
     74     print('\n'.join(packages))
     75 
     76     filter_arg = ','.join(packages)
     77 
     78     cmd = [
     79         sdk_manager, 'update', 'sdk', '--no-ui', '--all', '--filter',
     80         filter_arg,
     81     ]
     82     subprocess.check_call(cmd)
     83 
     84 
     85 def create_devices(sdk_manager):
     86     for api, abis in DEVICES.items():
     87         for abi in abis:
     88             avd_name = '-'.join([abi, api])
     89             api_name = 'android-' + api
     90 
     91             print('Creating AVD for {}'.format(avd_name))
     92 
     93             cmd = [
     94                 sdk_manager, 'create', 'avd', '--force', '--name', avd_name,
     95                 '--target', api_name, '--abi', abi,
     96             ]
     97             proc = subprocess.Popen(cmd, stdin=subprocess.PIPE)
     98             proc.communicate('no\n')  # No custom hardware profile.
     99 
    100 
    101 def main():
    102     os.chdir(os.getenv('HOME'))
    103 
    104     sdk_dir = get_sdk()
    105     sdk_manager = os.path.join(sdk_dir, 'tools/android')
    106     install_components(sdk_manager)
    107     create_devices(sdk_manager)
    108 
    109 
    110 if __name__ == '__main__':
    111     main()
    112