Android: su pm install -r permission denied в системном приложении

137
25 декабря 2019, 17:00

Не могу обновить приложение без спроса пользователя, приложение является системным и вшито в прошивку в system/priv-app/. Как пробовал:

var destination = Environment
        .getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
        .toString() + "/"
val fileName = "${updater!!.appName}.apk"
destination += fileName
val file = File(destination)
if (file.exists()) {
    try {
        val command = "su pm install -r ${file.absolutePath}\n"
        val proc = Runtime.getRuntime().exec(command)
        val stdError = BufferedReader(InputStreamReader(proc.errorStream))
        var s = "123"
        while (!s.isEmpty()) {
            Log.d(Tags.TEST, s)
            Toaster.showError(this, s, Toast.LENGTH_LONG)
            s = stdError.readLine()
        }
        proc.waitFor()
        Toaster.showError(this, "Success", Toast.LENGTH_LONG)
    } catch (e: Exception) {
        e.printStackTrace()
        Toaster.showError(this, e.localizedMessage, Toast.LENGTH_LONG)
    }
} else {
    Toaster.showError(this, "No file", Toast.LENGTH_LONG)
}

Возникает исключение: Cannot run programm "su": error=13, Permission Denied. Если использовать

val command = "pm install -r ${file.absolutePath}\n"

, то отлавливается в errorStream сообщение о неправильном юзере, цитирую: Error: java.lang.SecurityException:Premission Denial: runInstallCreate from pm command asks to run as user -1 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL

Пермишены из манифеста:

    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS"/>
    <uses-permission android:name="android.permission.INSTALL_PACKAGES" />
    <uses-permission android:name="android.permission.DELETE_PACKAGES" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
    <uses-permission android:name="android.permission.REBOOT" />
    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>
    <uses-permission android:name="android.permission.WAKE_LOCK" />

При этом, к примеру, перезагрузка телефона из приложения без спроса пользователя работает (через PowerManager)

val pm = getSystemService(Context.POWER_SERVICE) as PowerManager
pm.reboot(null)
READ ALSO
Можно ли получить число N используя только /*-+()?

Можно ли получить число N используя только /*-+()?

Написать алгоритм, который используя числа 1, 3, 4, 6, а также умножение, деление, сложение, вычитание и скобки, находит все комбинации для получения...

156
SharedPreferences настройки приложения

SharedPreferences настройки приложения

Как организовать в настройках приложения функцию скрыть/показать textviewПытался с помощью SharedPreferences, но так и понял

145
Почему приложение вылетает [закрыт]

Почему приложение вылетает [закрыт]

Хотите улучшить этот вопрос? Update the question so it's on-topic for Stack Overflow на русском

152
Оптимизировать код методов Java

Оптимизировать код методов Java

Есть такая задача: найти максимальную последовательность единиц в матрицеПоследовательность может быть как горизонтальной так и вертикальной

119