Android静默安装和自动安装

一,静默安装

获取root进行静默安装比较简单:
1,申请root权限Runtime.getRuntime().exec("su");
2,通过数据输出流DataOutputStream写入pm install命令;
3,最后获取Process进程的返回值int i = process.waitFor();,如果i=0,则表明已获取root权限。
二,免root自动安装


免root自动安装其实就是借助AccessibilityService无障服务;
官网:https://developer.android.google.cn/reference/android/accessibilityservice/AccessibilityService.html

1,在res/xml下新建accessibility_service.xml文件:



    

2,新建MyAccessibilityService继承AccessibilityService
onAccessibilityEvent()是主要的操作方法,响应AccessibilityEvent的事件,在用户操作的过程中,系统不断的发送。
(1)获取活动窗口的根节点
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
(2)检查是安装还是卸载操作,避免误操作;
(3)通过nodeInfo.findAccessibilityNodeInfosByText(clickText);获取特定事件资源节点列表;
(4)如果可点击,则进行点击事件info.performAction(AccessibilityNodeInfo.ACTION_CLICK);

3,最后在androidManifest.xml中申明服务


        
            
        
        
    
  

三,兼容Android7.0+

实现应用安装需要构造uri = Uri.fromFile(new File(apkPath));
但是在Android7.0+以上,禁止对外暴露file://URI,解决办法是content://URI,具体见FileProvider;
官网:https://developer.android.google.cn/reference/android/support/v4/content/FileProvider.html



    


2,在androidManifest.xml中申明provider


    
  


3,java代码实现

public void installAuto(String apkPath) {
    Intent localIntent = new Intent(Intent.ACTION_VIEW);
    localIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    Uri uri;
    /**
      * Android7.0+禁止应用对外暴露file://uri,改为content://uri;具体参考FileProvider
      */
    if (Build.VERSION.SDK_INT >= 24) {
        uri = FileProvider.getUriForFile(this, "com.science.fileprovider", new File(apkPath));
        localIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    } else {
        uri = Uri.fromFile(new File(apkPath));
    }
    localIntent.setDataAndType(uri, "application/vnd.android.package-archive"); //打开apk文件
    startActivity(localIntent);
}

四,已测试机型

1,坚果YQ601-Android5.1.1-Smartusan OS 2.5.3(未root)
2,OPPO R9m-Android5.1-ColorOS V3.0.0(未root)
3,MX4-Android5.1-Flyme6.6.12.2daily(有root)
4,MX6-Android6.0-Flyme5.2.4.1A(未root)
5,HM 1SLTETD-Android4.4.2开发版(有root)
6,MI2-Android5.0.2-MIUI8 6.12.8开发版(有root)
7,MI NOTE LTE-Android6.0.1-MIUI8 6.12.8开发版(有root)
8,Nexus5-Android7.1-AOSP(有root)
9,寨版Android4.4(有root)

源码地址:https://github.com/XYScience/SilenceInstall

你可能感兴趣的:(Android静默安装和自动安装)