1.ota升级是可以清除data分区的

之前没有设置都是要手动恢复出厂设置

adb shell am broadcast -a android.intent.action.MASTER_CLEAR

后来修改以下即可实现 

\build\tools\releasetools\ota_from_target_files


import sys

if sys.hexversion < 0x02070000:
  print >> sys.stderr, "Python 2.7 or newer is required."
  sys.exit(1)

import copy
import errno
import multiprocessing
import os
import re
import subprocess
import tempfile
import time
import zipfile

from hashlib import sha1 as sha1

import common
import edify_generator
import build_image
import blockimgdiff
import sparse_img

OPTIONS = common.OPTIONS
OPTIONS.package_key = None
OPTIONS.incremental_source = None
OPTIONS.verify = False
OPTIONS.require_verbatim = set()
OPTIONS.prohibit_verbatim = set(("system/build.prop",))
OPTIONS.patch_threshold = 0.95
- OPTIONS.wipe_user_data = False
+ OPTIONS.wipe_user_data = True
OPTIONS.omit_prereq = False
OPTIONS.extra_script = None
OPTIONS.aslr_mode = True
OPTIONS.worker_threads = multiprocessing.cpu_count() // 2
if OPTIONS.worker_threads == 0:
  OPTIONS.worker_threads = 1
OPTIONS.two_step = False
OPTIONS.no_signing = False
OPTIONS.block_based = False
OPTIONS.updater_binary = None
OPTIONS.oem_source = None
OPTIONS.fallback_to_full = True

如果没有反应

可以更新以下内容

\bootable\recovery\updater\install.c

static char* getDevicePath(char *mtdDevice) {
	int emmcEnabled = getEmmcState();
	char devicePath[128] = "/";
	if(emmcEnabled) {
		if(fstab == NULL) {
			load_volume_table();
		}
	
		if(strstr(mtdDevice, "/dev/block/rknand_")) {
			strcat(devicePath, mtdDevice+18);
			printf("mtd device %s\n", devicePath);
+            if(!strcmp(devicePath, "/userdata")){
+                strcpy(devicePath, "/data");
+                printf("The path is /userdata, mtd device trans to %s\n", devicePath);
+            }			
			Volume* v = volume_for_path(devicePath);
			if (v != NULL) {
				printf("get volume path %s\n", v->blk_device);
				return v->blk_device;
			}else {
				printf("Cannot load volume %s!\n", devicePath);
			}
		}
	}

	return mtdDevice;
}

然后就可以了.

更多推荐