Skip to content

Commit

Permalink
android dx-1.6 source code
Browse files Browse the repository at this point in the history
  • Loading branch information
xiaoyvyv committed May 13, 2020
0 parents commit 1be7143
Show file tree
Hide file tree
Showing 425 changed files with 88,958 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Project exclude paths
/out/
2 changes: 2 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/artifacts/android_dx_1_16_jar.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions .idea/encodings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions android-dx.iml
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>
3 changes: 3 additions & 0 deletions src/META-INF/MANIFEST.MF
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

65 changes: 65 additions & 0 deletions src/com/xiaoyv/dex/Annotation.java
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());
}
}
55 changes: 55 additions & 0 deletions src/com/xiaoyv/dex/CallSiteId.java
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();
}
}
104 changes: 104 additions & 0 deletions src/com/xiaoyv/dex/ClassData.java
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;
}
}
}
103 changes: 103 additions & 0 deletions src/com/xiaoyv/dex/ClassDef.java
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();
}
}
Loading

0 comments on commit 1be7143

Please sign in to comment.