コード例 #1
0
    def _get_aapt_args(self):
        aapt_args = [self._aapt, 'package', '-f', '-I',
                     os.path.join(self._config['compile_sdk_directory'], 'android.jar'),
                     '-M', fix_package_name(self._config, self._finder.get_dst_manifest_path())]

        for rdir in self._config['project_source_sets'][self._name]['main_res_directory']:
            if os.path.exists(rdir):
                aapt_args.append('-S')
                aapt_args.append(DatabindingDirectoryLookUp.find_target_res_path(rdir))

        for rdir in self._module_info['local_dep_res_path']:
            if os.path.exists(rdir):
                aapt_args.append('-S')
                aapt_args.append(DatabindingDirectoryLookUp.find_target_res_path(rdir))

        for resdir in self._module_info['dep_res_path']:
            if os.path.exists(resdir):
                aapt_args.append('-S')
                aapt_args.append(resdir)

        if 'extra_dep_res_paths' in self._config and self._config['extra_dep_res_paths'] is not None:
            arr = self._config['extra_dep_res_paths']
            for path in arr:
                path = path.strip()
                if os.path.isdir(path):
                    aapt_args.append('-S')
                    aapt_args.append(path)

        aapt_args.append('-S')
        aapt_args.append(self._finder.get_backup_res_dir())

        freeline_assets_dir = os.path.join(self._config['build_cache_dir'], 'freeline-assets')
        aapt_args.append('-A')
        aapt_args.append(freeline_assets_dir)

        for adir in self._config['project_source_sets'][self._name]['main_assets_directory']:
            if os.path.exists(adir):
                aapt_args.append('-A')
                aapt_args.append(adir)

        for adir in self._module_info['local_dep_assets_path']:
            if os.path.exists(adir):
                aapt_args.append('-A')
                aapt_args.append(adir)

        for adir in self._module_info['dep_assets_path']:
            if os.path.exists(adir):
                aapt_args.append('-A')
                aapt_args.append(adir)

        gen_path = self._finder.get_backup_dir()
        aapt_args.append('--custom-package')
        aapt_args.append(self._config['package'])
        aapt_args.append('-m')
        aapt_args.append('-J')
        aapt_args.append(gen_path)
        aapt_args.append('--auto-add-overlay')
        aapt_args.append('-P')
        aapt_args.append(self._finder.get_public_xml_path())

        final_changed_list = self._parse_changed_list()

        if is_windows_system():
            final_changed_list = [fpath.replace('\\', '/') for fpath in final_changed_list]

        final_changed_list_chain = ':'.join(final_changed_list)

        aapt_args.append('-F')
        aapt_args.append(self._finder.get_dst_res_pack_path(self._name))
        aapt_args.append('--debug-mode')
        aapt_args.append('--auto-add-overlay')
        aapt_args.append('--no-version-vectors')

        if len(final_changed_list_chain) > 0 and self._is_art:
            aapt_args.append('--buildIncrement')
            aapt_args.append(final_changed_list_chain)
            aapt_args.append('--resoucres-md5-cache-path')
            aapt_args.append(os.path.join(self._cache_dir, "arsc_cache.dat"))

        aapt_args.append('--ignore-assets')
        aapt_args.append('public_id.xml:public.xml:*.bak:.*')

        if 'ignore_resource_ids' in self._config and len(self._config['ignore_resource_ids']) > 0 and not is_windows_system():
            aapt_args.append('--ignore-ids')
            aapt_args.append(':'.join(self._config['ignore_resource_ids']))

        return aapt_args, final_changed_list
