# 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)