Установите APK и запустите приложение из сценария Shell

Мое требование:Приложение A будет запускать сценарий оболочки (myshellscript.sh), который уже находится в расположении "system/bin", а сценарий оболочки установит приложение B, которое хранится в расположении "sdcard/Download", и запустит приложение B.

Поэтому, прежде чем продолжить, я хочу сказать вам, что

  1. мое устройство уже рутировано, так как в нем прошито пользовательское ПЗУ
  2. Приложение A - это системное приложение с системными привилегиями.
  3. Мой скрипт работает нормально в соответствии с требованием, когда я запускаю свой скрипт командой: adb shell sh system/bin/myshellscript.sh
  4. У меня не так много знаний о сценарии оболочки.

ниже мой сценарий оболочки:

#!/bin/bash 
echo "Shell script works on Android"
pm install -r "/sdcard/Download/SampleApplication.apk";
echo "Going to sleep for 15 sec"
sleep 15;
echo "woked up after 15 sec"
am start -n "com.aaa.sampleapplication/.MainActivity";
sleep 5;

Поэтому проблема заключается в том, что когда я запускаю этот скрипт по команде, упомянутой выше, он работает нормально, но когда тот же скрипт запускается программно по нажатию кнопки приложения A, все команды, написанные в скрипте, работают, кроме pm install -r "/sdcard/Download/SampleApplication.apk";Код, который я пытаюсь запустить мой скрипт:

            try
            {
                Runtime rt = Runtime.getRuntime();

                Process proc = rt.exec("sh /system/bin/myshellscript.sh");
                InputStream is = proc.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                String line;

                while ((line = br.readLine()) != null) {
                    System.out.println(line);
                }
            } catch (Throwable t)
            {
                t.printStackTrace();
            }

ОБНОВЛЕНИЕ: я захватил журнал adb и получаю исключение ниже:

AndroidRuntime: Calling main entry com.android.commands.pm.Pm
11-19 00:37:50.867  7887  7887 E Pm      : Error
11-19 00:37:50.867  7887  7887 E Pm      : java.lang.NullPointerException
11-19 00:37:50.867  7887  7887 E Pm      :  at android.os.Parcel.readException(Parcel.java:1690)
11-19 00:37:50.867  7887  7887 E Pm      :  at android.os.Parcel.readException(Parcel.java:1637)
11-19 00:37:50.867  7887  7887 E Pm      :  at android.content.pm.IPackageInstaller$Stub$Proxy.createSession(IPackageInstaller.java:249)
11-19 00:37:50.867  7887  7887 E Pm      :  at com.android.commands.pm.Pm.doCreateSession(Pm.java:552)
11-19 00:37:50.867  7887  7887 E Pm      :  at com.android.commands.pm.Pm.runInstall(Pm.java:392)
11-19 00:37:50.867  7887  7887 E Pm      :  at com.android.commands.pm.Pm.run(Pm.java:142)
11-19 00:37:50.867  7887  7887 E Pm      :  at com.android.commands.pm.Pm.main(Pm.java:99)
11-19 00:37:50.867  7887  7887 E Pm      :  at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
11-19 00:37:50.867  7887  7887 E Pm      :  at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:277)
11-19 00:37:50.869  7887  7887 I art     : System.exit called, status: 1

1 ответ

При выполнении сценария с помощью оболочки adb он запускается с разрешения оболочки. Shell имеет более высокое разрешение, чем ваше приложение, которое находится в песочнице.

Другие вопросы по тегам