草庐IT

Android报错:Cannot run program “su “: error=13, Permission denied

yzpyzp 2023-04-09 原文

一般的安装apk的方式

通过发一个Intent,把应用所在的路径封装整uri,之后默认启动了PackageInstaller.apk来安装程序了。

但是此种情况下,仅仅是个demo而已,很难达到开发者的需求。如:

1).界面不好

2).被用户知晓

3).什么时候安装完了,卸载完了呢?

第三点可以通过监听系统的安装/卸载的广播来实现

监听系统发出的安装广播

在安装和卸载完后,android系统会发一个广播

android.intent.action.PACKAGE_ADDED(安装)

android.intent.action.PACKAGE_REMOVED(卸载)

咱们就监听这广播,来做响应的逻辑处理。实现代码:

public class MonitorSysReceiver extends BroadcastReceiver{  
        
    @Override    
    public void onReceive(Context context, Intent intent){  
        //接收安装广播   
        if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")) {     
            //TODO      
        }     
        //接收卸载广播    
        if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) {     
            //TODO  
        }  
    }  
} 

Android静默安装

Android静默安装,需要root权限,然后执行安装命令:

 pm install -r packageName

静默安装主要分为以下几种方式:

一、在ROOT过的机器上,在App中使用pm install指令安装APK:

二、修改系统应用PackageManagerIntaller.apk的源码,增加无界面的安装接口:

三、通过反射调用PackageManager.java中的隐藏API来实现静默安装:

Android中实现静态的默认安装和卸载应用

Android应用如何获取root权限

在已经root过得手机上获取root权限,简单
Java代码:

Process process = Runtime.getRuntime().exec("su");

su命令没有权限使用

以下内容,参考自:https://blog.csdn.net/kangear/article/details/51872653.

Android4.2.2(Jelly Bean)上,调用su命令就可以获取到root权限并执行一些命令。但是在Android4.3之上的版本,Google为这种获取root权限的方法设置了层层障碍:

1.su命令源码中添加了uid检验,只允许shell/root用户进行调用;

2.Zygote源码中添加了一些东西,屏蔽掉了App可以进行setuid的功能;

3.adb源码中添加了一些东西,屏蔽掉了adb可以进行setuid的功能(这里指的是对于非userdebug等类似版本的系统) ;

4.开启了SELinux安全模块,1和2条都满足情况下也会中断su命令的执行.

Android app如何获取root权限

一般来说, Android 下的应用程序可以直接得到的最大的权限为 system ,但是如果我们需要在程序中执行某些需要 root 权限的命令,如 ifconfig 等,就需要 root 权限了。

两种安装方式

1. root权限静默安装实现

使用的是su pm install -r filePath命令。
代码如下:

