某些时候需要获取已安装的apk或者是未安装的apk的签名信息,以下代码片段将会很有用。
1.通过app的packageName获取已安装的apk的签名信息
public Signature getPackageSignature(Context context, String packageName){ PackageManager pm = context.getPackageManager(); List<PackageInfo> apps = pm.getInstalledPackages(PackageManager.GET_SIGNATURES); Iterator<PackageInfo> it = apps.iterator(); while(it.hasNext()){ PackageInfo info = it.next(); if(info.packageName.equals(packageName)){ return info.signatures[0]; } } return null; }
2.根据文件路径获取未安装的apk的签名信息
由于android平台本身的一个小bug,使用PackageManager方式获取未安装的apk文件的签名会稍微费事一点。
(android平台的这个小bug有些狗血,是因为PackageManager的的getPackageArchiveInfo中少了如下代码的原因导致)
缺少的代码:
if ((flags & GET_SIGNATURES) != 0) packageParser.collectCertificates(pkg, 0);
问题的详细信息可以查看以下链接:
https://code.google.com/p/android/issues/detail?id=9151#c8
https://android-review.googlesource.com/#/c/18769/1/core/java/android/content/pm/PackageManager.java
这样一来,获取apk文件的签名方式将会变得稍微啰嗦一点
(1)首先自定义一个getPackageArchiveInfo函数,如下:
@SuppressWarnings("unchecked") public PackageInfo getPackageArchiveInfo(String archiveFilePath, int flags){ // Workaround for https://code.google.com/p/android/issues/detail?id=9151#c8 try{ Class packageParserClass = Class.forName( "android.content.pm.PackageParser"); Class[] innerClasses = packageParserClass.getDeclaredClasses(); Class packageParserPackageClass = null; for (Class innerClass : innerClasses){ if (0 == innerClass.getName().compareTo("android.content.pm.PackageParser$Package")){ packageParserPackageClass = innerClass; break; } } Constructor packageParserConstructor = packageParserClass.getConstructor( String.class); Method parsePackageMethod = packageParserClass.getDeclaredMethod( "parsePackage", File.class, String.class, DisplayMetrics.class, int.class); Method collectCertificatesMethod = packageParserClass.getDeclaredMethod( "collectCertificates", packageParserPackageClass, int.class); Method generatePackageInfoMethod = packageParserClass.getDeclaredMethod( "generatePackageInfo", packageParserPackageClass, int[].class, int.class, long.class, long.class); packageParserConstructor.setAccessible(true); parsePackageMethod.setAccessible(true); collectCertificatesMethod.setAccessible(true); generatePackageInfoMethod.setAccessible(true); Object packageParser = packageParserConstructor.newInstance(archiveFilePath); DisplayMetrics metrics = new DisplayMetrics(); metrics.setToDefaults(); final File sourceFile = new File(archiveFilePath); Object pkg = parsePackageMethod.invoke( packageParser, sourceFile, archiveFilePath, metrics, 0); if (pkg == null){ return null; } if ((flags & android.content.pm.PackageManager.GET_SIGNATURES) != 0){ collectCertificatesMethod.invoke(packageParser, pkg, 0); } return (PackageInfo)generatePackageInfoMethod.invoke(null, pkg, null, flags, 0, 0); } catch (Exception e) { Log.e("Signature Monitor", "android.content.pm.PackageParser reflection failed: " + e.toString()); } return null; }
(2)使用自定义的getPackageArchiveInfo函数获取PackageInfo,从而获取签名信息,如下:
/** * * @param context * @param apkFile 文件的全路径信息(包括apk文件的名称),如果是无效的apk文件,返回值为null * @return */ public Signature getApkSignatureByFilePath(Context context, String apkFile){ PackageInfo newInfo = getPackageArchiveInfo(apkFile, PackageManager.GET_ACTIVITIES | PackageManager.GET_SIGNATURES); if(newInfo != null){ if(newInfo.signatures != null && newInfo.signatures.length >0){ return newInfo.signatures[0]; } } return null; }
相关推荐
1. **重新签名**:该工具能够对已修改的APK文件进行重新签名,使得新的签名与系统要求相匹配,从而顺利安装。 2. **证书生成**:它可以创建新的数字证书,为APK文件生成新的签名,无需开发者手动配置复杂的签名过程...
本话题主要涉及“微信工具apk签名获取”,这是一个官方提供的帮助开发者获取APK签名的工具。 首先,我们来理解一下什么是APK签名。在Android系统中,每个安装到设备上的应用程序都需要一个数字签名,这是为了确保...
在Android应用开发中,APK签名是一个至关重要的步骤,它确保了应用的完整性和来源的可信性。在Windows环境下,开发者通常使用特定的工具来对APK进行签名,以使其能够在Android设备上顺利安装和运行。本文将详细介绍...
这个是一个获取apk文件签名的一个小工具,是我从我同事那弄来的分享给大家,请大家不要喷我哈。
在Android开发过程中,Apk签名是一个至关重要的步骤,它确保了应用的安全性和完整性。本文将深入探讨Android Apk签名工具的使用,以及它在构建和发布Android应用过程中的作用。 首先,我们需要理解什么是Apk签名。...
4. **签名新APK**:使用Java的 jarsigner 工具或专门的APK签名工具,使用你的私钥对APK进行签名。例如,使用jarsigner命令行工具,输入以下命令: ``` jarsigner -verbose -keystore myKeystore -alias myAlias -...
而安装签名apk则是指使用特定的签名文件对apk进行签名,以便在设备上安装和运行。 使用“新浪微博签名apk”,开发者需要特别注意输入正确的包名。包名在Android开发中是一个全局唯一的标识符,由一系列小写的反向...
APK签名是一个至关重要的步骤,它确保了应用的完整性和开发者身份的验证。本资源"查看apk签名工具.rar"提供了一个实用的工具,能够帮助开发者或者用户方便地查看APK的签名信息。 首先,我们需要理解APK签名的目的。...
在Android系统中,APK签名...总结,Android 10 APK签名文件是应用开发不可或缺的一部分,它关乎应用的安全、权限获取以及用户信任。开发者需熟知签名机制,合理运用签名工具,遵循最佳实践,以确保应用的质量和安全性。
APK签名工具Apktool是Android开发者常用的辅助软件,它主要用于对APK应用程序进行反编译、修改和重新打包。本文将深入探讨Apktool的工作原理...在实际操作中,应遵循版权法规,仅对个人项目或已获得授权的APK进行修改。
首先,理解APK签名的重要性。Android系统要求所有安装的APK必须经过签名,签名的过程是对APK的内容使用私钥进行加密,验证应用的完整性和开发者身份。默认情况下,每个开发者都会有自己的签名,用于发布应用。然而,...
接下来,我们将深入探讨APK签名的概念、作用,以及如何进行重新签名。 首先,我们来了解**APK签名**的基本概念。在APK开发完成后,为了确保其来源可信和防止篡改,开发者会使用一个私钥对APK进行数字签名。这个签名...
1. 下载并解压"OPPO获取应用Sign,APK签名工具.rar",获得签名工具。 2. 准备好待签名的APK文件。 3. 使用OPPO签名工具,按照工具提供的指南或文档输入APK路径和私钥信息(如果工具需要的话)。 4. 运行签名工具,...
APK签名的过程主要包括以下几个步骤: 1. **生成密钥对**:首先,开发者需要使用密钥生成工具(如Java的keytool)创建一个包含公钥和私钥的密钥对。私钥用于签名,而公钥则用于验证签名。 2. **构建APK**:开发...
3. **签名验证**:每个APK在构建时都会被签名,安装时系统会验证签名以确保APK未被篡改。签名也有助于确认应用的发布者。 4. **权限请求**:在Android 6.0及以上版本,部分权限在运行时动态请求,而非安装时一次性...
APK签名打包文件是Android应用开发过程中的一个...总之,APK签名是Android应用发布不可或缺的一部分,它确保了应用的安全性和可靠性。通过使用像"9663606.bat"这样的批处理脚本,开发者可以更方便地完成这一重要步骤。
)手机端获取安卓软件apk包的signature签名信息。包括发布者、拥有者、证书有效期、公钥、摘要(MD5)。纯手机端获取,无需电脑。程序员朋友的好帮手,截止目前(2020-04-11)没发现可在手机端获取签名信息的同类软件...
**一、APK签名的重要性** 1. **验证来源**:签名可以验证应用的开发者,确保应用来自可信的源。 2. **防止篡改**:一旦APK被签名,任何修改都会导致签名失效,防止恶意篡改。 3. **权限控制**:更新已安装的应用时...
本主题聚焦于"android安卓获取apk签名工具",这通常涉及到APK签名的概念、过程以及如何使用特定工具来完成这一任务。 **APK签名的重要性** 1. **验证开发者身份**:签名提供了一种方式,让用户知道应用的来源,...
这个签名验证了应用的来源和开发者身份,并且在安装过程中确保APK文件未被篡改。签名过程使用密钥对APK进行加密,这有助于防止恶意代码的注入,同时允许系统跟踪应用的更新。 接下来,我们要讨论的是`.jks`文件。这...