Ответ 1
Вы получаете эту ошибку, потому что путь, который вы исключаете, находится вне пути, который включен в резервную копию. Если вы укажете какой-либо пользовательский include
, то будут скопированы ТОЛЬКО эти вещи:
<include>
- указывает файл или папку для резервного копирования. По умолчанию Auto Backup включает в себя практически все файлы приложения. Если вы укажете элемент, система больше не будет включать файлы по умолчанию и будет выполнять резервное копирование только указанных файлов. Чтобы включить несколько файлов, используйте несколько элементов.
Документация здесь.
В вашем случае exclude
в com.yocto.wenote.backup.Backuper.xml
не находится на пути include
com.yocto.wenote_preferences.xml
- отсюда ошибка.
Если вы изучите код правила lint, который генерирует сообщение об ошибке, он подтвердит, что, поскольку ваш путь исключения не имеет префикса какого-либо включения, вы попадете на случай !hasPrefix
.
Соответствующая часть здесь:
for (String includePath : included) {
if (excludePath.startsWith(includePath)) {
if (excludePath.equals(includePath)) {
Attr pathNode = exclude.getAttributeNode(ATTR_PATH);
assert pathNode != null;
Location location = context.getValueLocation(pathNode);
// Find corresponding include path so we can link to it in the
// chained location list
for (Element include : includes) {
Attr includePathNode = include.getAttributeNode(ATTR_PATH);
String includeDomain = include.getAttribute(ATTR_DOMAIN);
if (includePathNode != null
&& excludePath.equals(includePathNode.getValue())
&& domain.equals(includeDomain)) {
Location earlier = context.getLocation(includePathNode);
earlier.setMessage("Unnecessary/conflicting <include>");
location.setSecondary(earlier);
}
}
context.report(ISSUE, exclude, location,
String.format("Include '%1$s' is also excluded", excludePath));
}
hasPrefix = true;
break;
}
}
if (!hasPrefix) {
Attr pathNode = exclude.getAttributeNode(ATTR_PATH);
assert pathNode != null;
context.report(ISSUE, exclude, context.getValueLocation(pathNode),
String.format("'%1$s' is not in an included path", excludePath));
}
Таким образом, в вашем случае вам вообще не нужно исключать этот файл, так как ТОЛЬКО com.yocto.wenote_preferences.xml
включен в вашу резервную копию.
Вы также можете включить подробное ведение журнала для резервного копирования транспорта и разбора XML, чтобы видеть, что происходит:
adb shell setprop log.tag.GmsBackupTransport VERBOSE
adb shell setprop log.tag.BackupXmlParserLogging VERBOSE