#include "appexecfwk_errors.h"
#include "ui_service.h"
+
void AppStoreReplyAck(uint8_t cmd_id, uint8_t type, uint32_t ack)
{
int ret = msg_center_send_data(cmd_id, type, &ack, sizeof(ack));
bool ble_uninstall_pkg(const char *pkgName)
{
- if (pkgName == nullptr || strlen(pkgName) == 0) {
+ // 快速失败检查
+ if (pkgName == nullptr || *pkgName == '\0') {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_BLE, "ble_uninstall_pkg: null or empty pkgName");
return false;
}
+ // 停止应用
StopJsApp((char*)pkgName);
+
+ // 预先计算路径长度
+ const size_t dirLen = strlen(FS_DIR_APP_STORE);
+ const size_t nameLen = strlen(pkgName);
+ const size_t fullLen = dirLen + nameLen + 5;
+
+ // 使用栈上的固定大小缓冲区,避免频繁堆分配
+ char pkgFullName[256];
+ if (fullLen > sizeof(pkgFullName)) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_BLE, "ble_uninstall_pkg: path too long");
+ return false;
+ }
+
+ // 安全的路径拼接
+ snprintf(pkgFullName, sizeof(pkgFullName), "%s%s.bin", FS_DIR_APP_STORE, pkgName);
+
+ // 删除文件
+ if (uapi_delete_files(pkgFullName) != 0) {
+ WEARABLE_LOGW(WEARABLE_LOG_MODULE_BLE, "Failed to delete file: %s", pkgFullName);
+ }
+
WEARABLE_LOGI(WEARABLE_LOG_MODULE_MSG_CENTER, "AppStorePkgOperation uninstall pkgName=%s", pkgName);
+
+ // 卸载应用包
InstallParam installParam = { .installLocation = 1, .keepData = false };
- uint8_t ret = OHOS::BundleMsClient::GetInstance().Uninstall((char*)pkgName, &installParam, UninstallCallbackFunc);
-
- return ret;
+ return OHOS::BundleMsClient::GetInstance().Uninstall((char*)pkgName, &installParam, UninstallCallbackFunc);
}
-
// 获取应用列表
cJSON* ble_get_pkg_list() {
BundleInfo *bundleInfos = nullptr;