diff --git a/src/main/java/com/reandroid/lib/apk/StringPoolBuilder.java b/src/main/java/com/reandroid/lib/apk/StringPoolBuilder.java index 457434a..db08600 100644 --- a/src/main/java/com/reandroid/lib/apk/StringPoolBuilder.java +++ b/src/main/java/com/reandroid/lib/apk/StringPoolBuilder.java @@ -31,9 +31,9 @@ import java.io.IOException; import java.util.*; public class StringPoolBuilder { - private final Map> mSpecNameMap; + private final Map> mSpecNameMap; private final Set mTableStrings; - private byte mCurrentPackageId; + private int mCurrentPackageId; private JSONArray mStyledStrings; public StringPoolBuilder(){ this.mSpecNameMap = new HashMap<>(); @@ -41,7 +41,7 @@ public class StringPoolBuilder { } public void apply(TableBlock tableBlock){ applyTableString(tableBlock.getTableStringPool()); - for(byte pkgId:mSpecNameMap.keySet()){ + for(int pkgId:mSpecNameMap.keySet()){ PackageBlock packageBlock=tableBlock.getPackageArray().getOrCreate(pkgId); applySpecString(packageBlock.getSpecStringPool()); } @@ -52,7 +52,7 @@ public class StringPoolBuilder { stringPool.refresh(); } private void applySpecString(SpecStringPool stringPool){ - byte pkgId= (byte) stringPool.getPackageBlock().getId(); + int pkgId = stringPool.getPackageBlock().getId(); stringPool.addStrings(getSpecString(pkgId)); stringPool.refresh(); } @@ -86,7 +86,7 @@ public class StringPoolBuilder { public Set getTableString(){ return mTableStrings; } - public Set getSpecString(byte pkgId){ + public Set getSpecString(int pkgId){ return mSpecNameMap.get(pkgId); } private void scan(JSONObject jsonObject){ @@ -100,7 +100,7 @@ public class StringPoolBuilder { } return; }else if(jsonObject.has(PackageBlock.NAME_package_id)){ - mCurrentPackageId= (byte) jsonObject.getInt(PackageBlock.NAME_package_id); + mCurrentPackageId = jsonObject.getInt(PackageBlock.NAME_package_id); } Set keyList = jsonObject.keySet(); for(String key:keyList){ @@ -143,7 +143,7 @@ public class StringPoolBuilder { if(name==null){ return; } - byte pkgId=mCurrentPackageId; + int pkgId=mCurrentPackageId; if(pkgId==0){ throw new IllegalArgumentException("Current package id is 0"); } diff --git a/src/main/java/com/reandroid/lib/apk/TableBlockJsonBuilder.java b/src/main/java/com/reandroid/lib/apk/TableBlockJsonBuilder.java index 2b76b90..89f32c0 100644 --- a/src/main/java/com/reandroid/lib/apk/TableBlockJsonBuilder.java +++ b/src/main/java/com/reandroid/lib/apk/TableBlockJsonBuilder.java @@ -58,10 +58,9 @@ public class TableBlockJsonBuilder { } FileInputStream inputStream=new FileInputStream(pkgFile); JSONObject jsonObject=new JSONObject(inputStream); - int id = jsonObject.getInt(PackageBlock.NAME_package_id); - String name=jsonObject.optString(PackageBlock.NAME_package_name); - PackageBlock pkg=tableBlock.getPackageArray().getOrCreate((byte) id); - pkg.setName(name); + PackageBlock pkg=tableBlock.getPackageArray() + .getOrCreate(jsonObject.getInt(PackageBlock.NAME_package_id)); + pkg.setName(jsonObject.optString(PackageBlock.NAME_package_name)); if(jsonObject.has(PackageBlock.NAME_staged_aliases)){ JSONArray stagedJson = jsonObject.getJSONArray(PackageBlock.NAME_staged_aliases); StagedAlias stagedAlias = new StagedAlias(); @@ -78,11 +77,12 @@ public class TableBlockJsonBuilder { private void loadType(PackageBlock packageBlock, File typeJsonFile) throws IOException{ FileInputStream inputStream=new FileInputStream(typeJsonFile); JSONObject jsonObject=new JSONObject(inputStream); - int id= jsonObject.getInt("id"); + // TODO: change json names to use from static field JSONObject configObj=jsonObject.getJSONObject("config"); ResConfig resConfig=new ResConfig(); resConfig.fromJson(configObj); - TypeBlock typeBlock=packageBlock.getSpecTypePairArray().getOrCreate((byte) id, resConfig); + TypeBlock typeBlock=packageBlock.getSpecTypePairArray() + .getOrCreate(((byte)(0xff & jsonObject.getInt("id"))), resConfig); typeBlock.fromJson(jsonObject); } } diff --git a/src/main/java/com/reandroid/lib/arsc/array/PackageArray.java b/src/main/java/com/reandroid/lib/arsc/array/PackageArray.java index f7bb1e0..63f6f8a 100755 --- a/src/main/java/com/reandroid/lib/arsc/array/PackageArray.java +++ b/src/main/java/com/reandroid/lib/arsc/array/PackageArray.java @@ -43,6 +43,9 @@ public class PackageArray extends BlockArray sort(this); } public PackageBlock getOrCreate(byte pkgId){ + return getOrCreate(0xff & pkgId); + } + public PackageBlock getOrCreate(int pkgId){ PackageBlock packageBlock=getPackageBlockById(pkgId); if(packageBlock!=null){ return packageBlock; @@ -53,6 +56,9 @@ public class PackageArray extends BlockArray return packageBlock; } public PackageBlock getPackageBlockById(byte pkgId){ + return getPackageBlockById(0xff & pkgId); + } + public PackageBlock getPackageBlockById(int pkgId){ Iterator itr=iterator(true); while (itr.hasNext()){ PackageBlock packageBlock=itr.next(); 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 58e0d1a..0bda698 100755 --- a/src/main/java/com/reandroid/lib/arsc/chunk/PackageBlock.java +++ b/src/main/java/com/reandroid/lib/arsc/chunk/PackageBlock.java @@ -156,6 +156,9 @@ package com.reandroid.lib.arsc.chunk; public int getId(){ return mPackageId.get(); } + public void setId(byte id){ + setId(0xff & id); + } public void setId(int id){ mPackageId.set(id); } diff --git a/src/main/java/com/reandroid/lib/arsc/chunk/TableBlock.java b/src/main/java/com/reandroid/lib/arsc/chunk/TableBlock.java index 32130c3..c8684f9 100755 --- a/src/main/java/com/reandroid/lib/arsc/chunk/TableBlock.java +++ b/src/main/java/com/reandroid/lib/arsc/chunk/TableBlock.java @@ -54,7 +54,7 @@ public class TableBlock extends BaseChunk implements JSONConvert { public TableStringPool getTableStringPool(){ return mTableStringPool; } - public PackageBlock getPackageBlockById(byte pkgId){ + public PackageBlock getPackageBlockById(int pkgId){ return getPackageArray().getPackageBlockById(pkgId); } public PackageArray getPackageArray(){ @@ -112,7 +112,7 @@ public class TableBlock extends BaseChunk implements JSONConvert { } int pkgId=resourceId>>24; pkgId=pkgId&0xff; - PackageBlock packageBlock=getPackageBlockById((byte) pkgId); + PackageBlock packageBlock=getPackageBlockById(pkgId); if(packageBlock!=null){ EntryGroup entryGroup=packageBlock.getEntryGroup(resourceId); if(entryGroup!=null){ diff --git a/src/main/java/com/reandroid/lib/common/TableEntryStore.java b/src/main/java/com/reandroid/lib/common/TableEntryStore.java index 23777e7..5f93257 100755 --- a/src/main/java/com/reandroid/lib/common/TableEntryStore.java +++ b/src/main/java/com/reandroid/lib/common/TableEntryStore.java @@ -24,7 +24,7 @@ import com.reandroid.lib.arsc.value.EntryBlock; import java.util.*; public class TableEntryStore implements EntryStore{ - private final Map> mPackagesMap; + private final Map> mPackagesMap; public TableEntryStore(){ this.mPackagesMap = new HashMap<>(); } @@ -58,15 +58,14 @@ public class TableEntryStore implements EntryStore{ if(packageBlock==null){ return; } - byte pkgId= (byte) packageBlock.getId(); - Set packageBlockSet=getOrCreate(pkgId); + Set packageBlockSet=getOrCreate(packageBlock.getId()); if(packageBlockSet.contains(packageBlock)){ return; } packageBlockSet.add(packageBlock); } - private Set getOrCreate(byte packageId){ - Byte id=packageId; + private Set getOrCreate(int packageId){ + Integer id=packageId; Set packageBlockSet=mPackagesMap.get(id); if(packageBlockSet==null){ packageBlockSet=new HashSet<>(); @@ -78,7 +77,7 @@ public class TableEntryStore implements EntryStore{ public EntryGroup searchEntryGroup(String packageName, String type, String name) { return null; } - private Set getTableBlocks(byte packageId) { + private Set getTableBlocks(int packageId) { Set results=new HashSet<>(); Set packageBlockSet = mPackagesMap.get(packageId); if(packageBlockSet!=null){ @@ -92,7 +91,7 @@ public class TableEntryStore implements EntryStore{ @Override public List getEntryGroups(int resourceId) { List results=new ArrayList<>(); - byte pkgId= (byte) ((resourceId>>24)&0xff); + int pkgId = (resourceId>>24)&0xff; Set packageBlockSet = mPackagesMap.get(pkgId); if(packageBlockSet==null){ return results; @@ -107,7 +106,7 @@ public class TableEntryStore implements EntryStore{ } @Override public EntryGroup getEntryGroup(int resourceId) { - byte pkgId= (byte) ((resourceId>>24)&0xff); + int pkgId = (resourceId>>24)&0xff; Set packageBlockSet = mPackagesMap.get(pkgId); if(packageBlockSet==null){ return null; @@ -123,7 +122,7 @@ public class TableEntryStore implements EntryStore{ @Override public List getPackageBlocks(byte packageId) { List results=new ArrayList<>(); - Set packageBlockSet = mPackagesMap.get(packageId); + Set packageBlockSet = mPackagesMap.get(0xff & packageId); if(packageBlockSet!=null){ results.addAll(packageBlockSet); } @@ -132,7 +131,7 @@ public class TableEntryStore implements EntryStore{ @Override public List getTableStrings(byte packageId, int stringReference) { List results=new ArrayList<>(); - Set tableBlockSet=getTableBlocks(packageId); + Set tableBlockSet=getTableBlocks(0xff & packageId); for(TableBlock tableBlock:tableBlockSet){ TableString tableString=tableBlock.getTableStringPool().get(stringReference); if(tableString!=null){