package com.xunye.silenceinstall.util;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
public class HttpUtil {
private static int CONNECTION_TIMEOUT_INT = 30000;
private static int READ_TIMEOUT_INT = 30000;
public static void main(String args[]) throws UnsupportedEncodingException {
Map<String, String> params = new HashMap<String, String>();
// params.put("username", "xyw");
// params.put("password", "xyw");
// params.put("phone", "13631505031");
String rawdata = "BxIRZWdb9ZGNxkj5Hv4KiDEL60eluaECbMa7KqSNxLpVz2g+lqDj2YDMQBjZygZth7LLS0y3w2Jk2LKu9lap2a937rEY+n4qK7cwvE7euGnZ5kyLPYoa1oQZHWI1jF+FI/bebJTcBAJNkdVeDS+bGeJg/Z1FlgzS+H1Vmv8d4fyrdrJuqpsCKjmTG8QWgdr3CniYh9i3I/NrZIgfrnp2M1pKWBkfpYfzMmVauG/fesUTrRZUxXzjVyGdk+il5iWQvA/cpzpm5+yMgqMuvADNn3GQq2tn+j2ows4eo8pxAealexdE75mSyifnkkdVZGOsLkIkKfzep8EGgqCpc8S7qiNWVlT9z/nDFamHa5HACKeioY31QCKi+GKYW+4UKKL9mBZeQwMdhmEXhopaHvQ2cR1zx1ZrQteRDyEWveEf9Yg5BUjA+xctkZwGS71eCrCGd3VI/ssAWd4y1Xuh11lzDjDZhb5tunyTm5dE7XDvP5k8Ni9z6un+j5uKkOexFmh6AQ==";
Map<String, String> maps = new HashMap<>();
maps.put("rawdata", URLEncoder.encode(rawdata, "UTF-8"));
// String res=sendPost(maps,"http://192.168.2.242:8080/system/login/usershop");
// String res = sendPost(maps, "http://14.29.178.161:8090/system/pay/face/weixin");
// getVersion();
new Thread(new Runnable() {
@Override
public void run() {
System.out.print(getVersion());
}
}).start();
}
private static String getVersion(){
String res="";
// String url="https://open.clife.cn/gw/plugin/list";
String url="http://10.6.14.2:33347/gw/plugin/list";
try {
// JSONObject jsonObject=new JSONObject();
// jsonObject.put("size",10);
// jsonObject.put("current",1);
// jsonObject.put("type",2);
Map<String, String> maps = new HashMap<>();
// maps.put("pageRows","10");
// maps.put("pageIndex","1");
maps.put("type","2");
// maps.put("root", new JSONObject(jsonObject.toString()).toString());
res=HttpUtil.sendPost(maps,url);
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
public static String sendJsonPost(String URL,String content){
String result = ""; // 获取服务器返回数据
java.net.URL url = null;
BufferedReader bufferReader = null;
HttpURLConnection urlConn = null;
try {
url = new URL(URL);
urlConn = (HttpURLConnection) url.openConnection();
urlConn.setDoInput(true); // 设置输入流采用字节流
urlConn.setDoOutput(true);// 设置输出流采用字节流
urlConn.setRequestMethod("POST");
urlConn.setUseCaches(false); // 设置缓存
urlConn.setRequestProperty("Charset", "utf-8");
// urlConn.setRequestProperty("Content-Type", "application/json");
urlConn.setConnectTimeout(CONNECTION_TIMEOUT_INT);
urlConn.setReadTimeout(READ_TIMEOUT_INT);
urlConn.connect(); // 连接既往服务端发送消息
DataOutputStream dop = new DataOutputStream(
urlConn.getOutputStream());
dop.write(content.getBytes("utf-8")); // 发送参数
dop.flush(); // 发送,清空缓存
dop.close(); // 关闭
int statusCode = urlConn.getResponseCode();
System.out.println("post statusCode==" + statusCode);
if (statusCode == 200) {
// 下面开始做接收工作
InputStreamReader inputStream = new InputStreamReader(
urlConn.getInputStream());
bufferReader = new BufferedReader(inputStream);
String readLine = null;
while ((readLine = bufferReader.readLine()) != null) {
result += readLine;
}
inputStream.close();
} else {
InputStreamReader inputStream = new InputStreamReader(
urlConn.getErrorStream());
bufferReader = new BufferedReader(inputStream);
String readLine = null;
while ((readLine = bufferReader.readLine()) != null) {
result += readLine;
}
inputStream.close();
}
} catch (MalformedURLException e) {
System.out.println("post MalformedURLException===" + e.toString());
e.printStackTrace();
} catch (IOException e) {
System.out.println("post IOException==" + e.toString());
e.printStackTrace();
} finally {
if (urlConn != null) {
urlConn.disconnect();
}
if (bufferReader != null) {
try {
bufferReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
public static String sendPost(Map<String, String> paramsMap, String URL) {
String result = ""; // 获取服务器返回数据
StringBuffer buff = new StringBuffer(); // 创建一个空StringBuffer存发给服务器的数据
// 迭代Map拼接请求参数
for (Entry<String, String> entry : paramsMap.entrySet()) {
buff.append(entry.getKey()).append('=').append(entry.getValue())
.append('&');
}
if (buff != null) {
buff.delete(buff.lastIndexOf("&"), buff.length());
java.net.URL url = null;
BufferedReader bufferReader = null;
HttpURLConnection urlConn = null;
try {
url = new URL(URL);
urlConn = (HttpURLConnection) url.openConnection();
urlConn.setDoInput(true); // 设置输入流采用字节流
urlConn.setDoOutput(true);// 设置输出流采用字节流
urlConn.setRequestMethod("POST");
urlConn.setUseCaches(false); // 设置缓存
urlConn.setRequestProperty("Charset", "utf-8");
urlConn.setConnectTimeout(CONNECTION_TIMEOUT_INT);
urlConn.setReadTimeout(READ_TIMEOUT_INT);
urlConn.connect(); // 连接既往服务端发送消息
DataOutputStream dop = new DataOutputStream(
urlConn.getOutputStream());
dop.write(buff.toString().getBytes("utf-8")); // 发送参数
dop.flush(); // 发送,清空缓存
dop.close(); // 关闭
int statusCode = urlConn.getResponseCode();
System.out.println("post statusCode==" + statusCode);
if (statusCode == 200) {
// 下面开始做接收工作
InputStreamReader inputStream = new InputStreamReader(
urlConn.getInputStream());
bufferReader = new BufferedReader(inputStream);
String readLine = null;
while ((readLine = bufferReader.readLine()) != null) {
result += readLine;
}
inputStream.close();
Android10静默安装APK


在Android系统中,静默安装APK(Silent Install)是指在用户无感知的情况下自动安装应用程序。这通常需要系统的特殊权限,因为出于安全考虑,Android系统默认不允许非系统应用进行后台安装。在Android 10中,由于谷歌进一步加强了对用户隐私和安全性的保护,静默安装变得更加严格,通常需要将应用编译到`priv-app`目录下以获取更高的权限。 要实现Android 10的静默安装,你需要具备以下基础知识: 1. **权限管理**:在Android 10中,静默安装通常需要`INSTALL_PACKAGES`权限,这是一个系统级权限。只有系统应用或具有签名与系统相同的应用才能获得此权限。因此,你需要将你的应用打包到`system/priv-app`目录下,并在AndroidManifest.xml中声明该权限: ```xml <manifest ...> <uses-permission android:name="android.permission.INSTALL_PACKAGES"/> ... </manifest> ``` 2. **应用签名**:为了将应用编译到`priv-app`,你需要一个与系统相同的证书来签名应用。这通常意味着你需要获取设备制造商的签名证书,这在大多数情况下并不容易。 3. **编程接口**:静默安装通常涉及使用`PackageManager`类的API。例如,你可以使用`installPackage()`方法来安装APK文件,但请注意,这个方法在Android 10及以上版本可能已被废弃,你可能需要使用`installExistingPackageAsUser()`或者`installPackage()`的替代方法,并结合`UserManager`来指定安装的目标用户。 4. **AOSP源码**:如果你正在开发一个自定义ROM或者有权限修改系统源码,你可以在AOSP源码中找到关于静默安装的实现,参考`frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java`。 5. **安全考虑**:虽然静默安装提供了便利,但也可能被恶意应用利用。因此,你应该确保只在必要的场景下使用,并遵循最佳实践来防止滥用。 现在,让我们深入了解一下` Silenceinstall `这个压缩包文件可能包含的内容: - **SilenceInstall.jar 或 .aar**:这可能是实现静默安装功能的库文件,包含了处理安装逻辑的Java代码和资源文件。 - **SampleUsage.java**:可能是一个示例代码文件,展示了如何在代码中调用相关API进行静默安装。 - **README.md**:可能包含了使用这个库的指南,包括如何添加依赖、请求权限以及调用示例代码等。 - **build.gradle**:如果存在,可能是一个构建脚本,用于构建和签名应用。 - **AndroidManifest.xml**:应用的清单文件,可能会声明`INSTALL_PACKAGES`权限。 在实际操作时,你需要根据提供的`Silenceinstall`压缩包内容,结合上述知识进行集成和调用。注意,静默安装APK涉及到系统级别的操作,所以在开发和测试过程中,确保遵循安全规范,避免对用户的设备造成潜在风险。在发布应用前,一定要对目标设备进行充分的兼容性和安全性测试。
















































































































- 1
- 2

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整


- 粉丝: 2606
- 资源: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 全文检索知识库档案管理系统kykms-DeepSeek资源
- (源码)基于Python的智能温室自动化系统.zip
- 健身协会活动小程序-活动资源
- (源码)基于Arduino平台的DMX通信和RDM协议处理项目.zip
- 健身协会活动小程序-活动资源
- KeyMouseHook-活动资源
- kis-flow-活动资源
- (源码)基于Arduino的CAN总线通讯与状态检测系统.zip
- LetsOJ_多人刷题打卡-C语言资源
- (源码)基于 JavaScript 的 larkplayerhls 视频播放插件.zip
- (源码)基于Arduino的电子墨水屏图书展示系统.zip
- xmake-C++资源
- kisso-Java资源
- JFinal-Python资源
- (源码)基于Arduino的雪茄柜温湿度监控系统.zip
- SwiftSQLiteORM-Swift资源