protected static void excuteSuCMD() { 
   Process process = null; 
   OutputStream out = null; 
   InputStream in = null; 
   String currentTempFilePath = "/sdcard/QQ.apk"; 
   try { 
   // 请求root 
   process = Runtime.getRuntime().exec("su"); 
   out = process.getOutputStream(); 
   // 调用安装 
   out.write(("pm install -r " + currentTempFilePath + "\n").getBytes()); 
   in = process.getInputStream(); 
   int len = 0; 
   byte[] bs = new byte[256]; 
   while (-1 != (len = in.read(bs))) { 
   String state = new String(bs, 0, len); 
   if (state.equals("Success\n")) { 
    //安装成功后的操作 
     } 
    } 
   } catch (IOException e) { 
    e.printStackTrace(); 
   } catch (Exception e) { 
    e.printStackTrace(); 
   } finally { 
    try { 
     if (out != null) { 
      out.flush(); 
      out.close(); 
     } 
     if (in != null) { 
      in.close(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
   } 
  }

2. 非root权限提示用户安装

代码如下:

public static void openFile() { 
  // 核心是下面几句代码 
  if (!isHasfile()) { 
   downLoadFile(url); 
  } 
  Intent intent = new Intent(); 
  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
  intent.setAction(android.content.Intent.ACTION_VIEW); 
  intent.setDataAndType( 
    Uri.fromFile(new File("/sdcard/update/updata.apk")), 
    "application/vnd.android.package-archive"); 
  mContext.startActivity(intent); 
 }

参考:
Android:java.io.IOException: Cannot run program “/system/xbin/su”: error=13, Permission denied

Cannot run program "su ": error=13, Permission denied in Android Application

Android中实现静态的默认安装和卸载应用
Android静默安装的实现方案(一)
Android实现静默安装

android apk无法安装高版本号,android 使用FileProvider 兼容apk 在7.0版本无法安装

有关Android报错:Cannot run program “su “: error=13, Permission denied的更多相关文章

  1. ruby-on-rails - Ruby on Rails : . 常量化 : wrong constant name error? - 2

    我正在使用这个:4.times{|i|assert_not_equal("content#{i+2}".constantize,object.first_content)}我之前声明过局部变量content1content2content3content4content5我得到的错误NameError:wrongconstantnamecontent2这个错误是什么意思?我很确定我想要content2=\ 最佳答案 你必须用一个大字母来调用ruby​​常量:Content2而不是content2。Aconstantnamestart

  2. ruby-on-rails - 错误 : Error installing pg: ERROR: Failed to build gem native extension - 2

    我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby​​'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe

  3. ruby - RVM "ERROR: Unable to checkout branch ."单用户 - 2

    我在新的Debian6VirtualBoxVM上安装RVM时遇到问题。我已经安装了所有需要的包并使用下载了安装脚本(curl-shttps://rvm.beginrescueend.com/install/rvm)>rvm,但以单个用户身份运行时bashrvm我收到以下错误消息:ERROR:Unabletocheckoutbranch.安装在这里停止,并且(据我所知)没有安装RVM的任何文件。如果我以root身份运行脚本(对于多用户安装),我会收到另一条消息:Successfullycheckedoutbranch''安装程序继续并指示成功,但未添加.rvm目录,甚至在修改我的.bas

  4. ruby - 安装libv8(3.11.8.13)出错,Bundler无法继续 - 2

    运行bundleinstall后出现此错误:Gem::Package::FormatError:nometadatafoundin/Users/jeanosorio/.rvm/gems/ruby-1.9.3-p286/cache/libv8-3.11.8.13-x86_64-darwin-12.gemAnerroroccurredwhileinstallinglibv8(3.11.8.13),andBundlercannotcontinue.Makesurethat`geminstalllibv8-v'3.11.8.13'`succeedsbeforebundling.我试试gemin

  5. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  6. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  7. ruby-on-rails - 尝试设置 Amazon 的 S3 存储桶 : 403 Forbidden error & setting permissions - 2

    我正在关注Hartl的railstutorial.org并已到达11.4.4:Imageuploadinproduction.我做了什么:注册亚马逊网络服务在AmazonIdentityandAccessManagement中,我创建了一个用户。用户创建成功。在AmazonS3中,我创建了一个新存储桶。设置新存储桶的权限:权限:本教程指示“授予上一步创建的用户读写权限”。但是,在存储桶的“权限”下,未提及新用户名。我只能在每个人、经过身份验证的用户、日志传送、我和亚马逊似乎根据我的名字+数字创建的用户名之间进行选择。我已经通过选择经过身份验证的用户并选中了上传/删除和查看权限的框(而不

  8. ruby-on-rails - gem install rmagick -v 2.13.1 错误 Failed to build gem native extension on Mac OS 10.9.1 - 2

    我已经通过提供MagickWand.h的路径尝试了一切,我安装了命令工具。谁能帮帮我?$geminstallrmagick-v2.13.1Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingrmagick:ERROR:Failedtobuildgemnativeextension./Users/ghazanfarali/.rvm/rubies/ruby-1.8.7-p357/bin/rubyextconf.rbcheckingforRubyversion>=1.8.5...yescheckingfor/

  9. ruby-on-rails - 冒号(:) gives load error in locale YAML file - 2

    我在en:语言环境中有一个字符串display_device:toplay:getplayer冒号给我的错误是cannotloadtranslationsfromC:/DocumentsandSettings/rajg/discoveryaws/branches/internationalization/config/locales/en.yml,expectedittoreturnahash,butdoesnot我怎样才能让它工作? 最佳答案 如果你用这样的引号将它括起来,你可以在你的字符串中转义冒号(和其他“重要”字符):dis

  10. ruby - gem install pg error : couldn't understand kern. osversion `14.0.0' on Yosemite w/Ruby 2.1.5 - 2

    我使用RVM安装Ruby-2.1.5并再次运行bundle。现在pggem不会安装,我得到这个错误:geminstallpg-v'0.17.1'----with-pg-config=/Applications/Postgres.app/Contents/Versions/9.3/bin/pg_configBuildingnativeextensionswith:'--with-pg-config=/Applications/Postgres.app/Contents/Versions/9.3/bin/pg_config'Thiscouldtakeawhile...ERROR:Error

随机推荐