diff --git a/build.gradle b/build.gradle index 423cae4..4a8f1cf 100755 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'java-library' group 'com.reandroid.lib.arsc' -version '1.0.5' +version '1.0.6' java { sourceCompatibility JavaVersion.VERSION_1_8 diff --git a/src/main/java/com/reandroid/lib/apk/ApkUtil.java b/src/main/java/com/reandroid/lib/apk/ApkUtil.java index 8df8da9..a5b9dbf 100644 --- a/src/main/java/com/reandroid/lib/apk/ApkUtil.java +++ b/src/main/java/com/reandroid/lib/apk/ApkUtil.java @@ -114,5 +114,4 @@ public class ApkUtil { public static final String DEF_MODULE_NAME="base"; public static final String NAME_value_type="value_type"; public static final String NAME_data="data"; - public static final String NAME_is_array="is_array"; } diff --git a/src/main/java/com/reandroid/lib/apk/StringPoolBuilder.java b/src/main/java/com/reandroid/lib/apk/StringPoolBuilder.java index f763dd0..b2d8327 100644 --- a/src/main/java/com/reandroid/lib/apk/StringPoolBuilder.java +++ b/src/main/java/com/reandroid/lib/apk/StringPoolBuilder.java @@ -4,6 +4,7 @@ import com.reandroid.lib.arsc.chunk.PackageBlock; import com.reandroid.lib.arsc.chunk.TableBlock; import com.reandroid.lib.arsc.pool.SpecStringPool; import com.reandroid.lib.arsc.pool.TableStringPool; +import com.reandroid.lib.arsc.value.EntryBlock; import com.reandroid.lib.arsc.value.ValueType; import com.reandroid.lib.json.JSONArray; import com.reandroid.lib.json.JSONException; @@ -74,8 +75,8 @@ public class StringPoolBuilder { return mSpecNameMap.get(pkgId); } private void scan(JSONObject jsonObject){ - if(jsonObject.has(ApkUtil.NAME_is_array)){ - addSpecName(jsonObject.optString("name")); + if(jsonObject.has(EntryBlock.NAME_entry_name)){ + addSpecName(jsonObject.optString(EntryBlock.NAME_entry_name)); } if(jsonObject.has(ApkUtil.NAME_value_type)){ if(ValueType.STRING.name().equals(jsonObject.getString(ApkUtil.NAME_value_type))){ diff --git a/src/main/java/com/reandroid/lib/apk/TableBlockJsonBuilder.java b/src/main/java/com/reandroid/lib/apk/TableBlockJsonBuilder.java index 571a723..df18f4e 100644 --- a/src/main/java/com/reandroid/lib/apk/TableBlockJsonBuilder.java +++ b/src/main/java/com/reandroid/lib/apk/TableBlockJsonBuilder.java @@ -49,6 +49,7 @@ public class TableBlockJsonBuilder { for(File typeFile:typeFileList){ loadType(pkg, typeFile); } + pkg.sortTypes(); } private void loadType(PackageBlock packageBlock, File typeJsonFile) throws IOException{ FileInputStream inputStream=new FileInputStream(typeJsonFile); diff --git a/src/main/java/com/reandroid/lib/arsc/array/SpecTypePairArray.java b/src/main/java/com/reandroid/lib/arsc/array/SpecTypePairArray.java index c228675..f68cf3e 100755 --- a/src/main/java/com/reandroid/lib/arsc/array/SpecTypePairArray.java +++ b/src/main/java/com/reandroid/lib/arsc/array/SpecTypePairArray.java @@ -11,11 +11,18 @@ import com.reandroid.lib.json.JSONObject; import java.util.*; -public class SpecTypePairArray extends BlockArray implements JSONConvert { +public class SpecTypePairArray extends BlockArray + implements JSONConvert, Comparator { public SpecTypePairArray(){ super(); } + public void sort(){ + for(SpecTypePair specTypePair:listItems()){ + specTypePair.sortTypes(); + } + sort(this); + } public void removeEmptyPairs(){ List allPairs=new ArrayList<>(listItems()); boolean foundEmpty=false; @@ -219,4 +226,8 @@ public class SpecTypePairArray extends BlockArray implements JSONC specTypePair.fromJson(jsonObject); } } + @Override + public int compare(SpecTypePair typePair1, SpecTypePair typePair2) { + return typePair1.compareTo(typePair2); + } } diff --git a/src/main/java/com/reandroid/lib/arsc/array/TypeBlockArray.java b/src/main/java/com/reandroid/lib/arsc/array/TypeBlockArray.java index 59a77f9..f57c115 100755 --- a/src/main/java/com/reandroid/lib/arsc/array/TypeBlockArray.java +++ b/src/main/java/com/reandroid/lib/arsc/array/TypeBlockArray.java @@ -17,13 +17,18 @@ import com.reandroid.lib.json.JSONObject; import java.io.IOException; import java.util.AbstractList; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; -public class TypeBlockArray extends BlockArray implements JSONConvert { +public class TypeBlockArray extends BlockArray + implements JSONConvert, Comparator { private byte mTypeId; public TypeBlockArray(){ super(); } + public void sort(){ + sort(this); + } public void removeEmptyBlocks(){ List allTypes=new ArrayList<>(listItems()); boolean foundEmpty=false; @@ -272,4 +277,8 @@ public class TypeBlockArray extends BlockArray implements JSONConvert typeBlock.fromJson(jsonObject); } } + @Override + public int compare(TypeBlock typeBlock1, TypeBlock typeBlock2) { + return typeBlock1.compareTo(typeBlock2); + } } diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/PackageBlock.java b/src/main/java/com/reandroid/lib/arsc/chunk/PackageBlock.java index acf7698..7482b04 100755 --- a/src/main/java/com/reandroid/lib/arsc/chunk/PackageBlock.java +++ b/src/main/java/com/reandroid/lib/arsc/chunk/PackageBlock.java @@ -85,6 +85,9 @@ public class PackageBlock extends BaseChunk implements BlockLoad, JSONConvert { +public class TypeBlock extends BaseTypeBlock + implements JSONConvert, Comparable { private final IntegerItem mEntriesStart; private final ResConfig mResConfig; private final IntegerArray mEntryOffsets; @@ -138,6 +139,15 @@ public class TypeBlock extends BaseTypeBlock implements JSONConvert getResConfig().fromJson(json.getJSONObject("config")); } @Override + public int compareTo(TypeBlock typeBlock) { + int id1=getTypeId(); + int id2=typeBlock.getTypeId(); + if(id1!=id2){ + return Integer.compare(id1, id2); + } + return getResConfig().compareTo(typeBlock.getResConfig()); + } + @Override public String toString(){ StringBuilder builder=new StringBuilder(); builder.append(getResConfig().toString()); diff --git a/src/main/java/com/reandroid/lib/arsc/container/SpecTypePair.java b/src/main/java/com/reandroid/lib/arsc/container/SpecTypePair.java index 1400b34..bb7f8b7 100755 --- a/src/main/java/com/reandroid/lib/arsc/container/SpecTypePair.java +++ b/src/main/java/com/reandroid/lib/arsc/container/SpecTypePair.java @@ -21,7 +21,8 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; -public class SpecTypePair extends BlockContainer implements JSONConvert { +public class SpecTypePair extends BlockContainer + implements JSONConvert , Comparable{ private final Block[] mChildes; private final SpecBlock mSpecBlock; private final TypeBlockArray mTypeBlockArray; @@ -37,6 +38,9 @@ public class SpecTypePair extends BlockContainer implements JSONConvert implements JSONConvert { +public class ResConfig extends FixedBlockContainer + implements BlockLoad, JSONConvert, Comparable { private final IntegerItem configSize; private final ByteArray mValuesContainer; @@ -781,6 +782,10 @@ public class ResConfig extends FixedBlockContainer implements BlockLoad, JSONCon } return "["+q+"]"; } + @Override + public int compareTo(ResConfig resConfig) { + return getQualifiers().compareTo(resConfig.getQualifiers()); + } private static char[] unpackLanguageOrRegion(byte b0, byte b1, char base){