mirror of
https://github.com/revanced/Apktool.git
synced 2024-12-12 05:47:46 +01:00
parent
a66e150fc1
commit
e126a51b4b
1
CHANGES
1
CHANGES
@ -40,6 +40,7 @@ v2.0.0 (TBA)
|
|||||||
-Fixed (issue #626) - Fixed handling strange characters with unknown files.
|
-Fixed (issue #626) - Fixed handling strange characters with unknown files.
|
||||||
-Fixed (issue #630) - Fixed handling renamed manifests with ("com.lge")
|
-Fixed (issue #630) - Fixed handling renamed manifests with ("com.lge")
|
||||||
-Fixed (issue #409) - Fixed array items incorrectly typed.
|
-Fixed (issue #409) - Fixed array items incorrectly typed.
|
||||||
|
-Fixed (issue #512) - Fixed AndroidManifest missing attributes.
|
||||||
-Fixed issue with non-URI standard characters in apk name (Thanks rover12421)
|
-Fixed issue with non-URI standard characters in apk name (Thanks rover12421)
|
||||||
-Added output to list Apktool version to help debugging.
|
-Added output to list Apktool version to help debugging.
|
||||||
-Updated known bytes for configurations to 38 (from addition of layout direction)
|
-Updated known bytes for configurations to 38 (from addition of layout direction)
|
||||||
|
@ -282,7 +282,22 @@ public class AXmlResourceParser implements XmlResourceParser {
|
|||||||
if (namespace == -1) {
|
if (namespace == -1) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
return m_strings.getString(namespace);
|
|
||||||
|
// hacky: if the attribute names are proguarded, then so are the namespace
|
||||||
|
// I don't know where these are located yet in the file, but it is always
|
||||||
|
// this.android_ns in testing, so we will default to that for now.
|
||||||
|
// @todo figure out where proguarded namespaces are stored.
|
||||||
|
String value = m_strings.getString(namespace);
|
||||||
|
|
||||||
|
if (value.length() == 0) {
|
||||||
|
int offsetName = getAttributeOffset(index);
|
||||||
|
int name = m_attributes[offsetName + ATTRIBUTE_IX_NAME];
|
||||||
|
if (m_strings.getString(name).length() == 0) {
|
||||||
|
value = android_ns;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -303,7 +318,21 @@ public class AXmlResourceParser implements XmlResourceParser {
|
|||||||
if (name == -1) {
|
if (name == -1) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
return m_strings.getString(name);
|
|
||||||
|
String value = m_strings.getString(name);
|
||||||
|
|
||||||
|
// some attributes will return "", we must rely on the resource_id and refer to the frameworks
|
||||||
|
// to match the resource id to the name. ex: 0x101021C = versionName
|
||||||
|
if (value.length() != 0) {
|
||||||
|
return value;
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
value = mAttrDecoder.decodeManifestAttr(getAttributeNameResource(index));
|
||||||
|
} catch (AndrolibException e) {
|
||||||
|
value = "";
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -941,6 +970,7 @@ public class AXmlResourceParser implements XmlResourceParser {
|
|||||||
private StringBlock m_strings;
|
private StringBlock m_strings;
|
||||||
private int[] m_resourceIDs;
|
private int[] m_resourceIDs;
|
||||||
private NamespaceStack m_namespaces = new NamespaceStack();
|
private NamespaceStack m_namespaces = new NamespaceStack();
|
||||||
|
private String android_ns = "http://schemas.android.com/apk/res/android";
|
||||||
private boolean m_decreaseDepth;
|
private boolean m_decreaseDepth;
|
||||||
private int m_event;
|
private int m_event;
|
||||||
private int m_lineNumber;
|
private int m_lineNumber;
|
||||||
|
@ -18,6 +18,7 @@ package brut.androlib.res.decoder;
|
|||||||
|
|
||||||
import brut.androlib.AndrolibException;
|
import brut.androlib.AndrolibException;
|
||||||
import brut.androlib.res.data.ResPackage;
|
import brut.androlib.res.data.ResPackage;
|
||||||
|
import brut.androlib.res.data.ResResSpec;
|
||||||
import brut.androlib.res.data.value.ResAttr;
|
import brut.androlib.res.data.value.ResAttr;
|
||||||
import brut.androlib.res.data.value.ResScalarValue;
|
import brut.androlib.res.data.value.ResScalarValue;
|
||||||
|
|
||||||
@ -40,6 +41,20 @@ public class ResAttrDecoder {
|
|||||||
return decoded != null ? decoded : resValue.encodeAsResXmlAttr();
|
return decoded != null ? decoded : resValue.encodeAsResXmlAttr();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String decodeManifestAttr(int attrResId)
|
||||||
|
throws AndrolibException {
|
||||||
|
|
||||||
|
if (attrResId != 0) {
|
||||||
|
ResResSpec resResSpec = getCurrentPackage().getResTable().getResSpec(attrResId);
|
||||||
|
|
||||||
|
if (resResSpec != null) {
|
||||||
|
return resResSpec.getName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public ResPackage getCurrentPackage() throws AndrolibException {
|
public ResPackage getCurrentPackage() throws AndrolibException {
|
||||||
if (mCurrentPackage == null) {
|
if (mCurrentPackage == null) {
|
||||||
throw new AndrolibException("Current package not set");
|
throw new AndrolibException("Current package not set");
|
||||||
|
Loading…
Reference in New Issue
Block a user