AndroidManifest.xml
文件在apk
中编译和打包后变成二进制xml
文件。我提供此信息,以防这个和常规二进制xml
文件之间存在差异,但我不确定是否存在。
我需要获取此xml
文件中包含的信息。有java
和python
的工具,但我找不到.Net
的任何内容。如何在.NET
中阅读此文件?
这是我发现的最有前途的解决方案,但它仍然不会以人类可读的格式显示文本。
using (BinaryReader b = new BinaryReader(File.Open(filePath, FileMode.Open), Encoding.ASCII)) {
int pos = 0;
int length = (int)b.BaseStream.Length;
while (pos < length) {
char v = b.ReadChar();
Console.Write(v);
pos += sizeof(char);
}
}
任何想法我做错了什么?
我在创建encoding
时尝试使用不同的BinaryReader
,但它们没有用。
感谢。
答案 0 :(得分:1)
该文件不仅仅是xml的“二进制数据”。 android xml有一个“格式”。
你可以查看AXMLPrinter2 - 它需要二进制xml并将其转换为人类可读的。我直接链接到一个类似于完成大部分工作的类。
您需要从清单文件中获得哪些信息? android SDK中的aapt.exe也可以从android清单文件中提取所有信息。您只需运行该命令(使用所需的开关)并解析控制台输出流。
答案 1 :(得分:1)
该文件看起来像是以自定义格式编码,我认为没有可用于解码它的.NET库,因此您必须重写像axml2xml.pl这样的perl脚本来执行此操作为了你。不幸的是,没有一个快速简便的解决方案,但看着它,重写它应该不会太难。
答案 2 :(得分:0)
根据您的XML文档编码,您可以使用Encoding Class
System.Text.Encoding.ASCII.GetString(File.ReadAllBytes(filePath)); *or*
System.Text.Encoding.UTF8.GetString(File.ReadAllBytes(filePath)); *or*
System.Text.Encoding.UTF32.GetString(File.ReadAllBytes(filePath)); etc.
...将您的字节数组转换为人类可读的字符串。也许上面的代码没有显示人类可读字符的原因只是编码?