uniapp中获取APP应用签名信息
/** * 获取应用签名MD5 * returns {Promiseunknown} */functiongetAppSignatureMD5(){returnnewPromise((resolve){// 1. 环境检查if(typeofplusundefined||uni.getSystemInfoSync().platform!android){resolve(null);return;}try{// 2. 获取 ContextconstMainActivityplus.android.runtimeMainActivity();if(!MainActivity){console.error(MainActivity is null);resolve(null);return;}// 优先使用 Application ContextletContextplus.android.invoke(MainActivity,getApplicationContext);if(!Context){ContextMainActivity;}// 3. 获取 PackageManagerconstpackageManagerplus.android.invoke(Context,getPackageManager);if(!packageManager){console.error(PackageManager is null);resolve(null);return;}// 4. 获取 PackageInfoconstpackageNameplus.android.invoke(Context,getPackageName);constPackageManagerplus.android.importClass(android.content.pm.PackageManager);constflagsPackageManager.GET_SIGNATURES;// 64constpackageInfoplus.android.invoke(packageManager,getPackageInfo,packageName,flags);if(!packageInfo){console.error(PackageInfo is null);resolve(null);return;}// 5. 获取签名数组letsignaturespackageInfo.signatures;if(!signatures||signatures.length0){signaturesplus.android.getAttribute(packageInfo,signatures);}if(!signatures||signatures.length0){console.error(Signatures is empty);resolve(null);return;}// 6. 计算 MD5constsignaturesignatures[0];constMessageDigestplus.android.importClass(java.security.MessageDigest);constmd5MessageDigest.getInstance(MD5);constbytesplus.android.invoke(signature,toByteArray);plus.android.invoke(md5,update,bytes);constdigestplus.android.invoke(md5,digest);lethex;for(leti0;idigest.length;i){constbdigest[i];consth(b0xff).toString(16);if(h.length2){hex0;}hexh;if(idigest.length-1){hex:;}}resolve(hex.toUpperCase());}catch(e){console.error(Get signature failed:,e);resolve(null);}});}