相关文章推荐
独立的鸵鸟  ·  Add-Type ...·  9 月前    · 
很酷的手套  ·  【vba字典】- 虎课网·  1 年前    · 
强健的吐司  ·  Excel 有哪些和 vlookup ...·  1 年前    · 

一般的安装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:java.io.IOException: Cannot run program “/system/xbin/su”: error=13, Permission deniedCannot run program "su ": error=13, Permission denied in Android Application
Cannot run program “D:\JDK\bin\java.exe“ (in directory “C:\Program Files\JetBrains\IntelliJ IDEA 202
Android版本4.4之後,使用 process = Runtime.getRuntime().exec(“su”); 就會有這個錯誤出現。 就算在底層內直接修改su讀寫權限以及直接給予su root權限也是不行。 最後找到了su daemon,似乎可行,但是這方式有些麻煩。 想使用此方法這邊提供參考網址(未驗證過可行性) https://www.jianshu.com/p/6bc251...
Android:java.io.IOException: Cannot run program "/system/xbin/su": error=13, Permission denied
java调用shell脚本时报错,解决办法。 ProcessBuilder builder = new ProcessBuilder("/bin/chmod", “755”, pathOrCommand); Process process = builder.start(); process.waitFor();
java.io.IOException: Permission denied 哈哈 这个错误我也是搞了半天,在4.4的手机上边可以,但是到7.0上边就是这个错误,也是醉了,最后才发现原来是权限的问题,7.0必须要授权权限,你可以去 应用管理找到你的app看下权限,储存权限又没有开启,可以用此代码动态开启权限 * 获取储存权限 * @param activity * @retu
首先我要解释一下,很多时候出现这个问题,并不是你的文件有毛病,很可能是你代码读取的路径不对,这就要追究到代码本身。批量转化可以在json_to_dataset文件里直接运行代码实现。这个思路还要感谢我的一个师兄。 代码如下: import argparse import base64 import json import os import os.path as osp import imgviz import PIL.Image from labelme.logger import logger from labelme import utils import cv2 from math
这个错误提示说明您尝试使用`su`命令切换到`admin`用户,但是没有获得足够的权限。这通常是由于以下几种情况之一导致的: 1. 您没有`admin`用户的正确密码。请确保输入了正确的密码,并检查键盘布局和大小写字母是否正确。 2. `admin`用户没有被授权使用`su`命令。在某些系统中,只有特定的用户或用户组被授权使用`su`命令来切换到其他用户。请检查系统管理员是否已为`admin`用户设置了适当的权限。 3. 您当前的用户没有足够的权限使用`su`命令。在某些系统中,只有管理员或特定的用户组才能使用`su`命令。请检查您当前用户是否拥有足够的权限来使用`su`命令,并尝试使用`sudo`命令以管理员身份运行您的命令。例如,`sudo su - admin`。 如果您仍然无法解决问题,请联系系统管理员以获取更多帮助。
Android Studio gradle 构建时报错:Project :app doesn’t exist. To custom the host app project name,set `org 我也碰到一样的问题,并且改哪里的hostname都没用,最后没办法,也是把项目改回app去,吭的一批 引入Flutter module,运行main.dart报错: AndroidManifest.xml could not be found. it_observer: 找到问题所在了,Android目录下的build.gradle丢失了,请问这种情况怎么办呢表情包 引入Flutter module,运行main.dart报错: AndroidManifest.xml could not be found. it_observer: 我没移动,昨天还能运行,今天运行就报这个错 windows系统查看局域网内所有已使用的IP m0_61964190: 我连的校园网,试了一下全是请求超时,为啥ping不通呢 rsa密钥指纹 default_wu: 博主真的是大聪明啊