gpt4 book ai didi

java - 使用 XmlResourceParser 解析 AndroidManifest.xml 无法按预期工作

转载 作者:行者123 更新时间:2023-12-01 19:57:06 26 4
gpt4 key购买 nike

我需要解析AndroidManifest.xml检索通过 PackageManager 无法获得的一些附加信息.

我有以下代码:

try
{
AssetManager assetManager = createPackageContext(getPackageName(), 0).getAssets();
XmlResourceParser xml = assetManager.openXmlResourceParser("AndroidManifest.xml");
int eventType = xml.getEventType();

while (eventType != XmlPullParser.END_DOCUMENT)
{
if(eventType == XmlPullParser.START_DOCUMENT) {
Log.d(TAG, "START_DOCUMENT");
} else if(eventType == XmlPullParser.START_TAG) {
Log.d(TAG, "START_TAG: " + xml.getName());
} else if(eventType == XmlPullParser.END_TAG) {
Log.d(TAG, "END_TAG: " + xml.getName());
} else if(eventType == XmlPullParser.TEXT) {
Log.d(TAG, "TEXT: " + xml.getText());
}
eventType = xml.next();
}

xml.close();
}
catch ( XmlPullParserException
| PackageManager.NameNotFoundException
| IOException ignore) { }

我希望从 XML 文件中获取所有标签,但我得到的只是:

START_DOCUMENT
START_DOCUMENT
START_TAG: manifest
END_TAG: manifest

...这不是我所期望的。

<小时/>

我不知道为什么START_DOCUMENT有两次,但最让我烦恼的是我在 <manifests> 中没有得到任何标签标签。

我在解析时做错了什么,还是这些标签根本不可用?

最佳答案

Mohammed 的代码适用于非即时运行构建。

使用 Instant Run,设备上的 APK 仅与将部署到生产环境的实际 APK 有点相似。一些核心 APK 可能是您真正的 APK 中的内容,但应用程序的其余部分会作为某种形式的附加组件被推送,即时运行环境可以将它们混合在一起以创建类似于您的应用程序的运行方式。这样做的好处是,这些附加组件可以快速推送,因为它们较小并且不需要完整的设备安装。

缺点是 Instant Run 应用不是您的 APK,因此在 APK 内部查看的内容在 Instant Run 构建上的工作方式可能与在常规构建上不同。

令我惊讶的是,即时运行环境可以根据这些附加组件即时合成 list 。话虽如此,将 list 作为资源读取绝对符合“不寻常”的条件,因此回想起来,Instant Run 破坏了此代码并不令人震惊。

因此,如果您确实需要这种读取 list XML 功能,则需要禁用 IDE 的即时运行。或者,找到一些不需要读取 list XML 的其他解决方案(例如,将所需的“哪些运行时权限是可选的?”信息保存在 Java static 字段中)。

关于java - 使用 XmlResourceParser 解析 AndroidManifest.xml 无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49264779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com