@@ -38,8 +38,18 @@ internal class PluginPackageManagerImpl(
38
38
hostPackageManager.getApplicationInfo(packageName, flags)
39
39
}
40
40
41
- override fun getPackageInfo (packageName : String , flags : Int ): PackageInfo ? {
42
- val hostPackageInfo = hostPackageManager.getPackageInfo(packageName, flags)
41
+ /* *
42
+ * 所有插件中的各种方法签名的getPackageInfo方法汇总到这里。
43
+ * 如果包名是插件的,优先返回插件的PackageInfo。
44
+ * 否则返回从宿主(系统)查询到的PackageInfo。
45
+ * 直接由getPackageArchiveInfo构造的PackageInfo和从getPackageInfo得到的正常的PackageInfo不完全一致。
46
+ * 在这里修改它使其尽可能像系统返回的。
47
+ */
48
+ private fun getPluginPackageInfoIfPossible (
49
+ packageName : String ,
50
+ flags : Int ,
51
+ hostPackageInfo : PackageInfo ,
52
+ ): PackageInfo ? {
43
53
return if (packageName.isPlugin()) {
44
54
val packageInfo = hostPackageManager.getPackageArchiveInfo(pluginArchiveFilePath, flags)
45
55
if (packageInfo != null ) {
@@ -53,6 +63,42 @@ internal class PluginPackageManagerImpl(
53
63
}
54
64
}
55
65
66
+ @Suppress(" DEPRECATION" )
67
+ override fun getPackageInfo (packageName : String , flags : Int ) =
68
+ getPluginPackageInfoIfPossible(
69
+ packageName,
70
+ flags,
71
+ hostPackageManager.getPackageInfo(packageName, flags)
72
+ )
73
+
74
+ @Suppress(" DEPRECATION" )
75
+ @SuppressLint(" NewApi" )
76
+ override fun getPackageInfo (versionedPackage : VersionedPackage , flags : Int ) =
77
+ getPluginPackageInfoIfPossible(
78
+ versionedPackage.packageName,
79
+ flags,
80
+ hostPackageManager.getPackageInfo(versionedPackage, flags)
81
+ )
82
+
83
+ @SuppressLint(" NewApi" )
84
+ override fun getPackageInfo (packageName : String , flags : PackageManager .PackageInfoFlags ) =
85
+ getPluginPackageInfoIfPossible(
86
+ packageName,
87
+ flags.value.toInt(),// FIXME 这里会丢失flags升级到Long新增的标志位
88
+ hostPackageManager.getPackageInfo(packageName, flags)
89
+ )
90
+
91
+ @SuppressLint(" NewApi" )
92
+ override fun getPackageInfo (
93
+ versionedPackage : VersionedPackage ,
94
+ flags : PackageManager .PackageInfoFlags
95
+ ) =
96
+ getPluginPackageInfoIfPossible(
97
+ versionedPackage.packageName,
98
+ flags.value.toInt(),// FIXME 这里会丢失flags升级到Long新增的标志位
99
+ hostPackageManager.getPackageInfo(versionedPackage, flags)
100
+ )
101
+
56
102
override fun getActivityInfo (component : ComponentName , flags : Int ): ActivityInfo ? =
57
103
getComponentInfo(
58
104
component,
0 commit comments