java - 从第三个应用程序读取清单
问题描述
我尝试在我的模拟器中读取第三个应用程序的清单,所以我使用 PackageManager 列出所有应用程序,然后选择一个随机应用程序来读取它的清单。问题是它返回的是这样的坏字符:
����>����r��������������������������������������l�����
有我的列表功能:
val apps = context.packageManager.getInstalledApplications(PackageManager.GET_META_DATA or PackageManager.GET_SHARED_LIBRARY_FILES)
for (i in 0 until apps.size)
{
Log.i("List", "Application $i = ${apps[i]}")
if (i == 80)
{
val content = readManifest(apps[i].publicSourceDir)
}
}
还有我尝试阅读清单的功能:
private fun readManifest(path: String): String
{
Log.i("readManifest", "path = $path")
val apk = ZipFile(path)
val manifest = apk.getEntry("AndroidManifest.xml")
val stream = apk.getInputStream(manifest)
val content = StringBuilder()
if (manifest != null)
{
val bufferedReader = BufferedReader(InputStreamReader(apk.getInputStream(manifest), "utf-8"))
var line = bufferedReader.readLine()
while (line != null)
{
Log.i("readManifest", "line = $line")
content.append(line)
line = bufferedReader.readLine()
}
}
apk.close()
stream.close()
return content.toString()
}
我还尝试使用我在此处找到的另一个函数,但结果相同。
为什么我会得到这个奇怪的字符?我还将 android.permission.READ_EXTERNAL_STORAGE 放在我的清单中
解决方案
经过对apk格式的一些研究,似乎Manifest是编译在apk文件中的。所以这就是我无法阅读的原因。
要阅读它,我们必须先对 apk 进行反编译,或者使用库(我找不到)进行编码。
推荐阅读
- typescript - 将 typescript 配置为 Node 项目
- git - 尝试使用 git LFS 同步 zip 文件,说我空间不足
- python - 你如何使用硒刮掉整个页面?
- c# - 如何调整图像大小以适合图片框?
- javascript - 停止不必要的组件渲染
- android - 如何将多个cmake目标添加到android ndk项目
- sharepoint - 如何以编程方式重命名 SharePoint 文件
- xml - 基于数组元素,在 XSLT 1.0 中使用 for-each 时拆分为两个数组
- c# - 错误:“System.NullReferenceException:对象引用未设置为对象的实例。” 在图像加载 .NET Core
- android - 升级Android APP Gradle 版本时出现Filoreader 升级问题