# SilenceInstall **Repository Path**: lechenxuan/SilenceInstall ## Basic Information - **Project Name**: SilenceInstall - **Description**: 静默安装和自动安装 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-04-15 - **Last Updated**: 2025-04-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SilenceInstall 静默安装和自动安装 一,静默安装 ------------ 获取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 * 1,在res/xml下新建file_paths.xml文件 ``` ``` * 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)