Android App获取不到pkgInfo信息问题原因
目录
Android APP 系统签名及权限设置
本文主要讨论在Android平台上,关于应用(APP)系统签名以及权限设置的相关知识。
测试平台: Android 11/9
注意: 如果APP已经安装(未签名),此时再去安装已签名的APP,
getPackageArchiveInfo()
还是获取不到信息,需要先使用pm uninstall
卸载原APP,再去安装已签名的APP。
这个鸟问题坑死我了,以后记得APP系统签名后 手动卸载可以避免很多问题!
获取Apk信息
在Android中,我们可以使用PackageManager
类的getPackageArchiveInfo()
方法获取apk文件的信息,这包括应用名、包名、版本信息等。然而,需要注意的一点是,如果apk文件没有进行系统签名,那么getPackageArchiveInfo()
方法将无法获取到信息,其返回的PackageInfo
对象将为null。
下面的代码展示了如何使用getPackageArchiveInfo()
方法获取apk文件的信息:
fun getApkInfo(absPath: String?, context: Context) { val pm = context.packageManager // 如果pkgInfo为null,说明app没有进行系统签名 val pkgInfo: PackageInfo? = absPath?.let { pm.getPackageArchiveInfo( it, PackageManager.GET_SIGNATURES or PackageManager.GET_RECEIVERS ) } Log.d(TAG,"pkgInfo"+pkgInfo) if (pkgInfo != null) { val appInfo = pkgInfo.applicationInfo appInfo.publicSourceDir = absPath val appName = pm.getApplicationLabel(appInfo).toString() // 获取应用名 val packageName = appInfo.packageName // 获取包名 val version = pkgInfo.versionName // 获取版本信息 val icon1 = pm.getApplicationIcon(appInfo) // 获取图标信息 val icon2 = appInfo.loadIcon(pm) val pkgInfoStr = String.format( "PackageName:%s, Version: %s, AppName: %s", packageName, version, appName ) Log.i(TAG, String.format("Successfully obtained PkgInfo: %s", pkgInfoStr)) } else { Log.i(TAG, String.format("Failed to get PkgInfo: %s", absPath)) }}
高版本Android系统权限设置
在Android 11及更高版本中,如果你的应用需要查询设备上所有应用的信息,你需要在应用的manifest文件中添加QUERY_ALL_PACKAGES
权限。具体操作如下:
完成以上工作后,你就可以在Android设备上获取任意apk文件的详细信息了,而且对于未进行系统签名的apk文件,你也能够通过指定的方法获取其详细信息。
来源地址:https://blog.csdn.net/SHH_1064994894/article/details/131639224
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341