Как добавить пользовательский INTENT в AOSP для предоставления доступа к контрольному вызову на системном уровне? - PullRequest
2 голосов
/ 06 ноября 2019

Мне нужно получить доступ к функции перезагрузки. Безопасность не позволяет мне сделать это. Платформа представляет собой пользовательскую сборку, поэтому она будет только частью моей сборки на основе AOSP.

Мне было интересно, как я могу внести изменения в AOSP и иметь возможность вызывать системные функции для перезагрузки. Можно ли добавить пользовательский ИНТЕНТ, который я могу вызвать из пространства пользователя, который затем выполнит для меня команду перезагрузки?

Следующий код не работает из приложения уровня пользователя, поэтому я подумал, что смогу сделать этоиз сборки AOSP и добавьте пользовательское намерение, которое я могу вызвать. Возможно?

Process chperm;
try {
    Runtime rt = Runtime.getRuntime();
    chperm = rt.exec(new String[] {"/system/bin/reboot"});

    chperm.waitFor();

} catch (IOException e) {
    e.printStackTrace();
} catch (InterruptedException e) {
    e.printStackTrace();
}

1 Ответ

1 голос
/ 06 ноября 2019

Вы должны быть системным приложением. Некоторые разрешения, такие как перезагрузка, предоставляются только системным приложениям. Вы подписали приложение с сертификатом платформы ( сгенерируйте jks из platform.pk8 и platform.x509.pem )

Затем запросите разрешение на перезагрузку в манифесте:

<uses-permission android:name="android.permission.REBOOT" />

Затем вы можете вызвать reboot:

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
pm.reboot(null)

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

...