コード例 #2
0
    def _get_aapt_args(self):
        aapt_args = [self._aapt, 'package', '-f', '-I',
                     os.path.join(self._config['compile_sdk_directory'], 'android.jar'),
                     '-M', fix_package_name(self._config, self._finder.get_dst_manifest_path())]

        for rdir in self._config['project_source_sets'][self._name]['main_res_directory']:
            if os.path.exists(rdir):
                aapt_args.append('-S')
                aapt_args.append(DatabindingDirectoryLookUp.find_target_res_path(rdir))

        for rdir in self._module_info['local_dep_res_path']:
            if os.path.exists(rdir):
                aapt_args.append('-S')
                aapt_args.append(DatabindingDirectoryLookUp.find_target_res_path(rdir))

        for resdir in self._module_info['dep_res_path']:
            if os.path.exists(resdir):
                aapt_args.append('-S')
                aapt_args.append(resdir)

        if 'extra_dep_res_paths' in self._config and self._config['extra_dep_res_paths'] is not None:
            arr = self._config['extra_dep_res_paths']
            for path in arr:
                path = path.strip()
                if os.path.isdir(path):
                    aapt_args.append('-S')
                    aapt_args.append(path)

        aapt_args.append('-S')
        aapt_args.append(self._finder.get_backup_res_dir())

        freeline_assets_dir = os.path.join(self._config['build_cache_dir'], 'freeline-assets')
        aapt_args.append('-A')
        aapt_args.append(freeline_assets_dir)

        for adir in self._config['project_source_sets'][self._name]['main_assets_directory']:
            if os.path.exists(adir):
                aapt_args.append('-A')
                aapt_args.append(adir)

        for adir in self._module_info['local_dep_assets_path']:
            if os.path.exists(adir):
                aapt_args.append('-A')
                aapt_args.append(adir)

        for adir in self._module_info['dep_assets_path']:
            if os.path.exists(adir):
                aapt_args.append('-A')
                aapt_args.append(adir)

        gen_path = self._finder.get_backup_dir()
        aapt_args.append('--custom-package')
        aapt_args.append(self._config['package'])
        aapt_args.append('-m')
        aapt_args.append('-J')
        aapt_args.append(gen_path)
        aapt_args.append('--auto-add-overlay')
        aapt_args.append('-P')
        aapt_args.append(self._finder.get_public_xml_path())

        final_changed_list = self._parse_changed_list()

        if is_windows_system():
            final_changed_list = [fpath.replace('\\', '/') for fpath in final_changed_list]

        final_changed_list_chain = ':'.join(final_changed_list)

        aapt_args.append('-F')
        aapt_args.append(self._finder.get_dst_res_pack_path(self._name))
        aapt_args.append('--debug-mode')
        aapt_args.append('--auto-add-overlay')
        aapt_args.append('--no-version-vectors')

        if len(final_changed_list_chain) > 0 and self._is_art:
            aapt_args.append('--buildIncrement')
            aapt_args.append(final_changed_list_chain)
            aapt_args.append('--resoucres-md5-cache-path')
            aapt_args.append(os.path.join(self._cache_dir, "arsc_cache.dat"))

        aapt_args.append('--ignore-assets')
        aapt_args.append('public_id.xml:public.xml:*.bak:.*')

        if 'ignore_resource_ids' in self._config and len(self._config['ignore_resource_ids']) > 0 and not is_windows_system():
            aapt_args.append('--ignore-ids')
            aapt_args.append(':'.join(self._config['ignore_resource_ids']))

        return aapt_args, final_changed_list
コード例 #3
0
    def process_databinding(self, original_changed_files, changed_files_ref):
        if 'databinding' in self._config:
            if self._config['databinding_modules'] == 0:
                self.debug('no modules for processing databinding')
                return

            databinding_config = self._config['databinding']
            DatabindingDirectoryLookUp.load_path_map(self._config['build_cache_dir'])
            procossor = DataBindingProcessor(self._config)
            for module_config in databinding_config:
                module_name = module_config['name']
                if module_name in original_changed_files['projects']:
                    resources_files = original_changed_files['projects'][module_config['name']]['res']
                    if len(resources_files) == 0:
                        self.debug('module {} has no resources files changed'.format(module_name))
                        continue

                    changed_files_map = {}
                    res_dirs = self._config['project_source_sets'][module_name]['main_res_directory']
                    # TODO: detect matches missing issue
                    for path in resources_files:
                        for rdir in res_dirs:
                            if path.startswith(rdir):
                                if rdir in changed_files_map:
                                    changed_files_map[rdir].append(path)
                                else:
                                    changed_files_map[rdir] = [path]
                                break

                    for rdir in changed_files_map.keys():
                        output_res_dir = DatabindingDirectoryLookUp.find_target_res_path(rdir)
                        output_java_dir = DatabindingDirectoryLookUp.find_target_java_path(rdir)
                        output_layoutinfo_dir = DatabindingDirectoryLookUp.get_merged_layoutinfo_dir(self._cache_dir)
                        if output_res_dir and output_java_dir and output_layoutinfo_dir:
                            changed_files_list = changed_files_map[rdir]
                            procossor.process_module_databinding(module_config, rdir, output_res_dir,
                                                                 output_layoutinfo_dir, output_java_dir,
                                                                 self._config['sdk_directory'],
                                                                 changed_files=changed_files_list)
                            # replace file path
                            for path in changed_files_list:
                                new_path = path.replace(rdir, output_res_dir)
                                self._merged_res_paths.append(output_res_dir)  # append new path prefix
                                self.debug('replace {} with output path: {}'.format(path, new_path))
                                self._replace_mapper[new_path] = path
                                self._changed_files['res'].remove(path)
                                self._changed_files['res'].append(new_path)

                            # mark java compiler
                            if os.path.exists(output_layoutinfo_dir):
                                has_layoutinfo = False
                                for name in os.listdir(output_layoutinfo_dir):
                                    if name.endswith('.xml'):
                                        has_layoutinfo = True
                                        break

                                if has_layoutinfo:
                                    info_file = os.path.join(output_java_dir, 'android', 'databinding', 'layouts',
                                                             'DataBindingInfo.java')
                                    if os.path.exists(info_file):
                                        append_files = [info_file]
                                        append_files.extend(procossor.extract_related_java_files(module_name,
                                                                                                 output_layoutinfo_dir))

                                        if 'apt' not in changed_files_ref['projects'][module_name]:
                                            changed_files_ref['projects'][module_name]['apt'] = []

                                        for fpath in append_files:
                                            self.debug('add {} to {} module'.format(fpath, module_name))
                                            changed_files_ref['projects'][module_name]['apt'].append(fpath)

                                        if not android_tools.is_src_changed(self._config['build_cache_dir']):
                                            android_tools.mark_src_changed(self._config['build_cache_dir'])
