Пример #1
0
 def _check_aidl(self, v_build_tools):
     self.buildozer.debug('Check that aidl can be executed')
     v_build_tools = self._read_version_subdir(self.android_sdk_dir,
                                               'build-tools')
     aidl_cmd = join(self.android_sdk_dir, 'build-tools',
                     str(v_build_tools), 'aidl')
     self.buildozer.checkbin('Aidl', aidl_cmd)
     _, _, returncode = self.buildozer.cmd(aidl_cmd,
                                           break_on_error=False,
                                           show_output=False)
     if returncode != 1:
         self.buildozer.error('Aidl cannot be executed')
         if sys.maxint > 2**32:
             self.buildozer.error('')
             self.buildozer.error(
                 'You might have missed to install 32bits libs')
             self.buildozer.error(
                 'Check http://buildozer.readthedocs.org/en/latest/installation.html'
             )
             self.buildozer.error('')
         else:
             self.buildozer.error('')
             self.buildozer.error(
                 'In case of a bug report, please add a full log with log_level = 2'
             )
             self.buildozer.error('')
         raise BuildozerException()
Пример #2
0
 def sdkmanager_path(self):
     sdkmanager_path = join(self.android_sdk_dir, 'tools', 'bin',
                            'sdkmanager')
     if not os.path.isfile(sdkmanager_path):
         raise BuildozerException(
             ('sdkmanager path "{}" does not exist, sdkmanager is not'
              'installed'.format(sdkmanager_path)))
     return sdkmanager_path
Пример #3
0
    def _install_p4a(self):
        cmd = self.buildozer.cmd
        source = self.buildozer.config.getdefault('app', 'p4a.branch',
                                                  self.p4a_branch)
        self.pa_dir = pa_dir = join(self.buildozer.platform_dir,
                                    self.p4a_directory)
        system_p4a_dir = self.buildozer.config.getdefault(
            'app', 'p4a.source_dir')
        if system_p4a_dir:
            self.pa_dir = pa_dir = expanduser(system_p4a_dir)
            if not self.buildozer.file_exists(pa_dir):
                self.buildozer.error('Path for p4a.source_dir does not exist')
                self.buildozer.error('')
                raise BuildozerException()
        else:
            if not self.buildozer.file_exists(pa_dir):
                cmd(('git clone -b {} --single-branch '
                     'https://github.com/kivy/python-for-android.git '
                     '{}').format(source, self.p4a_directory),
                    cwd=self.buildozer.platform_dir)
            elif self.platform_update:
                cmd('git clean -dxf', cwd=pa_dir)
                current_branch = cmd('git rev-parse --abbrev-ref HEAD',
                                     get_stdout=True,
                                     cwd=pa_dir)[0].strip()
                if current_branch == source:
                    cmd('git pull', cwd=pa_dir)
                else:
                    cmd('git fetch --tags origin {0}:{0}'.format(source),
                        cwd=pa_dir)
                    cmd('git checkout {}'.format(source), cwd=pa_dir)

        # also install dependencies (currently, only setup.py knows about it)
        # let's extract them.
        try:
            with open(join(self.pa_dir, "setup.py")) as fd:
                setup = fd.read()
                deps = re.findall("^\s*install_reqs = (\[[^\]]*\])", setup,
                                  re.DOTALL | re.MULTILINE)[0]
                deps = ast.literal_eval(deps)
        except IOError:
            self.buildozer.error(
                'Failed to read python-for-android setup.py at {}'.format(
                    join(self.pa_dir, 'setup.py')))
            exit(1)
        pip_deps = []
        for dep in deps:
            pip_deps.append("'{}'".format(dep))

        # in virtualenv or conda env
        options = "--user"
        if "VIRTUAL_ENV" in os.environ or "CONDA_PREFIX" in os.environ:
            options = ""
        cmd('{} -m pip install -q {} {}'.format(executable, options,
                                                " ".join(pip_deps)))
