From a9b5ae48313ef7758504ec8cda3d1a75521f35a7 Mon Sep 17 00:00:00 2001 From: yjj38 Date: Wed, 9 Jul 2025 13:19:34 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E5=88=A0=E9=99=A4=20ArmCloudApiClient?= =?UTF-8?q?=20=E7=B1=BB=E5=B9=B6=E6=B7=BB=E5=8A=A0=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除了 app/src/main/java/com/example/studyapp/device/ArmCloudApiClient.java 文件 - 在项目根目录下添加了 .idea/inspectionProfiles/Project_Default.xml 文件,配置代码检查规则 --- .idea/inspectionProfiles/Project_Default.xml | 84 ++++++ .../studyapp/device/ArmCloudApiClient.java | 253 ------------------ 2 files changed, 84 insertions(+), 253 deletions(-) create mode 100644 .idea/inspectionProfiles/Project_Default.xml delete mode 100644 app/src/main/java/com/example/studyapp/device/ArmCloudApiClient.java diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..1e85ea1 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,84 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/studyapp/device/ArmCloudApiClient.java b/app/src/main/java/com/example/studyapp/device/ArmCloudApiClient.java deleted file mode 100644 index 088d01e..0000000 --- a/app/src/main/java/com/example/studyapp/device/ArmCloudApiClient.java +++ /dev/null @@ -1,253 +0,0 @@ -package com.example.studyapp.device; - -import android.os.Build.VERSION; -import android.os.Build.VERSION_CODES; -import android.util.Log; -import com.example.studyapp.utils.LogFileUtil; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.time.Instant; -import java.util.List; -import java.util.Map; -import java.util.concurrent.TimeUnit; -import javax.crypto.Mac; -import javax.crypto.spec.SecretKeySpec; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.MediaType; -import okhttp3.OkHttpClient; -import okhttp3.OkHttpClient.Builder; -import okhttp3.Request; -import okhttp3.RequestBody; -import okhttp3.Response; -import okhttp3.ResponseBody; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -/** - * @Time: 2025-06-08 17:06 - * @Creator: 初屿贤 - * @File: ArmCloudApiClient - * @Project: study.App - * @Description: - */ -public class ArmCloudApiClient { - - private final OkHttpClient client; - private final String baseUrl; - private final String accessKey; - private final String secretKey; - - public ArmCloudApiClient(String baseUrl, String accessKey, String secretKey) { - this.client = new Builder() - .connectTimeout(10, TimeUnit.SECONDS) - .readTimeout(10, TimeUnit.SECONDS) - .build(); - this.baseUrl = baseUrl; - this.accessKey = accessKey; - this.secretKey = secretKey; - } - - private static final String ALGORITHM = "HmacSHA256"; - - public static String calculateSignature(String timestamp, String path, String body, String secretKey) throws Exception { - String stringToSign = timestamp + path + (body != null ? body : ""); - Mac hmacSha256 = Mac.getInstance(ALGORITHM); - SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), ALGORITHM); - hmacSha256.init(secretKeySpec); - byte[] hash = hmacSha256.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8)); - return bytesToHex(hash); - } - - private static String bytesToHex(byte[] bytes) { - StringBuilder hexString = new StringBuilder(); - for (byte b : bytes) { - String hex = Integer.toHexString(0xff & b); - if (hex.length() == 1) { - hexString.append('0'); - } - hexString.append(hex); - } - return hexString.toString(); - } - - /** - * 修改实例安卓改机属性 静态设置安卓改机属性,需要重启实例才能够生效,一般用于修改设备信息 该接口与修改实例属性接口的区别在于生效时机,该接口生效时间为每次开机初始化 设置实例属性后,属性数据会持久化存储,重启或重置实例无需再调用该接口 - * - * @param padCode 实例 ID,非空 - * @param props 属性映射,非空 - * @param restart 是否自动重启 - * @return 接口返回结果字符串 - * @throws IOException 请求失败或网络错误 - */ - public String updateAndroidModProperties(String padCode, Map props, boolean restart) throws IOException { - // 参数校验 - if (padCode == null || padCode.isEmpty()) { - throw new IllegalArgumentException("padCode 不能为空"); - } - if (props == null) { - throw new IllegalArgumentException("props 不能为 null"); - } - - // 构造请求体 - JSONObject json = new JSONObject(); - - try { - json.put("padCode", padCode); - json.put("props", new JSONObject(props)); - json.put("restart", restart); - } catch (JSONException e) { - LogFileUtil.logAndWrite(Log.ERROR, "ArmCloudApiClient", "updateAndroidModProperties: JSON error", e); - } - - String jsonBody = json.toString(); - - // 生成时间戳 - String timestamp = String.valueOf(System.currentTimeMillis()); - - String API_PATH = "/openapi/open/pad/updatePadAndroidProp"; - - String signature = ""; - try { - signature = calculateSignature(timestamp, API_PATH, jsonBody, secretKey); - } catch (Exception e) { - LogFileUtil.logAndWrite(Log.ERROR, "ArmCloudApiClient", "updateAndroidModProperties: Signature error", e); - } - - RequestBody body = RequestBody.create( - MediaType.parse("application/json; charset=utf-8"), - jsonBody - ); - - Request request = new Request.Builder() - .url(baseUrl + API_PATH) - .addHeader("authver", "2.0") - .addHeader("x-ak", accessKey) - .addHeader("x-timestamp", timestamp) - .addHeader("x-sign", signature) - .post(body) - .build(); - - try (Response response = client.newCall(request).execute()) { - if (!response.isSuccessful()) { - throw new IOException("请求失败: " + response); - } - - ResponseBody responseBody = response.body(); - if (responseBody == null) { - throw new IOException("响应体为空"); - } - - return responseBody.string(); - } - } - - - /** - * 修改实例属性 动态修改实例的属性信息,包括系统属性和设置 实例需要处于开机状态,该接口为即时生效 - *

- * 示例: String[] padCodes = new String[]{"AC21020010001"}; List systemProps = Arrays.asList( new PropertyItem("ro.build.id", "QQ3A.200805.001") - * ); List oaidProps = Arrays.asList( new PropertyItem("oaid", "001") ); - *

- * String response = client.updateInstanceProperties( padCodes, null, // modemPersistProps null, // modemProps null, // systemPersistProps systemProps, - * null, // settingProps oaidProps ); - */ - public String updateInstanceProperties( - String[] padCodes, - List modemPersistProps, - List modemProps, - List systemPersistProps, - List systemProps, - List settingProps, - List oaidProps - ) throws IOException { - if (padCodes == null || padCodes.length == 0) { - throw new IllegalArgumentException("padCodes 不能为空"); - } - - JSONObject json = new JSONObject(); - try { - json.put("padCodes", new JSONArray(padCodes)); - putPropertyItems(json, "modemPersistPropertiesList", modemPersistProps); - putPropertyItems(json, "modemPropertiesList", modemProps); - putPropertyItems(json, "systemPersistPropertiesList", systemPersistProps); - putPropertyItems(json, "systemPropertiesList", systemProps); - putPropertyItems(json, "settingPropertiesList", settingProps); - putPropertyItems(json, "oaidPropertiesList", oaidProps); - - } catch (JSONException e) { - LogFileUtil.logAndWrite(Log.ERROR, "ArmCloudApiClient", "updateInstanceProperties: JSON error", e); - } - - String jsonBody = json.toString(); - String timestamp = String.valueOf(System.currentTimeMillis()); - String API_PATH = "/openapi/open/pad/updatePadProperties"; - - if (secretKey == null || secretKey.isEmpty()) { - throw new IllegalArgumentException("secretKey 不能为空"); - } - - String signature = null; - try { - signature = calculateSignature(timestamp, API_PATH, jsonBody, secretKey); - } catch (Exception e) { - LogFileUtil.logAndWrite(Log.ERROR, "ArmCloudApiClient", "updateInstanceProperties: calculateSignature error", e); - } - - RequestBody body = RequestBody.create( - MediaType.parse("application/json; charset=utf-8"), - jsonBody - ); - - Request request = new Request.Builder() - .url(baseUrl + API_PATH) - .addHeader("authver", "2.0") - .addHeader("x-ak", accessKey) - .addHeader("x-timestamp", timestamp) - .addHeader("x-sign", signature) - .post(body) - .build(); - - try (Response response = client.newCall(request).execute()) { - if (!response.isSuccessful()) { - throw new IOException("请求失败: " + response); - } - - try (ResponseBody responseBody = response.body()) { - return responseBody != null ? responseBody.string() : ""; - } - } - } - - private void putPropertyItems(JSONObject json, String key, List items) throws JSONException { - if (items != null && !items.isEmpty()) { - JSONArray array = new JSONArray(); - for (PropertyItem item : items) { - array.put(item.toJson()); - } - json.put(key, array); - } - } - - - public static class PropertyItem { - - private String propertiesName; - private String propertiesValue; - - public PropertyItem(String name, String value) { - this.propertiesName = name; - this.propertiesValue = value; - } - - public JSONObject toJson() throws JSONException { - JSONObject json = new JSONObject(); - json.put("propertiesName", propertiesName); - json.put("propertiesValue", propertiesValue); - return json; - } - } -} - -