コード例 #4
0
    def process_databinding(self, original_changed_files, changed_files_ref):
        if 'databinding' in self._config:
            if self._config['databinding_modules'] == 0:
                self.debug('no modules for processing databinding')
                return

            databinding_config = self._config['databinding']
            DatabindingDirectoryLookUp.load_path_map(self._config['build_cache_dir'])
            procossor = DataBindingProcessor(self._config)
            for module_config in databinding_config:
                module_name = module_config['name']
                if module_name in original_changed_files['projects']:
                    resources_files = original_changed_files['projects'][module_config['name']]['res']
                    if len(resources_files) == 0:
                        self.debug('module {} has no resources files changed'.format(module_name))
                        continue

                    changed_files_map = {}
                    res_dirs = self._config['project_source_sets'][module_name]['main_res_directory']
                    # TODO: detect matches missing issue
                    for path in resources_files:
                        for rdir in res_dirs:
                            if path.startswith(rdir):
                                if rdir in changed_files_map:
                                    changed_files_map[rdir].append(path)
                                else:
                                    changed_files_map[rdir] = [path]
                                break

                    for rdir in changed_files_map.keys():
                        output_res_dir = DatabindingDirectoryLookUp.find_target_res_path(rdir)
                        output_java_dir = DatabindingDirectoryLookUp.find_target_java_path(rdir)
                        output_layoutinfo_dir = DatabindingDirectoryLookUp.get_merged_layoutinfo_dir(self._cache_dir)
                        if output_res_dir and output_java_dir and output_layoutinfo_dir:
                            changed_files_list = changed_files_map[rdir]
                            procossor.process_module_databinding(module_config, rdir, output_res_dir,
                                                                 output_layoutinfo_dir, output_java_dir,
                                                                 self._config['sdk_directory'],
                                                                 changed_files=changed_files_list)
                            # replace file path
                            for path in changed_files_list:
                                new_path = path.replace(rdir, output_res_dir)
                                self._merged_res_paths.append(output_res_dir)  # append new path prefix
                                self.debug('replace {} with output path: {}'.format(path, new_path))
                                self._replace_mapper[new_path] = path
                                self._changed_files['res'].remove(path)
                                self._changed_files['res'].append(new_path)

                            # mark java compiler
                            if os.path.exists(output_layoutinfo_dir):
                                has_layoutinfo = False
                                for name in os.listdir(output_layoutinfo_dir):
                                    if name.endswith('.xml'):
                                        has_layoutinfo = True
                                        break

                                if has_layoutinfo:
                                    info_file = os.path.join(output_java_dir, 'android', 'databinding', 'layouts',
                                                             'DataBindingInfo.java')
                                    if os.path.exists(info_file):
                                        append_files = [info_file]
                                        append_files.extend(procossor.extract_related_java_files(module_name,
                                                                                                 output_layoutinfo_dir))

                                        if 'apt' not in changed_files_ref['projects'][module_name]:
                                            changed_files_ref['projects'][module_name]['apt'] = []

                                        for fpath in append_files:
                                            self.debug('add {} to {} module'.format(fpath, module_name))
                                            changed_files_ref['projects'][module_name]['apt'].append(fpath)

                                        if not android_tools.is_src_changed(self._config['build_cache_dir']):
                                            android_tools.mark_src_changed(self._config['build_cache_dir'])