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 0814248..08b5233 100755 --- a/src/main/java/com/reandroid/lib/arsc/chunk/PackageBlock.java +++ b/src/main/java/com/reandroid/lib/arsc/chunk/PackageBlock.java @@ -15,35 +15,34 @@ */ package com.reandroid.lib.arsc.chunk; -import com.reandroid.lib.arsc.array.LibraryInfoArray; -import com.reandroid.lib.arsc.array.PackageArray; -import com.reandroid.lib.arsc.array.SpecTypePairArray; -import com.reandroid.lib.arsc.base.Block; -import com.reandroid.lib.arsc.container.PackageLastBlocks; -import com.reandroid.lib.arsc.container.SingleBlockContainer; -import com.reandroid.lib.arsc.container.SpecTypePair; -import com.reandroid.lib.arsc.group.EntryGroup; -import com.reandroid.lib.arsc.io.BlockLoad; -import com.reandroid.lib.arsc.io.BlockReader; -import com.reandroid.lib.arsc.item.IntegerItem; -import com.reandroid.lib.arsc.item.PackageName; -import com.reandroid.lib.arsc.item.ReferenceItem; -import com.reandroid.lib.arsc.pool.SpecStringPool; -import com.reandroid.lib.arsc.pool.TableStringPool; -import com.reandroid.lib.arsc.pool.TypeStringPool; -import com.reandroid.lib.arsc.value.EntryBlock; -import com.reandroid.lib.arsc.value.LibraryInfo; -import com.reandroid.lib.json.JSONConvert; -import com.reandroid.lib.json.JSONObject; + import com.reandroid.lib.arsc.array.LibraryInfoArray; + import com.reandroid.lib.arsc.array.SpecTypePairArray; + import com.reandroid.lib.arsc.base.Block; + import com.reandroid.lib.arsc.container.PackageLastBlocks; + import com.reandroid.lib.arsc.container.SingleBlockContainer; + import com.reandroid.lib.arsc.container.SpecTypePair; + import com.reandroid.lib.arsc.group.EntryGroup; + import com.reandroid.lib.arsc.io.BlockLoad; + import com.reandroid.lib.arsc.io.BlockReader; + import com.reandroid.lib.arsc.item.FixedLengthString; + import com.reandroid.lib.arsc.item.IntegerItem; + import com.reandroid.lib.arsc.item.ReferenceItem; + import com.reandroid.lib.arsc.pool.SpecStringPool; + import com.reandroid.lib.arsc.pool.TableStringPool; + import com.reandroid.lib.arsc.pool.TypeStringPool; + import com.reandroid.lib.arsc.value.EntryBlock; + import com.reandroid.lib.arsc.value.LibraryInfo; + import com.reandroid.lib.json.JSONConvert; + import com.reandroid.lib.json.JSONObject; -import java.io.IOException; -import java.util.*; + import java.io.IOException; + import java.util.*; -public class PackageBlock extends BaseChunk + public class PackageBlock extends BaseChunk implements BlockLoad, JSONConvert, Comparable { private final IntegerItem mPackageId; - private final PackageName mPackageName; + private final FixedLengthString mPackageName; private final IntegerItem mTypeStringPoolOffset; private final IntegerItem mTypeStringPoolCount; @@ -66,7 +65,7 @@ public class PackageBlock extends BaseChunk public PackageBlock() { super(ChunkType.PACKAGE, 3); this.mPackageId=new IntegerItem(); - this.mPackageName=new PackageName(); + this.mPackageName = new FixedLengthString(256); this.mTypeStringPoolOffset = new IntegerItem(); this.mTypeStringPoolCount = new IntegerItem(); diff --git a/src/main/java/com/reandroid/lib/arsc/item/FixedLengthString.java b/src/main/java/com/reandroid/lib/arsc/item/FixedLengthString.java new file mode 100644 index 0000000..36a7f6c --- /dev/null +++ b/src/main/java/com/reandroid/lib/arsc/item/FixedLengthString.java @@ -0,0 +1,85 @@ + /* + * Copyright (C) 2022 github.com/REAndroid + * + * 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.reandroid.lib.arsc.item; + + import com.reandroid.lib.arsc.io.BlockReader; + + import java.nio.charset.StandardCharsets; + + public class FixedLengthString extends StringItem{ + private final int bytesLength; + public FixedLengthString(int bytesLength){ + super(true); + this.bytesLength=bytesLength; + setBytesLength(bytesLength); + } + @Override + byte[] encodeString(String str){ + if(str==null){ + return new byte[bytesLength]; + } + byte[] bts=getUtf16Bytes(str); + byte[] results=new byte[bytesLength]; + int len=bts.length; + if(len>bytesLength){ + len=bytesLength; + } + System.arraycopy(bts, 0, results, 0, len); + return results; + } + @Override + String decodeString(){ + return decodeUtf16Bytes(getBytesInternal()); + } + @Override + public StyleItem getStyle(){ + return null; + } + @Override + int calculateReadLength(BlockReader reader){ + return bytesLength; + } + private static String decodeUtf16Bytes(byte[] bts){ + if(isNullBytes(bts)){ + return null; + } + int len=getEndNullPosition(bts); + return new String(bts,0, len, StandardCharsets.UTF_16LE); + } + private static int getEndNullPosition(byte[] bts){ + int max=bts.length; + int result=0; + boolean found=false; + for(int i=1; iBYTES_LENGTH){ - len=BYTES_LENGTH; - } - System.arraycopy(bts, 0, results, 0, len); - return results; - } - @Override - String decodeString(){ - return decodeUtf16Bytes(getBytesInternal()); - } - @Override - public StyleItem getStyle(){ - return null; - } - @Override - int calculateReadLength(BlockReader reader){ - return BYTES_LENGTH; - } - private static String decodeUtf16Bytes(byte[] bts){ - if(isNullBytes(bts)){ - return null; - } - int len=getEndNullPosition(bts); - return new String(bts,0, len, StandardCharsets.UTF_16LE); - } - private static int getEndNullPosition(byte[] bts){ - int max=bts.length; - int result=0; - boolean found=false; - for(int i=1; i { private final IntegerItem mPackageId; - private final PackageName mPackageName; + private final FixedLengthString mPackageName; public LibraryInfo(){ super(); this.mPackageId=new IntegerItem(); - this.mPackageName=new PackageName(); + this.mPackageName = new FixedLengthString(256); mPackageId.setIndex(0); mPackageId.setParent(this); mPackageName.setIndex(1);