-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 1be7143
Showing
425 changed files
with
88,958 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
# Project exclude paths | ||
/out/ |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<module type="JAVA_MODULE" version="4"> | ||
<component name="NewModuleRootManager" inherit-compiler-output="true"> | ||
<exclude-output /> | ||
<content url="file://$MODULE_DIR$"> | ||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> | ||
</content> | ||
<orderEntry type="inheritedJdk" /> | ||
<orderEntry type="sourceFolder" forTests="false" /> | ||
</component> | ||
</module> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
Manifest-Version: 1.0 | ||
Main-Class: com.xiaoyv.dx.command.Main | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
/* | ||
* Copyright (C) 2011 The Android Open Source Project | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package com.xiaoyv.dex; | ||
|
||
import static com.xiaoyv.dex.EncodedValueReader.ENCODED_ANNOTATION; | ||
|
||
/** | ||
* An annotation. | ||
*/ | ||
public final class Annotation implements Comparable<Annotation> { | ||
private final Dex dex; | ||
private final byte visibility; | ||
private final EncodedValue encodedAnnotation; | ||
|
||
public Annotation(Dex dex, byte visibility, EncodedValue encodedAnnotation) { | ||
this.dex = dex; | ||
this.visibility = visibility; | ||
this.encodedAnnotation = encodedAnnotation; | ||
} | ||
|
||
public byte getVisibility() { | ||
return visibility; | ||
} | ||
|
||
public EncodedValueReader getReader() { | ||
return new EncodedValueReader(encodedAnnotation, ENCODED_ANNOTATION); | ||
} | ||
|
||
public int getTypeIndex() { | ||
EncodedValueReader reader = getReader(); | ||
reader.readAnnotation(); | ||
return reader.getAnnotationType(); | ||
} | ||
|
||
public void writeTo(Dex.Section out) { | ||
out.writeByte(visibility); | ||
encodedAnnotation.writeTo(out); | ||
} | ||
|
||
@Override | ||
public int compareTo(Annotation other) { | ||
return encodedAnnotation.compareTo(other.encodedAnnotation); | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return dex == null | ||
? visibility + " " + getTypeIndex() | ||
: visibility + " " + dex.typeNames().get(getTypeIndex()); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
/* | ||
* Copyright (C) 2017 The Android Open Source Project | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package com.xiaoyv.dex; | ||
|
||
import com.xiaoyv.dex.Dex.Section; | ||
import com.xiaoyv.dex.util.Unsigned; | ||
|
||
/** | ||
* A call_site_id_item: https://source.android.com/devices/tech/dalvik/dex-format#call-site-id-item | ||
*/ | ||
public class CallSiteId implements Comparable<CallSiteId> { | ||
|
||
private final Dex dex; | ||
private final int offset; | ||
|
||
public CallSiteId(Dex dex, int offset) { | ||
this.dex = dex; | ||
this.offset = offset; | ||
} | ||
|
||
@Override | ||
public int compareTo(CallSiteId o) { | ||
return Unsigned.compare(offset, o.offset); | ||
} | ||
|
||
public int getCallSiteOffset() { | ||
return offset; | ||
} | ||
|
||
public void writeTo(Section out) { | ||
out.writeInt(offset); | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
if (dex == null) { | ||
return String.valueOf(offset); | ||
} | ||
return dex.protoIds().get(offset).toString(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
/* | ||
* Copyright (C) 2011 The Android Open Source Project | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package com.xiaoyv.dex; | ||
|
||
public final class ClassData { | ||
private final Field[] staticFields; | ||
private final Field[] instanceFields; | ||
private final Method[] directMethods; | ||
private final Method[] virtualMethods; | ||
|
||
public ClassData(Field[] staticFields, Field[] instanceFields, | ||
Method[] directMethods, Method[] virtualMethods) { | ||
this.staticFields = staticFields; | ||
this.instanceFields = instanceFields; | ||
this.directMethods = directMethods; | ||
this.virtualMethods = virtualMethods; | ||
} | ||
|
||
public Field[] getStaticFields() { | ||
return staticFields; | ||
} | ||
|
||
public Field[] getInstanceFields() { | ||
return instanceFields; | ||
} | ||
|
||
public Method[] getDirectMethods() { | ||
return directMethods; | ||
} | ||
|
||
public Method[] getVirtualMethods() { | ||
return virtualMethods; | ||
} | ||
|
||
public Field[] allFields() { | ||
Field[] result = new Field[staticFields.length + instanceFields.length]; | ||
System.arraycopy(staticFields, 0, result, 0, staticFields.length); | ||
System.arraycopy(instanceFields, 0, result, staticFields.length, instanceFields.length); | ||
return result; | ||
} | ||
|
||
public Method[] allMethods() { | ||
Method[] result = new Method[directMethods.length + virtualMethods.length]; | ||
System.arraycopy(directMethods, 0, result, 0, directMethods.length); | ||
System.arraycopy(virtualMethods, 0, result, directMethods.length, virtualMethods.length); | ||
return result; | ||
} | ||
|
||
public static class Field { | ||
private final int fieldIndex; | ||
private final int accessFlags; | ||
|
||
public Field(int fieldIndex, int accessFlags) { | ||
this.fieldIndex = fieldIndex; | ||
this.accessFlags = accessFlags; | ||
} | ||
|
||
public int getFieldIndex() { | ||
return fieldIndex; | ||
} | ||
|
||
public int getAccessFlags() { | ||
return accessFlags; | ||
} | ||
} | ||
|
||
public static class Method { | ||
private final int methodIndex; | ||
private final int accessFlags; | ||
private final int codeOffset; | ||
|
||
public Method(int methodIndex, int accessFlags, int codeOffset) { | ||
this.methodIndex = methodIndex; | ||
this.accessFlags = accessFlags; | ||
this.codeOffset = codeOffset; | ||
} | ||
|
||
public int getMethodIndex() { | ||
return methodIndex; | ||
} | ||
|
||
public int getAccessFlags() { | ||
return accessFlags; | ||
} | ||
|
||
public int getCodeOffset() { | ||
return codeOffset; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
/* | ||
* Copyright (C) 2011 The Android Open Source Project | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package com.xiaoyv.dex; | ||
|
||
/** | ||
* A type definition. | ||
*/ | ||
public final class ClassDef { | ||
public static final int NO_INDEX = -1; | ||
private final Dex buffer; | ||
private final int offset; | ||
private final int typeIndex; | ||
private final int accessFlags; | ||
private final int supertypeIndex; | ||
private final int interfacesOffset; | ||
private final int sourceFileIndex; | ||
private final int annotationsOffset; | ||
private final int classDataOffset; | ||
private final int staticValuesOffset; | ||
|
||
public ClassDef(Dex buffer, int offset, int typeIndex, int accessFlags, | ||
int supertypeIndex, int interfacesOffset, int sourceFileIndex, | ||
int annotationsOffset, int classDataOffset, int staticValuesOffset) { | ||
this.buffer = buffer; | ||
this.offset = offset; | ||
this.typeIndex = typeIndex; | ||
this.accessFlags = accessFlags; | ||
this.supertypeIndex = supertypeIndex; | ||
this.interfacesOffset = interfacesOffset; | ||
this.sourceFileIndex = sourceFileIndex; | ||
this.annotationsOffset = annotationsOffset; | ||
this.classDataOffset = classDataOffset; | ||
this.staticValuesOffset = staticValuesOffset; | ||
} | ||
|
||
public int getOffset() { | ||
return offset; | ||
} | ||
|
||
public int getTypeIndex() { | ||
return typeIndex; | ||
} | ||
|
||
public int getSupertypeIndex() { | ||
return supertypeIndex; | ||
} | ||
|
||
public int getInterfacesOffset() { | ||
return interfacesOffset; | ||
} | ||
|
||
public short[] getInterfaces() { | ||
return buffer.readTypeList(interfacesOffset).getTypes(); | ||
} | ||
|
||
public int getAccessFlags() { | ||
return accessFlags; | ||
} | ||
|
||
public int getSourceFileIndex() { | ||
return sourceFileIndex; | ||
} | ||
|
||
public int getAnnotationsOffset() { | ||
return annotationsOffset; | ||
} | ||
|
||
public int getClassDataOffset() { | ||
return classDataOffset; | ||
} | ||
|
||
public int getStaticValuesOffset() { | ||
return staticValuesOffset; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
if (buffer == null) { | ||
return typeIndex + " " + supertypeIndex; | ||
} | ||
|
||
StringBuilder result = new StringBuilder(); | ||
result.append(buffer.typeNames().get(typeIndex)); | ||
if (supertypeIndex != NO_INDEX) { | ||
result.append(" extends ").append(buffer.typeNames().get(supertypeIndex)); | ||
} | ||
return result.toString(); | ||
} | ||
} |
Oops, something went wrong.