Android App获取不到pkgInfo信息问题原因

简介: 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权限。具体操作如下:

<uses-permission
    android:name="android.permission.QUERY_ALL_PACKAGES"
    tools:ignore="QueryAllPackagesPermission" />

完成以上工作后,你就可以在Android设备上获取任意apk文件的详细信息了,而且对于未进行系统签名的apk文件,你也能够通过指定的方法获取其详细信息。

相关文章
|
4天前
|
Java Android开发
Android系统 修改无源码普通应用为默认Launcher和隐藏Settings中应用信息图标
Android系统 修改无源码普通应用为默认Launcher和隐藏Settings中应用信息图标
69 0
|
3天前
|
Android开发 移动开发 小程序
binder机制原理面试,安卓app开发教程
binder机制原理面试,安卓app开发教程
binder机制原理面试,安卓app开发教程
|
4天前
|
Java 开发工具 Android开发
Android mk 集成app
Android mk 集成app
14 5
|
4天前
|
移动开发 jenkins 持续交付
jenkins编译H5做的android端编译卫士app记录
jenkins编译H5做的android端编译卫士app记录
|
4天前
|
Shell 开发工具 Android开发
android 修改kernel编译版本信息
android 修改kernel编译版本信息
21 0
|
4天前
|
Android开发
Android 获取签名信息
Android 获取签名信息
12 0
|
4天前
|
Shell Android开发
android mk中打印信息
android mk中打印信息
15 0
|
4天前
|
Android开发
Android APP 隐藏系统软键盘的方法
Android APP 隐藏系统软键盘的方法
33 0
|
4天前
|
Android开发
Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。
Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。 【5月更文挑战第2天】
19 0
|
4天前
|
XML Java Android开发
Android系统 添加动态控制屏幕方向、强制APP横竖屏方向
Android系统 添加动态控制屏幕方向、强制APP横竖屏方向
39 1