Файл 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
, и они не работали.
Спасибо.
Файл - это не просто "двоичные данные" xml. В андроид xml есть "формат".
Вы можете посмотреть AXMLPrinter2 - он принимает двоичный xml и преобразует его в читаемый человеком. Я напрямую связан с классом, который выглядит так, как будто он выполняет большую часть работы.
Какая информация вам нужна в файле манифеста? Файл aapt.exe в SDK android также может вывести всю информацию из файла манифеста Android. Вам просто нужно запустить эту команду (с помощью необходимых переключателей) и проанализировать выходной поток консоли.
Файл выглядит так, как будто он закодирован в пользовательском формате, я не думаю, что для его декодирования есть библиотека .NET, поэтому вам придется переписать perl script как axml2xml.pl, чтобы сделать это за вас. К сожалению, нет быстрого и легкого решения, но, глядя на него, переписывать его не должно быть слишком сложно.
В зависимости от кодировки документов 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.
... перевести ваши байтовые массивы в читаемые пользователем строки. Возможно, причина, по которой ваш код выше не отображает человекочитаемые символы, - это просто кодировка?