def fill_classpaths(self): # classpaths: # 1. patch classes # 2. dependent modules' patch classes # 3. android.jar # 4. third party jars # 5. generated classes in build directory patch_classes_cache_dir = self._finder.get_patch_classes_cache_dir() self._classpaths.append(patch_classes_cache_dir) self._classpaths.append(self._finder.get_dst_classes_dir()) for module in self._module_info['local_module_dep']: finder = GradleDirectoryFinder(module, self._module_dir_map[module], self._cache_dir) self._classpaths.append(finder.get_patch_classes_cache_dir()) # add main module classes dir to classpath to generate databinding files main_module_name = self._config['main_project_name'] if self._name != main_module_name and self._is_databinding_enabled: finder = GradleDirectoryFinder( main_module_name, self._module_dir_map[main_module_name], self._cache_dir, config=self._config) self._classpaths.append(finder.get_dst_classes_dir()) self._classpaths.append( os.path.join(self._config['compile_sdk_directory'], 'android.jar')) self._classpaths.extend(self._module_info['dep_jar_path']) # remove existing same-name class in build directory srcdirs = self._config['project_source_sets'][ self._name]['main_src_directory'] for dirpath, dirnames, files in os.walk(patch_classes_cache_dir): for fn in files: if self._is_r_file_changed and self._module_info[ 'packagename'] + '.R.' in fn: android_tools.delete_class(dirpath, fn.replace('.class', '')) if fn.endswith( '.class' ) and '$' not in fn and 'R.' not in fn and 'Manifest.' not in fn: cp = os.path.join(dirpath, fn) java_src = cp.replace( '.class', '.java').split('classes' + os.path.sep)[1] existence = True for src_dir in srcdirs: if os.path.exists(os.path.join(src_dir, java_src)): existence = True break # if not os.path.exists(os.path.join(src_dir, java_src)): # android_tools.delete_class(dirpath, fn.replace('.class', '')) if not existence: android_tools.delete_class(dirpath, fn.replace('.class', ''))
def before_execute(self): self._finder = GradleDirectoryFinder( self._name, self._module_path, self._cache_dir, package_name=self._module_info['packagename'], config=self._config)