Пример #4
0
    def install_platform(self):
        cmd = self.buildozer.cmd
        source = self.buildozer.config.getdefault('app', 'android.branch',
                                                  self.p4a_branch)
        self.pa_dir = pa_dir = join(self.buildozer.platform_dir,
                                    self.p4a_directory)
        system_p4a_dir = self.buildozer.config.getdefault(
            'app', 'android.p4a_dir')
        if system_p4a_dir:
            self.pa_dir = pa_dir = expanduser(system_p4a_dir)
            if not self.buildozer.file_exists(pa_dir):
                self.buildozer.error('Path for android.p4a_dir does not exist')
                self.buildozer.error('')
                raise BuildozerException()
        else:
            if not self.buildozer.file_exists(pa_dir):
                cmd(('git clone -b {} --single-branch '
                     'https://github.com/kivy/python-for-android.git '
                     '{}').format(source, self.p4a_directory),
                    cwd=self.buildozer.platform_dir)
            elif self.platform_update:
                cmd('git clean -dxf', cwd=pa_dir)
                current_branch = cmd('git rev-parse --abbrev-ref HEAD',
                                     get_stdout=True,
                                     cwd=pa_dir)[0].strip()
                if current_branch == source:
                    cmd('git pull', cwd=pa_dir)
                else:
                    cmd('git fetch --tags origin {0}:{0}'.format(source),
                        cwd=pa_dir)
                    cmd('git checkout {}'.format(source), cwd=pa_dir)

        self._install_apache_ant()
        self._install_android_sdk()
        self._install_android_ndk()
        self._install_android_packages()

        # ultimate configuration check.
        # some of our configuration cannot be check without platform.
        self.check_configuration_tokens()

        self.buildozer.environ.update({
            'PACKAGES_PATH':
            self.buildozer.global_packages_dir,
            'ANDROIDSDK':
            self.android_sdk_dir,
            'ANDROIDNDK':
            self.android_ndk_dir,
            'ANDROIDAPI':
            self.android_api,
            'ANDROIDNDKVER':
            'r{}'.format(self.android_ndk_version)
        })
Пример #5
0
    def check_requirements(self):
        if platform in ('win32', 'cygwin'):
            try:
                self._set_win32_java_home()
            except:
                traceback.print_exc()
            self.android_cmd = join(self.android_sdk_dir, 'tools',
                                    'android.bat')
            self.adb_cmd = join(self.android_sdk_dir, 'platform-tools',
                                'adb.exe')
            self.javac_cmd = self._locate_java('javac.exe')
            self.keytool_cmd = self._locate_java('keytool.exe')
        elif platform in ('darwin', ):
            self.android_cmd = join(self.android_sdk_dir, 'tools', 'android')
            self.adb_cmd = join(self.android_sdk_dir, 'platform-tools', 'adb')
            self.javac_cmd = self._locate_java('javac')
            self.keytool_cmd = self._locate_java('keytool')
        else:
            self.android_cmd = join(self.android_sdk_dir, 'tools', 'android')
            self.adb_cmd = join(self.android_sdk_dir, 'platform-tools', 'adb')
            self.javac_cmd = self._locate_java('javac')
            self.keytool_cmd = self._locate_java('keytool')

            # Check for C header <zlib.h>.
            _, _, returncode_dpkg = self.buildozer.cmd(
                'dpkg --version',
                break_on_error=False)
            is_debian_like = (returncode_dpkg == 0)
            if is_debian_like and \
                not self.buildozer.file_exists('/usr/include/zlib.h'):
                raise BuildozerException(
                    'zlib headers must be installed, '
                    'run: sudo apt-get install zlib1g-dev')

        # Need to add internally installed ant to path for external tools
        # like adb to use
        path = [join(self.apache_ant_dir, 'bin')]
        if 'PATH' in self.buildozer.environ:
            path.append(self.buildozer.environ['PATH'])
        else:
            path.append(os.environ['PATH'])
        self.buildozer.environ['PATH'] = ':'.join(path)
        checkbin = self.buildozer.checkbin
        checkbin('Git (git)', 'git')
        checkbin('Cython (cython)', 'cython')
        checkbin('Java compiler (javac)', self.javac_cmd)
        checkbin('Java keytool (keytool)', self.keytool_cmd)
Пример #6
0
    def _sdkmanager(self, *args, **kwargs):
        """Call the sdkmanager in our Android SDK with the given arguments."""
        # Use the android-sdk dir as cwd by default
        kwargs['cwd'] = kwargs.get('cwd', self.android_sdk_dir)

        sdkmanager_path = os.path.join(self.android_sdk_dir, 'tools', 'bin',
                                       'sdkmanager')
        if not os.path.isfile(sdkmanager_path):
            raise BuildozerException(
                ('sdkmanager path "{}" does not exist, sdkmanager is not'
                 'installed'.format(sdkmanager_path)))

        command = sdkmanager_path + ' ' + ' '.join(args)

        return_child = kwargs.pop('return_child', False)
        if return_child:
            return self.buildozer.cmd_expect(command, **kwargs)
        else:
            kwargs['get_stdout'] = kwargs.get('get_stdout', True)
            return self.buildozer.cmd(command, **kwargs)