mirror of
https://github.com/revanced/ARSCLib.git
synced 2025-04-30 06:14:25 +02:00
fix error decompiling android frameworks api > 32
This commit is contained in:
parent
57fadc12c0
commit
c2da1c776d
@ -18,16 +18,18 @@ package com.reandroid.common;
|
||||
import com.reandroid.arsc.chunk.PackageBlock;
|
||||
import com.reandroid.arsc.chunk.TableBlock;
|
||||
import com.reandroid.arsc.group.EntryGroup;
|
||||
import com.reandroid.arsc.item.TableString;
|
||||
import com.reandroid.arsc.util.FrameworkTable;
|
||||
import com.reandroid.arsc.value.Entry;
|
||||
import com.reandroid.arsc.value.StagedAliasEntry;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class TableEntryStore implements EntryStore{
|
||||
private final Map<Integer, Set<PackageBlock>> mPackagesMap;
|
||||
private final Map<Integer, Set<PackageBlock>> mLocalPackagesMap;
|
||||
private final Map<Integer, Set<PackageBlock>> mFrameworkPackagesMap;
|
||||
public TableEntryStore(){
|
||||
this.mPackagesMap = new HashMap<>();
|
||||
this.mLocalPackagesMap = new HashMap<>();
|
||||
this.mFrameworkPackagesMap = new HashMap<>();
|
||||
}
|
||||
|
||||
public String getEntryName(int resourceId){
|
||||
@ -59,53 +61,87 @@ public class TableEntryStore implements EntryStore{
|
||||
if(packageBlock==null){
|
||||
return;
|
||||
}
|
||||
Set<PackageBlock> packageBlockSet=getOrCreate(packageBlock.getId());
|
||||
Set<PackageBlock> packageBlockSet;
|
||||
if(packageBlock.getTableBlock() instanceof FrameworkTable){
|
||||
packageBlockSet = getOrCreateFrameworks(packageBlock.getId());
|
||||
}else {
|
||||
packageBlockSet = getOrCreateLocal(packageBlock.getId());
|
||||
}
|
||||
if(packageBlockSet.contains(packageBlock)){
|
||||
return;
|
||||
}
|
||||
packageBlockSet.add(packageBlock);
|
||||
}
|
||||
private Set<PackageBlock> getOrCreate(int packageId){
|
||||
private Set<PackageBlock> getOrCreateLocal(int packageId){
|
||||
Integer id=packageId;
|
||||
Set<PackageBlock> packageBlockSet=mPackagesMap.get(id);
|
||||
Set<PackageBlock> packageBlockSet = mLocalPackagesMap.get(id);
|
||||
if(packageBlockSet==null){
|
||||
packageBlockSet=new HashSet<>();
|
||||
mPackagesMap.put(id, packageBlockSet);
|
||||
mLocalPackagesMap.put(id, packageBlockSet);
|
||||
}
|
||||
return packageBlockSet;
|
||||
}
|
||||
private Set<PackageBlock> getOrCreateFrameworks(int packageId){
|
||||
Integer id=packageId;
|
||||
Set<PackageBlock> packageBlockSet = mFrameworkPackagesMap.get(id);
|
||||
if(packageBlockSet==null){
|
||||
packageBlockSet=new HashSet<>();
|
||||
mFrameworkPackagesMap.put(id, packageBlockSet);
|
||||
}
|
||||
return packageBlockSet;
|
||||
}
|
||||
@Override
|
||||
public List<EntryGroup> getEntryGroups(int resourceId) {
|
||||
List<EntryGroup> results = searchEntryGroups(resourceId);
|
||||
List<EntryGroup> results = searchEntryGroupsLocal(resourceId);
|
||||
if(results.size()>0){
|
||||
return results;
|
||||
}
|
||||
return searchEntryGroups(searchIdAlias(resourceId));
|
||||
int alias = searchIdAliasLocal(resourceId);
|
||||
results = searchEntryGroupsLocal(alias);
|
||||
if(results.size()>0){
|
||||
return results;
|
||||
}
|
||||
results = searchEntryGroupsFramework(resourceId);
|
||||
if(results.size()>0){
|
||||
return results;
|
||||
}
|
||||
alias = searchIdAliasFramework(resourceId);
|
||||
return searchEntryGroupsFramework(alias);
|
||||
}
|
||||
@Override
|
||||
public EntryGroup getEntryGroup(int resourceId) {
|
||||
EntryGroup entryGroup = searchEntryGroup(resourceId);
|
||||
if(entryGroup!=null){
|
||||
return entryGroup;
|
||||
EntryGroup entryGroup = searchEntryLocal(resourceId);
|
||||
if(entryGroup==null){
|
||||
entryGroup = searchEntryLocal(searchIdAliasLocal(resourceId));
|
||||
}
|
||||
return searchEntryGroup(searchIdAlias(resourceId));
|
||||
if(entryGroup==null){
|
||||
entryGroup = searchEntryFramework(resourceId);
|
||||
}
|
||||
if(entryGroup==null){
|
||||
entryGroup = searchEntryFramework(searchIdAliasFramework(resourceId));
|
||||
}
|
||||
return entryGroup;
|
||||
}
|
||||
@Override
|
||||
public List<PackageBlock> getPackageBlocks(int packageId) {
|
||||
List<PackageBlock> results=new ArrayList<>();
|
||||
Set<PackageBlock> packageBlockSet = mPackagesMap.get(0xff & packageId);
|
||||
packageId = 0xff & packageId;
|
||||
Set<PackageBlock> packageBlockSet = mLocalPackagesMap.get(packageId);
|
||||
if(packageBlockSet==null){
|
||||
packageBlockSet = mFrameworkPackagesMap.get(packageId);
|
||||
}
|
||||
if(packageBlockSet!=null){
|
||||
results.addAll(packageBlockSet);
|
||||
}
|
||||
return results;
|
||||
}
|
||||
private List<EntryGroup> searchEntryGroups(int resourceId) {
|
||||
private List<EntryGroup> searchEntryGroupsLocal(int resourceId) {
|
||||
if(resourceId==0){
|
||||
return new ArrayList<>();
|
||||
}
|
||||
List<EntryGroup> results=new ArrayList<>();
|
||||
int pkgId = (resourceId>>24)&0xff;
|
||||
Set<PackageBlock> packageBlockSet = mPackagesMap.get(pkgId);
|
||||
Set<PackageBlock> packageBlockSet = mLocalPackagesMap.get(pkgId);
|
||||
if(packageBlockSet==null){
|
||||
return results;
|
||||
}
|
||||
@ -117,12 +153,27 @@ public class TableEntryStore implements EntryStore{
|
||||
}
|
||||
return results;
|
||||
}
|
||||
private EntryGroup searchEntryGroup(int resourceId) {
|
||||
private List<EntryGroup> searchEntryGroupsFramework(int resourceId) {
|
||||
if(resourceId==0){
|
||||
return null;
|
||||
return new ArrayList<>();
|
||||
}
|
||||
List<EntryGroup> results=new ArrayList<>();
|
||||
int pkgId = (resourceId>>24)&0xff;
|
||||
Set<PackageBlock> packageBlockSet = mFrameworkPackagesMap.get(pkgId);
|
||||
if(packageBlockSet==null){
|
||||
return results;
|
||||
}
|
||||
for(PackageBlock packageBlock: packageBlockSet){
|
||||
EntryGroup group=packageBlock.getEntryGroup(resourceId);
|
||||
if(group!=null){
|
||||
results.add(group);
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
private EntryGroup searchEntryLocal(int resourceId) {
|
||||
int packageId = (resourceId>>24)&0xff;
|
||||
Set<PackageBlock> packageBlockSet = mPackagesMap.get(packageId);
|
||||
Set<PackageBlock> packageBlockSet = mLocalPackagesMap.get(packageId);
|
||||
if(packageBlockSet==null){
|
||||
return null;
|
||||
}
|
||||
@ -134,8 +185,33 @@ public class TableEntryStore implements EntryStore{
|
||||
}
|
||||
return null;
|
||||
}
|
||||
private int searchIdAlias(int resourceId) {
|
||||
for(Set<PackageBlock> packageBlockSet : mPackagesMap.values()){
|
||||
private EntryGroup searchEntryFramework(int resourceId) {
|
||||
int packageId = (resourceId>>24)&0xff;
|
||||
Set<PackageBlock> packageBlockSet = mFrameworkPackagesMap.get(packageId);
|
||||
if(packageBlockSet==null){
|
||||
return null;
|
||||
}
|
||||
for(PackageBlock packageBlock: packageBlockSet){
|
||||
EntryGroup group=packageBlock.getEntryGroup(resourceId);
|
||||
if(group!=null && group.pickOne()!=null){
|
||||
return group;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
private int searchIdAliasLocal(int resourceId) {
|
||||
for(Set<PackageBlock> packageBlockSet : mLocalPackagesMap.values()){
|
||||
for(PackageBlock packageBlock:packageBlockSet){
|
||||
StagedAliasEntry stagedAliasEntry = packageBlock.searchByStagedResId(resourceId);
|
||||
if(stagedAliasEntry!=null){
|
||||
return stagedAliasEntry.getFinalizedResId();
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
private int searchIdAliasFramework(int resourceId) {
|
||||
for(Set<PackageBlock> packageBlockSet : mLocalPackagesMap.values()){
|
||||
for(PackageBlock packageBlock:packageBlockSet){
|
||||
StagedAliasEntry stagedAliasEntry = packageBlock.searchByStagedResId(resourceId);
|
||||
if(stagedAliasEntry!=null){
|
||||
|
Loading…
x
Reference in New Issue
Block a user