111 lines
2.9 KiB
Python
111 lines
2.9 KiB
Python
#!/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()
|