modify_resource_file
Update the content of a specified resource file in Android projects. Define project directory, resource type, name, and new content. Optional backup creation ensures data safety during modifications.
Instructions
Modify the content of a specific resource file.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| create_backup | No | ||
| new_content | Yes | ||
| project_dir | Yes | ||
| resource_name | Yes | ||
| resource_type | Yes |
Implementation Reference
- apktool_mcp_server.py:1008-1079 (handler)The main handler function for the 'modify_resource_file' MCP tool. It modifies a resource file in the res/[resource_type]/[resource_name] path within an APKTool project directory. Includes input validation using ValidationUtils, backup creation, file writing with UTF-8 encoding, and returns detailed success/error information including sizes and paths.@mcp.tool() async def modify_resource_file( project_dir: str, resource_type: str, resource_name: str, new_content: str, create_backup: bool = True ) -> Dict: """ Modify the content of a specific resource file with validation and backup support. Args: project_dir: Path to the APKTool project directory resource_type: Resource type (e.g., "layout", "values") resource_name: Name of the resource file new_content: New content for the resource file create_backup: Whether to create a backup of the original file Returns: Dictionary with operation results and metadata """ # Input validation path_validation = ValidationUtils.validate_path(project_dir, must_exist=True) if not path_validation["valid"]: return {"success": False, "error": path_validation["error"]} if not resource_type or not resource_name: return {"success": False, "error": "Resource type and name are required"} resource_path = os.path.join(project_dir, "res", resource_type, resource_name) if not os.path.exists(resource_path): return { "success": False, "error": f"Resource file not found: {resource_path}", "expected_path": resource_path } try: # Get original file info original_size = os.path.getsize(resource_path) # Create backup if requested backup_path = None if create_backup: backup_path = f"{resource_path}.bak.{int(time.time())}" shutil.copy2(resource_path, backup_path) # Write new content with open(resource_path, 'w', encoding="utf-8") as f: f.write(new_content) result = { "success": True, "message": f"Successfully modified {resource_path}", "path": resource_path, "backup_path": backup_path, "resource_type": resource_type, "resource_name": resource_name, "original_size": original_size, "new_size": len(new_content), "backup_created": backup_path is not None } return result except Exception as e: logger.error(f"Error modifying resource file: {str(e)}") return { "success": False, "error": f"Failed to modify resource file: {str(e)}" }