开发者社区> 问答> 正文

老师mpaas android 基线版本:10.2.3-20 加载H5离线包 提示 请问源码 可以?

老师mpaas android 基线版本:10.2.3-20 加载H5离线包 提示 signature verify result false。本地assets中配置了config->custom_config.json->[{"value":"NO","key":"h5_shouldverifyapp"}] 请问源码 可以到哪本文件看 验签逻辑的?

展开
收起
cuicuicuic 2023-06-14 15:33:31 76 0
2 条回答
写回答
取消 提交回答
  • 不断追求着最新的技术和趋势,在云技术的世界里,我不断寻找着新的机会和挑战,不断挑战自己的认知和能力。

    根据你提供的信息,我猜测你在使用的是 Maven 仓库中的 MPAAS Android 插件,并且在加载 H5 离线包时遇到了 Signature verify result false 的错误提示。

    根据你的错误提示,可以猜测你的离线包签名验证失败。为了解决这个问题,你可以在本地 assets 文件夹中添加一个 custom_config.json 文件,其中包含 {"value":"NO","key":"h5_shouldverifyapp"} 的配置项。这个配置项的作用是告诉 Maven 插件不要在加载离线包时进行签名验证,而是直接加载默认的签名验证结果。

    如果你想深入了解 MPAAS Android 插件的验签逻辑,你可以查看 src/main/java/com/android/build/gradle/tasks/bundling/AndroidTask.java 文件。在这个文件中,你可以看到 AndroidTask 类中的 verify() 方法的具体实现。在这个方法中,你会找到签名验证的逻辑。如果你需要进一步深入了解签名验证的实现细节,你可以查看 Android Studio 中的 CertificateManager 类和 KeyStore 类。

    希望这些信息能够帮助你解决问题!

    2023-06-15 23:32:28
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    mPaaS Android SDK 中关于 H5 离线包的验签逻辑主要在 com.alipay.mobile.nebula.util.H5Utils 类中的 verifyH5Package 方法中实现。该方法会对离线包进行验签,并返回验签结果。

    如果您遇到了 signature verify result false 的错误提示,可能是由于离线包未通过验签导致的。可以在该方法的源码中加入日志,以便更好地定位问题所在。以下是一个示例的方法实现,其中加入了日志输出:

    java Copy public static boolean verifyH5Package(String filePath) { try { ZipFile zipFile = new ZipFile(filePath); ZipEntry entry = zipFile.getEntry("signature"); if (entry == null) { return false; } InputStream in = zipFile.getInputStream(entry); byte[] signBytes = new byte[in.available()]; in.read(signBytes); in.close(); CertificateFactory factory = CertificateFactory.getInstance("X.509"); InputStream certIn = H5Utils.class.getResourceAsStream("/assets/H5Game.cert.pem"); if (certIn == null) { return false; } Certificate cert = factory.generateCertificate(certIn); certIn.close(); Signature signature = Signature.getInstance("SHA1WithRSA"); signature.initVerify(cert); signature.update(getCertBytes(cert)); boolean result = signature.verify(signBytes); Log.d("H5Utils", "verifyH5Package: result=" + result); return result; } catch (Exception e) { Log.e("H5Utils", "verifyH5Package: exception=" + e.getMessage()); return false; } } 在这个示例中,我在 signature.verify(signBytes) 之后加入了输出日志,以便查看验签结果。您可以在您的应用中使用类似的方法,在离线包验签失败时输出日志并定位问题所在。

    2023-06-14 18:03:05
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
问答排行榜
最热
最新

相关电子书

更多
mPaaS 小程序重磅发布 立即下载
金融专场-新一代移动研发平台mPaaS智能化实践-付海涛 立即下载
mPaaS 小程序新品发布 立即下载