【问题标题】:Read manifest from third app从第三个应用程序读取清单
【发布时间】:2018-04-29 14:16:23
【问题描述】:

我尝试在模拟器中读取第三个应用程序的清单,因此我使用 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()
}

我还尝试使用我找到的另一个函数here,但结果相同。

为什么我会得到这个奇怪的字符?我还将 android.permission.READ_EXTERNAL_STORAGE 放在我的清单中

【问题讨论】:

    标签: java android kotlin java-io zipfile


    【解决方案1】:

    经过对apk格式的一些研究,似乎Manifest是编译在apk文件中的。所以这就是我看不懂的原因。

    要阅读它,我们必须先对 apk 进行反编译,或者在编码时使用库(我找不到)。

    【讨论】:

      猜你喜欢
      • 2010-09-30
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      相关资源
      最近更新 更多