首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安装APK并从Shell脚本启动应用程序

安装APK并从Shell脚本启动应用程序
EN

Stack Overflow用户
提问于 2017-12-06 07:13:51
回答 1查看 7.7K关注 0票数 3

我的要求是:App A将运行已经位于"system/bin“位置的shell脚本(myshellscript.sh),而shell脚本将安装存储在"sdcard/Download”位置的App B,并启动App

所以在继续之前,我想告诉你们

  1. 我的设备已经扎根,因为我有自定义ROM在其中闪现。
  2. App A是具有系统特权的系统应用程序。
  3. 当我通过命令运行我的脚本时,我的脚本按照要求运行良好:adb shell sh system/bin/myshellscript.sh
  4. 我对shell脚本不太了解。

下面是我的shell脚本:

代码语言:javascript
复制
#!/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;

所以问题是,当我通过上面提到的命令运行这个脚本时,它的工作正常,但是当我在App 的按钮上以编程方式运行相同的脚本时,除了pm install -r "/sdcard/Download/SampleApplication.apk";代码之外,所有用脚本编写的命令都是工作的,我试图运行的脚本是:

代码语言:javascript
复制
            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();
            }

更新:I捕获了亚行日志,并在异常下运行:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2017-12-13 10:35:33

当由亚行shell执行脚本时,它在shell权限下运行。Shell比你的沙箱应用程序拥有更高的权限。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47668812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档