diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/BaseTypeBlock.java b/src/main/java/com/reandroid/lib/arsc/chunk/BaseTypeBlock.java index 9052f22..7947527 100755 --- a/src/main/java/com/reandroid/lib/arsc/chunk/BaseTypeBlock.java +++ b/src/main/java/com/reandroid/lib/arsc/chunk/BaseTypeBlock.java @@ -45,12 +45,15 @@ abstract class BaseTypeBlock extends BaseChunk { public byte getTypeId(){ return mTypeId.get(); } + public int getTypeIdInt(){ + return (0xff & mTypeId.get()); + } public void setTypeId(byte id){ mTypeId.set(id); } public void setTypeName(String name){ TypeStringPool typeStringPool=getTypeStringPool(); - byte id=getTypeId(); + int id=getTypeIdInt(); TypeString typeString=typeStringPool.getById(id); if(typeString==null){ typeString=typeStringPool.getOrCreate(id, name); @@ -96,7 +99,7 @@ abstract class BaseTypeBlock extends BaseChunk { return null; } TypeStringPool typeStringPool=packageBlock.getTypeStringPool(); - mTypeString=typeStringPool.getById(getTypeId()); + mTypeString=typeStringPool.getById(getTypeIdInt()); return mTypeString; } SpecTypePair getSpecTypePair(){ 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 b340d1a..0814248 100755 --- a/src/main/java/com/reandroid/lib/arsc/chunk/PackageBlock.java +++ b/src/main/java/com/reandroid/lib/arsc/chunk/PackageBlock.java @@ -57,6 +57,7 @@ public class PackageBlock extends BaseChunk private final SpecTypePairArray mSpecTypePairArray; private final LibraryBlock mLibraryBlock; + private final StagedAlias mStagedAlias; private final PackageLastBlocks mPackageLastBlocks; @@ -82,7 +83,11 @@ public class PackageBlock extends BaseChunk this.mSpecTypePairArray=new SpecTypePairArray(); this.mLibraryBlock=new LibraryBlock(); - this.mPackageLastBlocks=new PackageLastBlocks(mSpecTypePairArray, mLibraryBlock); + this.mStagedAlias=new StagedAlias(); + this.mPackageLastBlocks = new PackageLastBlocks( + mSpecTypePairArray, + mLibraryBlock, + mStagedAlias); this.mEntriesGroup=new HashMap<>(); diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/SpecBlock.java b/src/main/java/com/reandroid/lib/arsc/chunk/SpecBlock.java index 9c4a287..68ab61d 100755 --- a/src/main/java/com/reandroid/lib/arsc/chunk/SpecBlock.java +++ b/src/main/java/com/reandroid/lib/arsc/chunk/SpecBlock.java @@ -72,7 +72,7 @@ public class SpecBlock extends BaseTypeBlock implements BlockLoad , JSONConvert< @Override public JSONObject toJson() { JSONObject jsonObject=new JSONObject(); - jsonObject.put("id", getTypeId()); + jsonObject.put("id", getTypeIdInt()); return jsonObject; } diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/TypeBlock.java b/src/main/java/com/reandroid/lib/arsc/chunk/TypeBlock.java index deae562..e2daf28 100755 --- a/src/main/java/com/reandroid/lib/arsc/chunk/TypeBlock.java +++ b/src/main/java/com/reandroid/lib/arsc/chunk/TypeBlock.java @@ -151,7 +151,7 @@ public class TypeBlock extends BaseTypeBlock @Override public JSONObject toJson() { JSONObject jsonObject=new JSONObject(); - jsonObject.put("id", getTypeId()); + jsonObject.put("id", getTypeIdInt()); TypeString typeString=getTypeString(); if(typeString!=null){ jsonObject.put("name", typeString.get()); @@ -183,8 +183,8 @@ public class TypeBlock extends BaseTypeBlock } @Override public int compareTo(TypeBlock typeBlock) { - int id1=getTypeId(); - int id2=typeBlock.getTypeId(); + int id1=getTypeIdInt(); + int id2=typeBlock.getTypeIdInt(); if(id1!=id2){ return Integer.compare(id1, id2); } diff --git a/src/main/java/com/reandroid/lib/arsc/container/PackageLastBlocks.java b/src/main/java/com/reandroid/lib/arsc/container/PackageLastBlocks.java index b5dc27e..a36314a 100755 --- a/src/main/java/com/reandroid/lib/arsc/container/PackageLastBlocks.java +++ b/src/main/java/com/reandroid/lib/arsc/container/PackageLastBlocks.java @@ -18,6 +18,7 @@ package com.reandroid.lib.arsc.container; import com.reandroid.lib.arsc.chunk.ChunkType; import com.reandroid.lib.arsc.array.SpecTypePairArray; import com.reandroid.lib.arsc.chunk.LibraryBlock; +import com.reandroid.lib.arsc.chunk.StagedAlias; import com.reandroid.lib.arsc.header.HeaderBlock; import com.reandroid.lib.arsc.io.BlockReader; @@ -27,12 +28,17 @@ public class PackageLastBlocks extends FixedBlockContainer { private final SpecTypePairArray mSpecTypePairArray; private final LibraryBlock mLibraryBlock; - public PackageLastBlocks(SpecTypePairArray specTypePairArray, LibraryBlock libraryBlock){ - super(2); + private final StagedAlias mStagedAlias; + public PackageLastBlocks(SpecTypePairArray specTypePairArray, + LibraryBlock libraryBlock, + StagedAlias stagedAlias){ + super(3); this.mSpecTypePairArray=specTypePairArray; this.mLibraryBlock=libraryBlock; + this.mStagedAlias=stagedAlias; addChild(0, mSpecTypePairArray); addChild(1, mLibraryBlock); + addChild(2, mStagedAlias); } @Override @@ -53,6 +59,8 @@ public class PackageLastBlocks extends FixedBlockContainer { readSpecBlock(reader); }else if(chunkType==ChunkType.LIBRARY){ readLibraryBlock(reader); + }else if(chunkType==ChunkType.STAGED_ALIAS){ + readStagedAlias(reader); }else { readUnexpectedBlock(reader, headerBlock); } @@ -67,6 +75,11 @@ public class PackageLastBlocks extends FixedBlockContainer { libraryBlock.readBytes(reader); mLibraryBlock.addLibraryInfo(libraryBlock); } + private void readStagedAlias(BlockReader reader) throws IOException{ + StagedAlias stagedAlias = new StagedAlias(); + stagedAlias.readBytes(reader); + mStagedAlias.addStagedAliasEntries(stagedAlias); + } private void readUnexpectedBlock(BlockReader reader, HeaderBlock headerBlock) throws IOException{ throw new IOException(reader.getActualPosition()+", Unexpected block: "+headerBlock.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 ab6c6a8..07c23cb 100755 --- a/src/main/java/com/reandroid/lib/arsc/container/SpecTypePair.java +++ b/src/main/java/com/reandroid/lib/arsc/container/SpecTypePair.java @@ -180,7 +180,7 @@ public class SpecTypePair extends BlockContainer @Override public JSONObject toJson() { JSONObject jsonObject=new JSONObject(); - jsonObject.put("id", getSpecBlock().getTypeId()); + jsonObject.put("id", getSpecBlock().getTypeIdInt()); jsonObject.put("types", getTypeBlockArray().toJson()); return jsonObject; } diff --git a/src/main/java/com/reandroid/lib/arsc/value/EntryBlock.java b/src/main/java/com/reandroid/lib/arsc/value/EntryBlock.java index 1313109..e20bc97 100755 --- a/src/main/java/com/reandroid/lib/arsc/value/EntryBlock.java +++ b/src/main/java/com/reandroid/lib/arsc/value/EntryBlock.java @@ -434,7 +434,7 @@ public class EntryBlock extends Block implements JSONConvert { return 0; } int pkgId=packageBlock.getId(); - int typeId=typeBlock.getTypeId(); + int typeId=typeBlock.getTypeIdInt(); int entryId=getIndex(); return ((pkgId << 24) | (typeId << 16) | entryId); } diff --git a/src/main/java/com/reandroid/lib/arsc/value/LibraryInfo.java b/src/main/java/com/reandroid/lib/arsc/value/LibraryInfo.java index 30c5a69..c3baf74 100755 --- a/src/main/java/com/reandroid/lib/arsc/value/LibraryInfo.java +++ b/src/main/java/com/reandroid/lib/arsc/value/LibraryInfo.java @@ -15,7 +15,6 @@ */ package com.reandroid.lib.arsc.value; -import com.reandroid.lib.arsc.array.LibraryInfoArray; import com.reandroid.lib.arsc.base.Block; import com.reandroid.lib.arsc.base.BlockCounter; import com.reandroid.lib.arsc.io.BlockReader;