类android.content.res.AXmlResourceParser源码实例Demo

下面列出了怎么用android.content.res.AXmlResourceParser的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: ghidra   文件: AndroidXmlConvertor.java
private static String getAttributeValue(AXmlResourceParser parser, int index) {
	int type = parser.getAttributeValueType(index);
	int data = parser.getAttributeValueData(index);

	if (type == TypedValue.TYPE_STRING) {
		return parser.getAttributeValue(index);
	}
	if (type == TypedValue.TYPE_ATTRIBUTE) {
		return String.format("?%s%08X", getPackage(data), data);
	}
	if (type == TypedValue.TYPE_REFERENCE) {
		return String.format("@%s%08X", getPackage(data), data);
	}
	if (type == TypedValue.TYPE_FLOAT) {
		return String.valueOf(Float.intBitsToFloat(data));
	}
	if (type == TypedValue.TYPE_INT_HEX) {
		return String.format("0x%08X", data);
	}
	if (type == TypedValue.TYPE_INT_BOOLEAN) {
		return data == 0 ? "false" : "true";
	}
	if (type == TypedValue.TYPE_DIMENSION) {
		return Float.toString(complexToFloat(data)) +
			DIMENSION_UNITS[data & TypedValue.COMPLEX_UNIT_MASK];
	}
	if (type == TypedValue.TYPE_FRACTION) {
		return Float.toString(complexToFloat(data)) +
			FRACTION_UNITS[data & TypedValue.COMPLEX_UNIT_MASK];
	}
	if (type >= TypedValue.TYPE_FIRST_COLOR_INT && type <= TypedValue.TYPE_LAST_COLOR_INT) {
		return String.format("#%08X", data);
	}
	if (type >= TypedValue.TYPE_FIRST_INT && type <= TypedValue.TYPE_LAST_INT) {
		return String.valueOf(data);
	}
	return String.format("<0x%X, type 0x%02X>", data, type);
}
 
源代码2 项目: LibScout   文件: AXMLPrinter.java
public static String getAttributeValue(AXmlResourceParser parser,int index) {
	int type=parser.getAttributeValueType(index);
	int data=parser.getAttributeValueData(index);
	if (type==TypedValue.TYPE_STRING) {
		return parser.getAttributeValue(index);
	}
	if (type==TypedValue.TYPE_ATTRIBUTE) {
		return String.format("?%s%08X",getPackage(data),data);
	}
	if (type==TypedValue.TYPE_REFERENCE) {
		return String.format("@%s%08X",getPackage(data),data);
	}
	if (type==TypedValue.TYPE_FLOAT) {
		return String.valueOf(Float.intBitsToFloat(data));
	}
	if (type==TypedValue.TYPE_INT_HEX) {
		return String.format("0x%08X",data);
	}
	if (type==TypedValue.TYPE_INT_BOOLEAN) {
		return data!=0?"true":"false";
	}
	if (type==TypedValue.TYPE_DIMENSION) {
		return Float.toString(complexToFloat(data))+
			DIMENSION_UNITS[data & TypedValue.COMPLEX_UNIT_MASK];
	}
	if (type==TypedValue.TYPE_FRACTION) {
		return Float.toString(complexToFloat(data))+
			FRACTION_UNITS[data & TypedValue.COMPLEX_UNIT_MASK];
	}
	if (type>=TypedValue.TYPE_FIRST_COLOR_INT && type<=TypedValue.TYPE_LAST_COLOR_INT) {
		return String.format("#%08X",data);
	}
	if (type>=TypedValue.TYPE_FIRST_INT && type<=TypedValue.TYPE_LAST_INT) {
		return String.valueOf(data);
	}
	return String.format("<0x%X, type 0x%02X>",data,type);
}
 
源代码3 项目: apkReSign   文件: ResignerLogic.java
private static String getAttributeValue(AXmlResourceParser parser, int index) {
    int type = parser.getAttributeValueType(index);
    int data = parser.getAttributeValueData(index);
    if (type == TypedValue.TYPE_STRING) {
        return parser.getAttributeValue(index);
    }
    if (type == TypedValue.TYPE_ATTRIBUTE) {
        return String.format("?%s%08X", getPackage(data), data);
    }
    if (type == TypedValue.TYPE_REFERENCE) {
        return String.format("@%s%08X", getPackage(data), data);
    }
    if (type == TypedValue.TYPE_FLOAT) {
        return String.valueOf(Float.intBitsToFloat(data));
    }
    if (type == TypedValue.TYPE_INT_HEX) {
        return String.format("0x%08X", data);
    }
    if (type == TypedValue.TYPE_INT_BOOLEAN) {
        return data != 0 ? "true" : "false";
    }
    if (type == TypedValue.TYPE_DIMENSION) {
        return Float.toString(complexToFloat(data))
                + DIMENSION_UNITS[data & TypedValue.COMPLEX_UNIT_MASK];
    }
    if (type == TypedValue.TYPE_FRACTION) {
        return Float.toString(complexToFloat(data))
                + FRACTION_UNITS[data & TypedValue.COMPLEX_UNIT_MASK];
    }
    if (type >= TypedValue.TYPE_FIRST_COLOR_INT
            && type <= TypedValue.TYPE_LAST_COLOR_INT) {
        return String.format("#%08X", data);
    }
    if (type >= TypedValue.TYPE_FIRST_INT
            && type <= TypedValue.TYPE_LAST_INT) {
        return String.valueOf(data);
    }
    return String.format("<0x%X, type 0x%02X>", data, type);
}
 
源代码4 项目: 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();
	}
}
 
源代码5 项目: LibScout   文件: ProcessManifest.java
private String getAttributeValue(AXmlResourceParser parser, String attributeName) {
	for (int i = 0; i < parser.getAttributeCount(); i++)
		if (parser.getAttributeName(i).equals(attributeName))
			return AXMLPrinter.getAttributeValue(parser, i);
	return "";
}
 
源代码6 项目: 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();
}