即使使用InputStream,如何获取可靠且有效的APK文件清单内容?
背景 我想获取有关APK文件(包括拆分的APK文件)的信息,即使它们位于压缩的zip文件中(也无需解压缩)。就我而言,这包括各种内容,例如程序包名称,版本代码,版本名称,应用程序标签,应用程序图标,以及是否为分割的APK文件。 请注意,我想在Android应用程序中而不是使用PC来完成所有操作,因此某些工具可能无法使用。 问题 这意味着我不能使用getPackageArchiveInfo函数,因为该函数需要APK文件的路径,并且仅适用于非拆分APK文件。 简而言之,没有框架函数可以执行此操作,因此我必须找到一种方法,方法是使用InputStream作为在函数中对其进行解析的输入,进入压缩文件。 在线上有各种各样的解决方案,包括Android之外的解决方案,但我不知道这是稳定的并且适用于所有情况的解决方案。即使对于Android系统,许多功能也可能不错(此处为示例),但解析可能会失败,并且可能需要文件路径而不是Uri / InputStream。 我发现并尝试过的 我已经在StackOverflow上找到了它,但是不幸的是,根据我的测试,它总是生成内容,但是在极少数情况下,它不是有效的XML内容。 到目前为止,由于输出XML内容无效,我发现这些应用程序包名及其解析器无法解析的版本代码: com.farproc.wifi.analyzer 139 com.teslacoilsw.launcherclientproxy 2 com.hotornot.app 3072 android 29(即“ Android System”系统应用本身) com.google.android.videos 41300042 com.facebook.katana 201518851 com.keramidas.TitaniumBackupPro 10 com.google.android.apps.tachyon 2985033 com.google.android.apps.photos 3594753 使用XML查看器和XML验证器,这是这些应用程序的问题: 对于#1,#2,我从开始很奇怪<mnfs。 对于#3,它不喜欢其中的“&” <activity theme="resourceID 0x7f13000b" label="Features & Tests" ... 对于#4,它最后错过了“清单”的结尾标记。 对于#5,它错过了多个结束标记,至少是“意图过滤器”,“接收器”和“清单”。也许更多。 对于#6,由于某种原因,它在“应用程序”标签中两次获得了“ allowBackup”属性。 对于#7,清单清单标记中的值没有属性<manifest versionCode="resourceID 0xa" ="1.3.2"。 …