1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
* 获取apk包的信息:版本号,名称,图标等
*
* @param absPath apk包的绝对路径
* @param context
* @return
*/
fun apkInfo(absPath: String?, context: Context): PackageInfoBean? {
val pm = context.packageManager
val pkgInfo = pm.getPackageArchiveInfo(absPath!!, PackageManager.GET_ACTIVITIES)
?: return null
val appInfo = pkgInfo.applicationInfo

/* 必须加这两句,不然下面icon获取是default icon而不是应用包的icon */
appInfo.sourceDir = absPath
appInfo.publicSourceDir = absPath

// 得到应用名
val appName = pm.getApplicationLabel(appInfo).toString()
// 得到包名
val packageName = appInfo.packageName
// 得到版本信息
val version = pkgInfo.versionName
// 得到图标信息
val icon = pm.getApplicationIcon(appInfo)

return PackageInfoBean(icon, appName, "", 0L, packageName, version)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class PackageInfoBean(
// 应用图标
var icon: Drawable,
// 应用名字
var appName: String,
// 应用程序的大小
var apkSize: String,
// 应用程序的length,用于排序
var apkLength: Long,
// 应用包名
var packageName: String,
// 版本号
var versionName: String = "",
// 是否选中
var selected: Boolean = false
)

参考文章

https://blog.csdn.net/weixin_42126677/article/details/117351983