Измените язык устройства на Android 6.0 (Android M)

Существуют приложения для изменения языка устройства Android (локали) с помощью команды ADB. Это потребовало предоставления разрешения CHANGE_CONFIGURATION для приложения до изменения языка.

В Android 6.0 (уровень API 23, устройство Nexus 6), однако, предоставление требуемого разрешения больше не разрешено, так как команда adb shell pm grant net.sanapeli.adbchangelanguage android.permission.CHANGE_CONFIGURATION (имя пакета из Приложение для изменения языка АБР в качестве примера) дает

Операция не разрешена: java.lang.SecurityException: Permission android.permission.CHANGE_CONFIGURATION не является изменяемым типом разрешений

Как вы можете изменить язык/локаль на ОС Android версии 6.0 без укорачивания устройства? Можно ли это сделать с помощью вспомогательного приложения или прямой команды ADB или путем запуска какого-либо намерения vai ADB?

Связанный вопрос с 2010 года: Программный перевод программного обеспечения на Android

Ответ 1

SecurityException больше не существует для общего образа версии Android OS 6.0 (Marshmallow). Это было подтверждено на устройствах Nexus 6 и Nexus 9. Дело закрыто.

Ответ 2

Мне удалось получить эту работу, поставив мое приложение в /system/priv -app, поэтому оно становится привилегированным системным приложением. Как root:

mount -o remount,rw /system
mkdir /system/priv-app/MyApp
cp /sdcard/myapp.apk /system/priv-app/MyApp/MyApp.apk
chcon "u:object_r:system_file:s0" /system/priv-app/MyApp
chcon "u:object_r:system_file:s0" /system/priv-app/MyApp/MyApp.apk
mount -o remount,ro /system

Chcon устанавливает соответствующий контекст безопасности SELinux.