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

Я работал над созданием пакета как владелец устройства, но безуспешно. Я рутировал свое устройство на то же самое. Я использую эту команду.

                val exe = ShellExecuter()
                var command = "dpm set-device-owner $packageName/ .MyDeviceAdminReceiver"
                val outp = exe.Executer(command)

ShellExecuter фрагмент

public String Executer(String command) {
                    StringBuffer output = new StringBuffer();
                    Process p;
                    try {
                        p = Runtime.getRuntime().exec(command);
                        p.waitFor();
                        BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
                        String line = "";
                        while ((line = reader.readLine())!= null) {
                            output.append(line + "\n");
                        }
                    } catch (Exception e) {`enter code here`
                        e.printStackTrace();
                    }
                    String response = output.toString();
                    return response;
                } 

MyDeviceAdminReceiver сниппет

class MyDeviceAdminReceiver : DeviceAdminReceiver() {
    companion object {
        fun getComponentName(context: Context): ComponentName {
            return ComponentName(context.applicationContext, MyDeviceAdminReceiver::class.java)
        }

        private val TAG = MyDeviceAdminReceiver::class.java.simpleName
    }

    override fun onLockTaskModeEntering(context: Context?, intent: Intent?, pkg: String?) {
        super.onLockTaskModeEntering(context, intent, pkg)
        Log.d(TAG, "onLockTaskModeEntering")
    }

    override fun onLockTaskModeExiting(context: Context?, intent: Intent?) {
        super.onLockTaskModeExiting(context, intent)
        Log.d(TAG, "onLockTaskModeExiting")
    }
}

device_admin_reciever сниппет

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<device-admin>
    <uses-policies>
        <limit-password />
        <watch-login />
        <reset-password />
        <force-lock />
        <wipe-data />
        <expire-password />
        <encrypted-storage />
        <disable-camera />
    </uses-policies>
</device-admin>

Я хочу сделать мое корневое устройство владельцем моего пакета приложения программно с помощью команд или любым другим способом, если кто-нибудь может предложить.


person Ravneet Singh    schedule 20.12.2018    source источник
comment
Пожалуйста, не помещайте public String Executer в производственный код!   -  person Onik    schedule 28.12.2018


Ответы (2)


Если у вас есть root-права на своем устройстве, вы можете воспользоваться этим методом, чтобы стать владельцем устройства.

Сначала создайте файл device_owner.xml со следующим содержимым:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<device-owner package="your.owner.app.package.id" name="Your app name" />

Теперь сделайте следующие шаги

adb push device_owner.xml /sdcard/

adb shell

su

cp /sdcard/device_owner.xml /data/system/

cd /data/system/

chown system:system device_owner.xml

reboot

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

Отметьте этот вопрос Как сделать мое приложение владельцем устройства?

person nkalra0123    schedule 27.12.2018
comment
Я хочу запустить вышеупомянутую команду программно. Это все команды оболочки, которые необходимо запускать на терминале. Так что все, что можно запустить в коде, полезно. - person Ravneet Singh; 31.12.2018

Создайте файл xml и скопируйте из своего кода в правильное место /data/system/device_owner.xml и выполните этот код, чтобы установить правильные разрешения. и вызвать команду перезагрузки

final String[] run_cmd = new String[]{"chown","system:system","/data/system/device_owner.xml"};
String reboot = "/system/bin/reboot";

execute(null,run_cmd);
execute(null,reboot);


 public void execute(Map<String, String> environvenmentVars, String[] cmd) {

            try {

                Process process = Runtime.getRuntime().exec(cmd);
                BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

                StringBuffer output = new StringBuffer();

                char[] buffer = new char[4096];
                int read;

                while ((read = reader.read(buffer)) > 0) {
                    output.append(buffer, 0, read);
                }

                reader.close();

                process.waitFor();    
                BufferedReader reader2 = new BufferedReader(new InputStreamReader(process.getErrorStream()));    
                StringBuffer output2 = new StringBuffer();

                char[] buffer2 = new char[4096];
                int read2;

                while ((read2 = reader2.read(buffer2)) > 0) {
                    output2.append(buffer2, 0, read2);
                }

                reader.close();
                process.waitFor();
                }

            catch (Exception e)
            {

            }

        }
person nkalra0123    schedule 01.01.2019