猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
如何获得APK签名?
如何获得APK签名?
是否有方法检索用于签署APK的密钥的签名?我用密钥库的钥匙签了我的APK。如何以编程方式检索它?
牛魔王的故事
浏览 841
回答 3
3回答
函数式编程
包管理器将为您提供任何已安装包的签名证书。然后,您可以打印签名密钥的详细信息。final PackageManager packageManager = context.getPackageManager();final List<PackageInfo> packageList = packageManager.getInstalledPackages(PackageManager.GET_SIGNATURES);for (PackageInfo p : packageList) { final String strName = p.applicationInfo.loadLabel(packageManager).toString(); final String strVendor = p.packageName; sb.append("<br>" + strName + " / " + strVendor + "<br>"); final Signature[] arrSignatures = p.signatures; for (final Signature sig : arrSignatures) { /* * Get the X.509 certificate. */ final byte[] rawCert = sig.toByteArray(); InputStream certStream = new ByteArrayInputStream(rawCert); try { CertificateFactory certFactory = CertificateFactory.getInstance("X509"); X509Certificate x509Cert = (X509Certificate) certFactory.generateCertificate(certStream); sb.append("Certificate subject: " + x509Cert.getSubjectDN() + "<br>"); sb.append("Certificate issuer: " + x509Cert.getIssuerDN() + "<br>"); sb.append("Certificate serial number: " + x509Cert.getSerialNumber() + "<br>"); sb.append("<br>"); } catch (CertificateException e) { // e.printStackTrace(); } }}
0
0
0
温温酱
我的情况是,我有一个预先安装的apk,使用错误的密钥存储。因此,直接安装会因为签名不一致而导致失败,我需要先检查签名,以确保它能够顺利安装。这是我的解.如这段代码也就是说,您可以从已安装的apk中获得签名。详情:Signature sig = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures[0];其次:让ReleasaseApk hashCode进行比较。在我的例子中,我从服务器下载了这个apk,并将它放在sd_Card中。Signature releaseSig = context.getPackageManager().getPackageArchiveInfo("/mnt/sdcard/myReleaseApk.apk", PackageManager.GET_SIGNATURES). signatures[0];最后,比较hashCode。return sig.hashCode() == releaseSig.hashCode;我试过上面的代码,它运行得很好。如果hashCode不同,您应该卸载旧的apk,或者如果它是一个系统应用程序,并且设备是根的,您可以使用运行时移除,然后安装新的签名apk。
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
Android
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续