android.content.res.AXmlResourceParser#next()源码实例Demo

下面列出了android.content.res.AXmlResourceParser#next() 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: ghidra   文件: AndroidXmlConvertor.java
public static void convert(InputStream is, PrintWriter out, TaskMonitor monitor)
		throws IOException, CancelledException {

	monitor.setMessage("Converting Android Binary XML to Text...");

	AXmlResourceParser parser = new AXmlResourceParser();
	parser.open(is);

	try {
		int indent = -1;
		int type;
		while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) {
			monitor.checkCanceled();

			StringBuffer buffer = new StringBuffer();
			switch (type) {
				case XmlPullParser.START_DOCUMENT:
					buffer.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
					buffer.append("\n");
					break;
				case XmlPullParser.START_TAG: {
					++indent;

					buffer.append(StringUtilities.pad("", '\t', indent));
					buffer.append("<");
					buffer.append(getNamespacePrefix(parser.getPrefix()));
					buffer.append(parser.getName());
					buffer.append("\n");

					int namespaceCountBefore = parser.getNamespaceCount(parser.getDepth() - 1);
					int namespaceCount = parser.getNamespaceCount(parser.getDepth());

					++indent;

					for (int i = namespaceCountBefore; i != namespaceCount; ++i) {
						buffer.append(StringUtilities.pad("", '\t', indent));
						buffer.append("xmlns:");
						buffer.append(parser.getNamespacePrefix(i));
						buffer.append("=");
						buffer.append("\"");
						buffer.append(parser.getNamespaceUri(i));
						buffer.append("\"");
						buffer.append("\n");
					}

					for (int i = 0; i < parser.getAttributeCount(); ++i) {
						buffer.append(StringUtilities.pad("", '\t', indent));
						buffer.append(getNamespacePrefix(parser.getAttributePrefix(i)));
						buffer.append(parser.getAttributeName(i));
						buffer.append("=");
						buffer.append("\"");
						buffer.append(getAttributeValue(parser, i));
						buffer.append("\"");
						buffer.append("\n");
					}

					buffer.append(StringUtilities.pad("", '\t', indent));
					buffer.append(">");
					buffer.append("\n");

					--indent;
				}
					break;
				case XmlPullParser.END_TAG: {
					buffer.append(StringUtilities.pad("", '\t', indent));
					buffer.append("<");
					buffer.append("/");
					buffer.append(getNamespacePrefix(parser.getPrefix()));
					buffer.append(parser.getName());
					buffer.append(">");
					buffer.append("\n");
					--indent;
				}
					break;
				case XmlPullParser.TEXT: {
					buffer.append(StringUtilities.pad("", '\t', indent));
					buffer.append(parser.getText());
					buffer.append("\n");
				}
			}

			out.print(buffer.toString());
		}
		out.println();
	}
	catch (XmlPullParserException | ArrayIndexOutOfBoundsException e) {
		throw new IOException("Failed to read AXML file", e);
	}
	finally {
		parser.close();
	}
}
 
源代码2 项目: apkReSign   文件: ResignerLogic.java
public static String AXMLToXML(byte[] axml) throws Exception {
    AXmlResourceParser parser = new AXmlResourceParser();
    ByteArrayInputStream bais = new ByteArrayInputStream(axml);
    parser.open(bais);
    StringBuilder indent = new StringBuilder(10);
    StringBuilder output = new StringBuilder(axml.length * 2);
    final String indentStep = "   ";

    while (true) {
        int type = parser.next();
        if (type == XmlPullParser.END_DOCUMENT) {
            break;
        }
        switch (type) {
            case XmlPullParser.START_DOCUMENT: {
                output.append(String
                        .format("<?xml version=\"1.0\" encoding=\"utf-8\"?>"));
                output.append("\n");
                break;
            }
            case XmlPullParser.START_TAG: {
                output.append(String.format("%s<%s%s", indent,
                        getNamespacePrefix(parser.getPrefix()),
                        parser.getName()));
                output.append("\n");
                indent.append(indentStep);

                int namespaceCountBefore = parser.getNamespaceCount(parser
                        .getDepth() - 1);
                int namespaceCount = parser
                        .getNamespaceCount(parser.getDepth());
                for (int i = namespaceCountBefore; i != namespaceCount; ++i) {
                    output.append(String.format("%sxmlns:%s=\"%s\"", indent,
                            parser.getNamespacePrefix(i),
                            parser.getNamespaceUri(i)));
                    output.append("\n");
                }

                for (int i = 0; i != parser.getAttributeCount(); ++i) {
                    output.append(String.format("%s%s%s=\"%s\"", indent,
                            getNamespacePrefix(parser.getAttributePrefix(i)),
                            parser.getAttributeName(i),
                            getAttributeValue(parser, i)));
                    output.append("\n");
                }
                output.append(String.format("%s>", indent));
                output.append("\n");
                break;
            }
            case XmlPullParser.END_TAG: {
                indent.setLength(indent.length() - indentStep.length());
                output.append(String.format("%s</%s%s>", indent,
                        getNamespacePrefix(parser.getPrefix()),
                        parser.getName()));
                output.append("\n");
                break;
            }
            case XmlPullParser.TEXT: {
                output.append(String.format("%s%s", indent, parser.getText()));
                output.append("\n");
                break;
            }
        }
    }
    return output.toString();
}
 
 同类方法