Низкий уровень: как скопировать данные приложения с android 4 kitkat на android 6 marshmellow

У меня есть резервные копии Android с моего старого (теперь мертвого) телефона kitkat. Пытаясь восстановить данные двух разных приложений из резервной копии, я не могу запустить приложение со старой базой данных. Я копирую файлы в /data/data/TLD.SOMETHING.APPDIRECORY, но когда я открываю приложение, оно сразу вылетает.

По крайней мере, одно из приложений имеет ту же версию, что и раньше, поскольку оно не обновлялось годами. Права доступа к файлам правильные (пользователь и группа и -rw-------). Если я сгенерирую данные приложения на андроиде 6, переименовав старые данные и запустив приложение, приложение не вылетит, а вновь созданные файлы будут иметь те же права доступа, что и те, которые я восстановил.

Поэтому единственная причина, о которой я могу думать, - это формат базы данных. Я думаю, что, скорее всего, формат БД изменился между Android 4 и 6, и приложения используют только интерфейс к ОС, который обрабатывает фактический доступ к БД для приложения. «ОС» может быть поставщиком SQLite для пакетов ОС или чем-то еще. Верно ли мое предположение? В чем разница и как конвертировать?

Спасибо!

Я не могу ответить на вопрос о форматах базы данных, но если ваше устройство использует SELinux или SEAndroid, вам необходимо исправить контексты безопасности файлов, чтобы они соответствовали приложению, из которого они должны быть прочитаны, иначе приложение не сможет прочитать файл, ни удалить его, ни создать заново.

Ответы (1)

GiantTree заработало. С его комментарием я нашел https://forum.xda-developers.com/showpost.php?s=08f8d78aabe88fb570ec1e59a37e71a8&p=67319237&postcount=3

Что делает трюк. Поэтому вам нужно исправить пользователя, группу, права Unix и контекст безопасности SELinux. Спасибо за этот быстрый ответ!