/** * 获取应用签名MD5 * @returns {Promise<unknown>} */functiongetAppSignatureMD5(){returnnewPromise((resolve)=>{// 1. 环境检查if(typeofplus==="undefined"||uni.getSystemInfoSync().platform!=="android"){resolve(null);return;}try{// 2. 获取 ContextconstMainActivity=plus.android.runtimeMainActivity();if(!MainActivity){console.error("MainActivity is null");resolve(null);return;}// 优先使用 Application ContextletContext=plus.android.invoke(MainActivity,"getApplicationContext");if(!Context){Context=MainActivity;}// 3. 获取 PackageManagerconstpackageManager=plus.android.invoke(Context,"getPackageManager");if(!packageManager){console.error("PackageManager is null");resolve(null);return;}// 4. 获取 PackageInfoconstpackageName=plus.android.invoke(Context,"getPackageName");constPackageManager=plus.android.importClass("android.content.pm.PackageManager");constflags=PackageManager.GET_SIGNATURES;// 64constpackageInfo=plus.android.invoke(packageManager,"getPackageInfo",packageName,flags);if(!packageInfo){console.error("PackageInfo is null");resolve(null);return;}// 5. 获取签名数组letsignatures=packageInfo.signatures;if(!signatures||signatures.length===0){signatures=plus.android.getAttribute(packageInfo,"signatures");}if(!signatures||signatures.length===0){console.error("Signatures is empty");resolve(null);return;}// 6. 计算 MD5constsignature=signatures[0];constMessageDigest=plus.android.importClass("java.security.MessageDigest");constmd5=MessageDigest.getInstance("MD5");constbytes=plus.android.invoke(signature,"toByteArray");plus.android.invoke(md5,"update",bytes);constdigest=plus.android.invoke(md5,"digest");lethex="";for(leti=0;i<digest.length;i++){constb=digest[i];consth=(b&0xff).toString(16);if(h.length<2){hex+="0";}hex+=h;if(i<digest.length-1){hex+=":";}}resolve(hex.toUpperCase());}catch(e){console.error("Get signature failed:",e);resolve(null);}});}uniapp中获取APP应用签名信息
张小明
前端开发工程师
LeetCode 1665.完成所有任务的最少初始能量:排序(贪心)
【LetMeFly】1665.完成所有任务的最少初始能量:排序(贪心) 力扣题目链接:https://leetcode.cn/problems/minimum-initial-energy-to-finish-tasks/ 给你一个任务数组 tasks ,其中 tasks[i] [actuali, minimumi] : actuali 是完…
SoC硬件辅助验证技术解析与应用实践
1. SoC硬件辅助验证:应对复杂芯片设计的关键技术 在移动通信处理器领域,我曾参与过一个典型的多核SoC验证项目。当团队首次尝试在RTL仿真器上启动Android系统时,仿真速度仅为1.Hz——这意味着完成一次系统启动需要超过300天。这个令人绝望的数…
AI工作流编排框架:从脚本串联到声明式协同
1. 项目概述:当AI模型需要“交响乐团”指挥最近在开源社区里,我注意到一个挺有意思的项目,叫ruska-ai/orchestra。光看名字,“Orchestra”(交响乐团)就挺有画面感的。这让我立刻联想到,在当下这…
DLP Pico技术与近眼显示系统设计解析
1. DLP Pico技术解析:微镜阵列如何重塑显示未来 在2014年,德州仪器(TI)推出了一项颠覆性的显示技术——基于DLP TRP架构的Pico芯片组。这项技术的核心是一块布满微小铝镜的芯片,每个微镜尺寸仅5.4微米,比人类头发直径的十分之一还…
从泰鼎高管离职事件看半导体公司治理与技术战略平衡
1. 事件背景与核心脉络梳理2011年初,半导体行业发生了一起在当时颇具话题性的高层人事地震。主角是当时在数字电视和多媒体处理器领域颇有建树的泰鼎微系统(Trident Microsystems, Inc.)。事件的核心是,公司的首席执行官ÿ…
开会超时被踢?四款视频会议工具性价比实测
上周,小李的创业团队又扩员了。团队一直用的免费视频会议工具有单场时长限制,超时后主持人会被强制退出会议。现在团队扩大到8个人,如果升级到付费版,每人每月的费用接近百元。小李算了一下:一年下来,光会议…