Ejemplo n.º 1
0
    def __init__(self, buildout, name, options):
        self.buildout, self.name, self.options = buildout, name, options
        self.logger = logging.getLogger(name)

        self.verbose = False
        if 'verbosity' in self.buildout['buildout']:
            self.verbose = int(self.buildout['buildout']['verbosity'])
        self.platform = self._get_platform()

        self.apis = self.options.get('apis', '').split()
        self.images = self.options.get('system_images', '').split()
        self.other_pkgs = self.options.get('other_packages', '').split('\n')

        self.bin_dir = buildout['buildout'].get('bin-directory')
        self.parts_dir = os.path.join(
            buildout['buildout'].get('parts-directory'), self.name)
        self._setup_install_dirs()

        self.dryrun = True if self.options.get(
            'dryrun', 'false') in ['True', '1', 'true'] else False
        self.force = True if self.options.get(
            'force', 'false') in ['True', '1', 'true'] else False
        self.apm = AndroidPackageManager(self.sdk_dir,
                                         logger=self.logger,
                                         verbose=self.verbose,
                                         dryrun=self.dryrun,
                                         force=self.force)

        self.logger.info("dryrun: %s" % self.dryrun)
        self.logger.info("force: %s" % self.force)

        self.android = os.path.join(self.sdk_dir, "tools", "android")
        # make sure we have a parts directory
        if not os.path.exists(self.parts_dir):
            os.makedirs(self.parts_dir)

        # build up a list of scripts to generate
        self.sdk_scripts = {}
        for name in ['emulator', 'uiautomatorviewer', 'lint', 'android']:
            self.sdk_scripts[name] = (os.path.join(self.sdk_dir, 'tools',
                                                   name),
                                      os.path.join(self.bin_dir, name))
        self.sdk_scripts['adb'] = (os.path.join(self.sdk_dir, 'platform-tools',
                                                'adb'),
                                   os.path.join(self.bin_dir, 'adb'))

        # save off options so other parts can access these values
        buildout[self.name]['sdk_dir'] = self.sdk_dir
Ejemplo n.º 2
0
class Recipe:
    def __init__(self, buildout, name, options):
        self.buildout, self.name, self.options = buildout, name, options
        self.logger = logging.getLogger(name)

        self.verbose = False
        if 'verbosity' in self.buildout['buildout']:
            self.verbose = int(self.buildout['buildout']['verbosity'])
        self.platform = self._get_platform()

        self.apis = self.options.get('apis', '').split()
        self.images = self.options.get('system_images', '').split()
        self.other_pkgs = self.options.get('other_packages', '').split('\n')

        self.bin_dir = buildout['buildout'].get('bin-directory')
        self.parts_dir = os.path.join(
            buildout['buildout'].get('parts-directory'), self.name)
        self._setup_install_dirs()

        self.dryrun = True if self.options.get(
            'dryrun', 'false') in ['True', '1', 'true'] else False
        self.force = True if self.options.get(
            'force', 'false') in ['True', '1', 'true'] else False
        self.apm = AndroidPackageManager(self.sdk_dir,
                                         logger=self.logger,
                                         verbose=self.verbose,
                                         dryrun=self.dryrun,
                                         force=self.force)

        self.logger.info("dryrun: %s" % self.dryrun)
        self.logger.info("force: %s" % self.force)

        self.android = os.path.join(self.sdk_dir, "tools", "android")
        # make sure we have a parts directory
        if not os.path.exists(self.parts_dir):
            os.makedirs(self.parts_dir)

        # build up a list of scripts to generate
        self.sdk_scripts = {}
        for name in ['emulator', 'uiautomatorviewer', 'lint', 'android']:
            self.sdk_scripts[name] = (os.path.join(self.sdk_dir, 'tools',
                                                   name),
                                      os.path.join(self.bin_dir, name))
        self.sdk_scripts['adb'] = (os.path.join(self.sdk_dir, 'platform-tools',
                                                'adb'),
                                   os.path.join(self.bin_dir, 'adb'))

        # save off options so other parts can access these values
        buildout[self.name]['sdk_dir'] = self.sdk_dir

    def _get_platform(self):
        platform = None
        # determine platform string to use
        if sys.platform.startswith('linux'):
            platform = 'linux'
        elif sys.platform.startswith('darwin'):
            platform = 'macosx'
        elif sys.platform.startswith('win32'):
            platform = 'windows'
        else:
            raise SystemError("Operating system is not supported: %s" %
                              sys.platform)
        return platform

    def _setup_install_dirs(self):
        self.install_dir = self.options.get('install_dir', None)
        if self.install_dir:
            if not os.path.exists(self.install_dir):
                os.makedirs(self.install_dir)

        if self.install_dir:
            self.sdk_dir = os.path.join(self.install_dir,
                                        "android-sdk-" + self.platform)
        else:
            self.sdk_dir = os.path.join(self.parts_dir,
                                        "android-sdk-" + self.platform)

    def _remove_scripts(self):
        for _from, _to in self.sdk_scripts.values():
            if os.path.exists(_to):
                self.logger.info("Removing script: %s" % _to)
                os.unlink(_to)

    def _create_scripts(self):
        for _from, _to in self.sdk_scripts.values():
            data = template.format(android_home=self.sdk_dir, command=_from)
            self.logger.info("Creating script: %s" % _to)
            open(_to, "w+").write(data)

            # set the permissions to allow execution
            os.chmod(
                _to,
                os.stat(_to).st_mode | stat.S_IXOTH | stat.S_IXGRP
                | stat.S_IXUSR)

    def _download_install(self):
        url = self.options['sdk']

        filename = os.path.join('downloads', url.split('/')[-1])

        # download the sdk
        download = zc.buildout.download.Download(self.buildout['buildout'],
                                                 namespace=self.name,
                                                 hash_name=True,
                                                 logger=self.logger)
        filename, is_temp = download(url)

        # now unpack it
        self.logger.info('Unpacking and configuring')
        try:
            setuptools.archive_util.unpack_archive(filename, self.install_dir)
        finally:
            if is_temp:
                os.remove(filename)

    def _install_haxm(self, name):
        if not self.apm.is_installed(name):
            dmg = os.path.join(self.sdk_dir, 'extras', 'intel',
                               'Hardware_Accelerated_Execution_Manager',
                               'IntelHAXM.dmg')
            self.logger.info(
                "********************************************************************************"
            )
            self.logger.info(" ATTENTION ")
            self.logger.info(" Be sure to install %s " % name)
            self.logger.info(" You can find the installer here: ")
            self.logger.info(" %s " % dmg)
            self.logger.info(
                "********************************************************************************"
            )

    def _install_packages(self):
        # install some required
        self.apm.install('Android SDK Platform-tools')
        self.apm.install('Android SDK Tools')
        self.apm.install('Android Support Library')

        for pkg in self.other_pkgs:
            self.apm.install(pkg)

    def _install_api_packages(self):
        for api in self.apis:
            self.apm.install('Android SDK Build-tools', api)
            self.apm.install('SDK Platform', api)
            for image in self.images:
                try:
                    self.apm.install(image_map[image], api)
                except Exception, e:
                    self.logger.error("Error installing image: %s" % e)