mirror of
https://github.com/revanced/ARSCLib.git
synced 2025-05-01 06:34:26 +02:00
fix package id to unsigned byte
This commit is contained in:
parent
c2a9ebd7e9
commit
4f715d04ab
@ -31,9 +31,9 @@ import java.io.IOException;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class StringPoolBuilder {
|
public class StringPoolBuilder {
|
||||||
private final Map<Byte, Set<String>> mSpecNameMap;
|
private final Map<Integer, Set<String>> mSpecNameMap;
|
||||||
private final Set<String> mTableStrings;
|
private final Set<String> mTableStrings;
|
||||||
private byte mCurrentPackageId;
|
private int mCurrentPackageId;
|
||||||
private JSONArray mStyledStrings;
|
private JSONArray mStyledStrings;
|
||||||
public StringPoolBuilder(){
|
public StringPoolBuilder(){
|
||||||
this.mSpecNameMap = new HashMap<>();
|
this.mSpecNameMap = new HashMap<>();
|
||||||
@ -41,7 +41,7 @@ public class StringPoolBuilder {
|
|||||||
}
|
}
|
||||||
public void apply(TableBlock tableBlock){
|
public void apply(TableBlock tableBlock){
|
||||||
applyTableString(tableBlock.getTableStringPool());
|
applyTableString(tableBlock.getTableStringPool());
|
||||||
for(byte pkgId:mSpecNameMap.keySet()){
|
for(int pkgId:mSpecNameMap.keySet()){
|
||||||
PackageBlock packageBlock=tableBlock.getPackageArray().getOrCreate(pkgId);
|
PackageBlock packageBlock=tableBlock.getPackageArray().getOrCreate(pkgId);
|
||||||
applySpecString(packageBlock.getSpecStringPool());
|
applySpecString(packageBlock.getSpecStringPool());
|
||||||
}
|
}
|
||||||
@ -52,7 +52,7 @@ public class StringPoolBuilder {
|
|||||||
stringPool.refresh();
|
stringPool.refresh();
|
||||||
}
|
}
|
||||||
private void applySpecString(SpecStringPool stringPool){
|
private void applySpecString(SpecStringPool stringPool){
|
||||||
byte pkgId= (byte) stringPool.getPackageBlock().getId();
|
int pkgId = stringPool.getPackageBlock().getId();
|
||||||
stringPool.addStrings(getSpecString(pkgId));
|
stringPool.addStrings(getSpecString(pkgId));
|
||||||
stringPool.refresh();
|
stringPool.refresh();
|
||||||
}
|
}
|
||||||
@ -86,7 +86,7 @@ public class StringPoolBuilder {
|
|||||||
public Set<String> getTableString(){
|
public Set<String> getTableString(){
|
||||||
return mTableStrings;
|
return mTableStrings;
|
||||||
}
|
}
|
||||||
public Set<String> getSpecString(byte pkgId){
|
public Set<String> getSpecString(int pkgId){
|
||||||
return mSpecNameMap.get(pkgId);
|
return mSpecNameMap.get(pkgId);
|
||||||
}
|
}
|
||||||
private void scan(JSONObject jsonObject){
|
private void scan(JSONObject jsonObject){
|
||||||
@ -100,7 +100,7 @@ public class StringPoolBuilder {
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}else if(jsonObject.has(PackageBlock.NAME_package_id)){
|
}else if(jsonObject.has(PackageBlock.NAME_package_id)){
|
||||||
mCurrentPackageId= (byte) jsonObject.getInt(PackageBlock.NAME_package_id);
|
mCurrentPackageId = jsonObject.getInt(PackageBlock.NAME_package_id);
|
||||||
}
|
}
|
||||||
Set<String> keyList = jsonObject.keySet();
|
Set<String> keyList = jsonObject.keySet();
|
||||||
for(String key:keyList){
|
for(String key:keyList){
|
||||||
@ -143,7 +143,7 @@ public class StringPoolBuilder {
|
|||||||
if(name==null){
|
if(name==null){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
byte pkgId=mCurrentPackageId;
|
int pkgId=mCurrentPackageId;
|
||||||
if(pkgId==0){
|
if(pkgId==0){
|
||||||
throw new IllegalArgumentException("Current package id is 0");
|
throw new IllegalArgumentException("Current package id is 0");
|
||||||
}
|
}
|
||||||
|
@ -58,10 +58,9 @@ public class TableBlockJsonBuilder {
|
|||||||
}
|
}
|
||||||
FileInputStream inputStream=new FileInputStream(pkgFile);
|
FileInputStream inputStream=new FileInputStream(pkgFile);
|
||||||
JSONObject jsonObject=new JSONObject(inputStream);
|
JSONObject jsonObject=new JSONObject(inputStream);
|
||||||
int id = jsonObject.getInt(PackageBlock.NAME_package_id);
|
PackageBlock pkg=tableBlock.getPackageArray()
|
||||||
String name=jsonObject.optString(PackageBlock.NAME_package_name);
|
.getOrCreate(jsonObject.getInt(PackageBlock.NAME_package_id));
|
||||||
PackageBlock pkg=tableBlock.getPackageArray().getOrCreate((byte) id);
|
pkg.setName(jsonObject.optString(PackageBlock.NAME_package_name));
|
||||||
pkg.setName(name);
|
|
||||||
if(jsonObject.has(PackageBlock.NAME_staged_aliases)){
|
if(jsonObject.has(PackageBlock.NAME_staged_aliases)){
|
||||||
JSONArray stagedJson = jsonObject.getJSONArray(PackageBlock.NAME_staged_aliases);
|
JSONArray stagedJson = jsonObject.getJSONArray(PackageBlock.NAME_staged_aliases);
|
||||||
StagedAlias stagedAlias = new StagedAlias();
|
StagedAlias stagedAlias = new StagedAlias();
|
||||||
@ -78,11 +77,12 @@ public class TableBlockJsonBuilder {
|
|||||||
private void loadType(PackageBlock packageBlock, File typeJsonFile) throws IOException{
|
private void loadType(PackageBlock packageBlock, File typeJsonFile) throws IOException{
|
||||||
FileInputStream inputStream=new FileInputStream(typeJsonFile);
|
FileInputStream inputStream=new FileInputStream(typeJsonFile);
|
||||||
JSONObject jsonObject=new JSONObject(inputStream);
|
JSONObject jsonObject=new JSONObject(inputStream);
|
||||||
int id= jsonObject.getInt("id");
|
// TODO: change json names to use from static field
|
||||||
JSONObject configObj=jsonObject.getJSONObject("config");
|
JSONObject configObj=jsonObject.getJSONObject("config");
|
||||||
ResConfig resConfig=new ResConfig();
|
ResConfig resConfig=new ResConfig();
|
||||||
resConfig.fromJson(configObj);
|
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);
|
typeBlock.fromJson(jsonObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,6 +43,9 @@ public class PackageArray extends BlockArray<PackageBlock>
|
|||||||
sort(this);
|
sort(this);
|
||||||
}
|
}
|
||||||
public PackageBlock getOrCreate(byte pkgId){
|
public PackageBlock getOrCreate(byte pkgId){
|
||||||
|
return getOrCreate(0xff & pkgId);
|
||||||
|
}
|
||||||
|
public PackageBlock getOrCreate(int pkgId){
|
||||||
PackageBlock packageBlock=getPackageBlockById(pkgId);
|
PackageBlock packageBlock=getPackageBlockById(pkgId);
|
||||||
if(packageBlock!=null){
|
if(packageBlock!=null){
|
||||||
return packageBlock;
|
return packageBlock;
|
||||||
@ -53,6 +56,9 @@ public class PackageArray extends BlockArray<PackageBlock>
|
|||||||
return packageBlock;
|
return packageBlock;
|
||||||
}
|
}
|
||||||
public PackageBlock getPackageBlockById(byte pkgId){
|
public PackageBlock getPackageBlockById(byte pkgId){
|
||||||
|
return getPackageBlockById(0xff & pkgId);
|
||||||
|
}
|
||||||
|
public PackageBlock getPackageBlockById(int pkgId){
|
||||||
Iterator<PackageBlock> itr=iterator(true);
|
Iterator<PackageBlock> itr=iterator(true);
|
||||||
while (itr.hasNext()){
|
while (itr.hasNext()){
|
||||||
PackageBlock packageBlock=itr.next();
|
PackageBlock packageBlock=itr.next();
|
||||||
|
@ -156,6 +156,9 @@ package com.reandroid.lib.arsc.chunk;
|
|||||||
public int getId(){
|
public int getId(){
|
||||||
return mPackageId.get();
|
return mPackageId.get();
|
||||||
}
|
}
|
||||||
|
public void setId(byte id){
|
||||||
|
setId(0xff & id);
|
||||||
|
}
|
||||||
public void setId(int id){
|
public void setId(int id){
|
||||||
mPackageId.set(id);
|
mPackageId.set(id);
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ public class TableBlock extends BaseChunk implements JSONConvert<JSONObject> {
|
|||||||
public TableStringPool getTableStringPool(){
|
public TableStringPool getTableStringPool(){
|
||||||
return mTableStringPool;
|
return mTableStringPool;
|
||||||
}
|
}
|
||||||
public PackageBlock getPackageBlockById(byte pkgId){
|
public PackageBlock getPackageBlockById(int pkgId){
|
||||||
return getPackageArray().getPackageBlockById(pkgId);
|
return getPackageArray().getPackageBlockById(pkgId);
|
||||||
}
|
}
|
||||||
public PackageArray getPackageArray(){
|
public PackageArray getPackageArray(){
|
||||||
@ -112,7 +112,7 @@ public class TableBlock extends BaseChunk implements JSONConvert<JSONObject> {
|
|||||||
}
|
}
|
||||||
int pkgId=resourceId>>24;
|
int pkgId=resourceId>>24;
|
||||||
pkgId=pkgId&0xff;
|
pkgId=pkgId&0xff;
|
||||||
PackageBlock packageBlock=getPackageBlockById((byte) pkgId);
|
PackageBlock packageBlock=getPackageBlockById(pkgId);
|
||||||
if(packageBlock!=null){
|
if(packageBlock!=null){
|
||||||
EntryGroup entryGroup=packageBlock.getEntryGroup(resourceId);
|
EntryGroup entryGroup=packageBlock.getEntryGroup(resourceId);
|
||||||
if(entryGroup!=null){
|
if(entryGroup!=null){
|
||||||
|
@ -24,7 +24,7 @@ import com.reandroid.lib.arsc.value.EntryBlock;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class TableEntryStore implements EntryStore{
|
public class TableEntryStore implements EntryStore{
|
||||||
private final Map<Byte, Set<PackageBlock>> mPackagesMap;
|
private final Map<Integer, Set<PackageBlock>> mPackagesMap;
|
||||||
public TableEntryStore(){
|
public TableEntryStore(){
|
||||||
this.mPackagesMap = new HashMap<>();
|
this.mPackagesMap = new HashMap<>();
|
||||||
}
|
}
|
||||||
@ -58,15 +58,14 @@ public class TableEntryStore implements EntryStore{
|
|||||||
if(packageBlock==null){
|
if(packageBlock==null){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
byte pkgId= (byte) packageBlock.getId();
|
Set<PackageBlock> packageBlockSet=getOrCreate(packageBlock.getId());
|
||||||
Set<PackageBlock> packageBlockSet=getOrCreate(pkgId);
|
|
||||||
if(packageBlockSet.contains(packageBlock)){
|
if(packageBlockSet.contains(packageBlock)){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
packageBlockSet.add(packageBlock);
|
packageBlockSet.add(packageBlock);
|
||||||
}
|
}
|
||||||
private Set<PackageBlock> getOrCreate(byte packageId){
|
private Set<PackageBlock> getOrCreate(int packageId){
|
||||||
Byte id=packageId;
|
Integer id=packageId;
|
||||||
Set<PackageBlock> packageBlockSet=mPackagesMap.get(id);
|
Set<PackageBlock> packageBlockSet=mPackagesMap.get(id);
|
||||||
if(packageBlockSet==null){
|
if(packageBlockSet==null){
|
||||||
packageBlockSet=new HashSet<>();
|
packageBlockSet=new HashSet<>();
|
||||||
@ -78,7 +77,7 @@ public class TableEntryStore implements EntryStore{
|
|||||||
public EntryGroup searchEntryGroup(String packageName, String type, String name) {
|
public EntryGroup searchEntryGroup(String packageName, String type, String name) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
private Set<TableBlock> getTableBlocks(byte packageId) {
|
private Set<TableBlock> getTableBlocks(int packageId) {
|
||||||
Set<TableBlock> results=new HashSet<>();
|
Set<TableBlock> results=new HashSet<>();
|
||||||
Set<PackageBlock> packageBlockSet = mPackagesMap.get(packageId);
|
Set<PackageBlock> packageBlockSet = mPackagesMap.get(packageId);
|
||||||
if(packageBlockSet!=null){
|
if(packageBlockSet!=null){
|
||||||
@ -92,7 +91,7 @@ public class TableEntryStore implements EntryStore{
|
|||||||
@Override
|
@Override
|
||||||
public List<EntryGroup> getEntryGroups(int resourceId) {
|
public List<EntryGroup> getEntryGroups(int resourceId) {
|
||||||
List<EntryGroup> results=new ArrayList<>();
|
List<EntryGroup> results=new ArrayList<>();
|
||||||
byte pkgId= (byte) ((resourceId>>24)&0xff);
|
int pkgId = (resourceId>>24)&0xff;
|
||||||
Set<PackageBlock> packageBlockSet = mPackagesMap.get(pkgId);
|
Set<PackageBlock> packageBlockSet = mPackagesMap.get(pkgId);
|
||||||
if(packageBlockSet==null){
|
if(packageBlockSet==null){
|
||||||
return results;
|
return results;
|
||||||
@ -107,7 +106,7 @@ public class TableEntryStore implements EntryStore{
|
|||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public EntryGroup getEntryGroup(int resourceId) {
|
public EntryGroup getEntryGroup(int resourceId) {
|
||||||
byte pkgId= (byte) ((resourceId>>24)&0xff);
|
int pkgId = (resourceId>>24)&0xff;
|
||||||
Set<PackageBlock> packageBlockSet = mPackagesMap.get(pkgId);
|
Set<PackageBlock> packageBlockSet = mPackagesMap.get(pkgId);
|
||||||
if(packageBlockSet==null){
|
if(packageBlockSet==null){
|
||||||
return null;
|
return null;
|
||||||
@ -123,7 +122,7 @@ public class TableEntryStore implements EntryStore{
|
|||||||
@Override
|
@Override
|
||||||
public List<PackageBlock> getPackageBlocks(byte packageId) {
|
public List<PackageBlock> getPackageBlocks(byte packageId) {
|
||||||
List<PackageBlock> results=new ArrayList<>();
|
List<PackageBlock> results=new ArrayList<>();
|
||||||
Set<PackageBlock> packageBlockSet = mPackagesMap.get(packageId);
|
Set<PackageBlock> packageBlockSet = mPackagesMap.get(0xff & packageId);
|
||||||
if(packageBlockSet!=null){
|
if(packageBlockSet!=null){
|
||||||
results.addAll(packageBlockSet);
|
results.addAll(packageBlockSet);
|
||||||
}
|
}
|
||||||
@ -132,7 +131,7 @@ public class TableEntryStore implements EntryStore{
|
|||||||
@Override
|
@Override
|
||||||
public List<TableString> getTableStrings(byte packageId, int stringReference) {
|
public List<TableString> getTableStrings(byte packageId, int stringReference) {
|
||||||
List<TableString> results=new ArrayList<>();
|
List<TableString> results=new ArrayList<>();
|
||||||
Set<TableBlock> tableBlockSet=getTableBlocks(packageId);
|
Set<TableBlock> tableBlockSet=getTableBlocks(0xff & packageId);
|
||||||
for(TableBlock tableBlock:tableBlockSet){
|
for(TableBlock tableBlock:tableBlockSet){
|
||||||
TableString tableString=tableBlock.getTableStringPool().get(stringReference);
|
TableString tableString=tableBlock.getTableStringPool().get(stringReference);
|
||||||
if(tableString!=null){
|
if(tableString!=null){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user