mirror of
https://github.com/revanced/ARSCLib.git
synced 2025-05-23 18:16:16 +02:00
search entries with alias resource ids
This commit is contained in:
parent
fe96d22846
commit
4b6dc12622
@ -227,8 +227,25 @@ package com.reandroid.lib.arsc.chunk;
|
||||
public Collection<EntryGroup> listEntryGroup(){
|
||||
return getEntriesGroupMap().values();
|
||||
}
|
||||
public EntryGroup getEntryGroup(int resId){
|
||||
return getEntriesGroupMap().get(resId);
|
||||
|
||||
/**
|
||||
* Searches entries by resource id from local map, then if not find
|
||||
* search by alias resource id
|
||||
* */
|
||||
public EntryGroup getEntryGroup(int resourceId){
|
||||
if(resourceId==0){
|
||||
return null;
|
||||
}
|
||||
EntryGroup entryGroup=getEntriesGroupMap().get(resourceId);
|
||||
if(entryGroup!=null){
|
||||
return entryGroup;
|
||||
}
|
||||
StagedAliasEntry stagedAliasEntry = searchByStagedResId(resourceId);
|
||||
if(stagedAliasEntry!=null){
|
||||
return getEntriesGroupMap()
|
||||
.get(stagedAliasEntry.getFinalizedResId());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
public void updateEntry(EntryBlock entryBlock){
|
||||
if(entryBlock==null||entryBlock.isNull()){
|
||||
|
@ -22,6 +22,7 @@ import com.reandroid.lib.arsc.header.HeaderBlock;
|
||||
import com.reandroid.lib.arsc.io.BlockReader;
|
||||
import com.reandroid.lib.arsc.item.IntegerItem;
|
||||
import com.reandroid.lib.arsc.pool.TableStringPool;
|
||||
import com.reandroid.lib.arsc.value.StagedAliasEntry;
|
||||
import com.reandroid.lib.common.Frameworks;
|
||||
import com.reandroid.lib.json.JSONConvert;
|
||||
import com.reandroid.lib.json.JSONArray;
|
||||
@ -111,23 +112,35 @@ public class TableBlock extends BaseChunk implements JSONConvert<JSONObject> {
|
||||
if(resourceId==0){
|
||||
return null;
|
||||
}
|
||||
int pkgId=resourceId>>24;
|
||||
pkgId=pkgId&0xff;
|
||||
PackageBlock packageBlock=getPackageBlockById(pkgId);
|
||||
if(packageBlock!=null){
|
||||
EntryGroup entryGroup=packageBlock.getEntryGroup(resourceId);
|
||||
int aliasId = searchResourceIdAlias(resourceId);
|
||||
for(PackageBlock packageBlock:listPackages()){
|
||||
EntryGroup entryGroup = packageBlock.getEntryGroup(resourceId);
|
||||
if(entryGroup!=null){
|
||||
return entryGroup;
|
||||
}
|
||||
entryGroup = packageBlock.getEntryGroup(aliasId);
|
||||
if(entryGroup!=null){
|
||||
return entryGroup;
|
||||
}
|
||||
}
|
||||
for(TableBlock tableBlock:getFrameWorks()){
|
||||
EntryGroup entryGroup= tableBlock.search(resourceId);
|
||||
EntryGroup entryGroup = tableBlock.search(resourceId);
|
||||
if(entryGroup!=null){
|
||||
return entryGroup;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
public int searchResourceIdAlias(int resourceId){
|
||||
for(PackageBlock packageBlock:listPackages()){
|
||||
StagedAliasEntry stagedAliasEntry =
|
||||
packageBlock.searchByStagedResId(resourceId);
|
||||
if(stagedAliasEntry!=null){
|
||||
return stagedAliasEntry.getFinalizedResId();
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
public Set<TableBlock> getFrameWorks(){
|
||||
return mFrameWorks;
|
||||
}
|
||||
|
@ -20,6 +20,7 @@ import com.reandroid.lib.arsc.chunk.TableBlock;
|
||||
import com.reandroid.lib.arsc.group.EntryGroup;
|
||||
import com.reandroid.lib.arsc.item.TableString;
|
||||
import com.reandroid.lib.arsc.value.EntryBlock;
|
||||
import com.reandroid.lib.arsc.value.StagedAliasEntry;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@ -90,34 +91,19 @@ public class TableEntryStore implements EntryStore{
|
||||
}
|
||||
@Override
|
||||
public List<EntryGroup> getEntryGroups(int resourceId) {
|
||||
List<EntryGroup> results=new ArrayList<>();
|
||||
int pkgId = (resourceId>>24)&0xff;
|
||||
Set<PackageBlock> packageBlockSet = mPackagesMap.get(pkgId);
|
||||
if(packageBlockSet==null){
|
||||
List<EntryGroup> results = searchEntryGroups(resourceId);
|
||||
if(results.size()>0){
|
||||
return results;
|
||||
}
|
||||
for(PackageBlock packageBlock: packageBlockSet){
|
||||
EntryGroup group=packageBlock.getEntryGroup(resourceId);
|
||||
if(group!=null){
|
||||
results.add(group);
|
||||
}
|
||||
}
|
||||
return results;
|
||||
return searchEntryGroups(searchIdAlias(resourceId));
|
||||
}
|
||||
@Override
|
||||
public EntryGroup getEntryGroup(int resourceId) {
|
||||
int pkgId = (resourceId>>24)&0xff;
|
||||
Set<PackageBlock> packageBlockSet = mPackagesMap.get(pkgId);
|
||||
if(packageBlockSet==null){
|
||||
return null;
|
||||
EntryGroup entryGroup = searchEntryGroup(resourceId);
|
||||
if(entryGroup!=null){
|
||||
return entryGroup;
|
||||
}
|
||||
for(PackageBlock packageBlock: packageBlockSet){
|
||||
EntryGroup group=packageBlock.getEntryGroup(resourceId);
|
||||
if(group!=null && group.pickOne()!=null){
|
||||
return group;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
return searchEntryGroup(searchIdAlias(resourceId));
|
||||
}
|
||||
@Override
|
||||
public List<PackageBlock> getPackageBlocks(byte packageId) {
|
||||
@ -140,4 +126,50 @@ public class TableEntryStore implements EntryStore{
|
||||
}
|
||||
return results;
|
||||
}
|
||||
private List<EntryGroup> searchEntryGroups(int resourceId) {
|
||||
if(resourceId==0){
|
||||
return new ArrayList<>();
|
||||
}
|
||||
List<EntryGroup> results=new ArrayList<>();
|
||||
int pkgId = (resourceId>>24)&0xff;
|
||||
Set<PackageBlock> packageBlockSet = mPackagesMap.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 searchEntryGroup(int resourceId) {
|
||||
if(resourceId==0){
|
||||
return null;
|
||||
}
|
||||
int packageId = (resourceId>>24)&0xff;
|
||||
Set<PackageBlock> packageBlockSet = mPackagesMap.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 searchIdAlias(int resourceId) {
|
||||
for(Set<PackageBlock> packageBlockSet : mPackagesMap.values()){
|
||||
for(PackageBlock packageBlock:packageBlockSet){
|
||||
StagedAliasEntry stagedAliasEntry = packageBlock.searchByStagedResId(resourceId);
|
||||
if(stagedAliasEntry!=null){
|
||||
return stagedAliasEntry.getFinalizedResId();
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user