mirror of
https://github.com/revanced/ARSCLib.git
synced 2025-05-25 02:52:10 +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(){
|
public Collection<EntryGroup> listEntryGroup(){
|
||||||
return getEntriesGroupMap().values();
|
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){
|
public void updateEntry(EntryBlock entryBlock){
|
||||||
if(entryBlock==null||entryBlock.isNull()){
|
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.io.BlockReader;
|
||||||
import com.reandroid.lib.arsc.item.IntegerItem;
|
import com.reandroid.lib.arsc.item.IntegerItem;
|
||||||
import com.reandroid.lib.arsc.pool.TableStringPool;
|
import com.reandroid.lib.arsc.pool.TableStringPool;
|
||||||
|
import com.reandroid.lib.arsc.value.StagedAliasEntry;
|
||||||
import com.reandroid.lib.common.Frameworks;
|
import com.reandroid.lib.common.Frameworks;
|
||||||
import com.reandroid.lib.json.JSONConvert;
|
import com.reandroid.lib.json.JSONConvert;
|
||||||
import com.reandroid.lib.json.JSONArray;
|
import com.reandroid.lib.json.JSONArray;
|
||||||
@ -111,14 +112,16 @@ public class TableBlock extends BaseChunk implements JSONConvert<JSONObject> {
|
|||||||
if(resourceId==0){
|
if(resourceId==0){
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
int pkgId=resourceId>>24;
|
int aliasId = searchResourceIdAlias(resourceId);
|
||||||
pkgId=pkgId&0xff;
|
for(PackageBlock packageBlock:listPackages()){
|
||||||
PackageBlock packageBlock=getPackageBlockById(pkgId);
|
|
||||||
if(packageBlock!=null){
|
|
||||||
EntryGroup entryGroup = packageBlock.getEntryGroup(resourceId);
|
EntryGroup entryGroup = packageBlock.getEntryGroup(resourceId);
|
||||||
if(entryGroup!=null){
|
if(entryGroup!=null){
|
||||||
return entryGroup;
|
return entryGroup;
|
||||||
}
|
}
|
||||||
|
entryGroup = packageBlock.getEntryGroup(aliasId);
|
||||||
|
if(entryGroup!=null){
|
||||||
|
return entryGroup;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for(TableBlock tableBlock:getFrameWorks()){
|
for(TableBlock tableBlock:getFrameWorks()){
|
||||||
EntryGroup entryGroup = tableBlock.search(resourceId);
|
EntryGroup entryGroup = tableBlock.search(resourceId);
|
||||||
@ -128,6 +131,16 @@ public class TableBlock extends BaseChunk implements JSONConvert<JSONObject> {
|
|||||||
}
|
}
|
||||||
return null;
|
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(){
|
public Set<TableBlock> getFrameWorks(){
|
||||||
return mFrameWorks;
|
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.group.EntryGroup;
|
||||||
import com.reandroid.lib.arsc.item.TableString;
|
import com.reandroid.lib.arsc.item.TableString;
|
||||||
import com.reandroid.lib.arsc.value.EntryBlock;
|
import com.reandroid.lib.arsc.value.EntryBlock;
|
||||||
|
import com.reandroid.lib.arsc.value.StagedAliasEntry;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@ -90,34 +91,19 @@ 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 = searchEntryGroups(resourceId);
|
||||||
int pkgId = (resourceId>>24)&0xff;
|
if(results.size()>0){
|
||||||
Set<PackageBlock> packageBlockSet = mPackagesMap.get(pkgId);
|
|
||||||
if(packageBlockSet==null){
|
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
for(PackageBlock packageBlock: packageBlockSet){
|
return searchEntryGroups(searchIdAlias(resourceId));
|
||||||
EntryGroup group=packageBlock.getEntryGroup(resourceId);
|
|
||||||
if(group!=null){
|
|
||||||
results.add(group);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return results;
|
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public EntryGroup getEntryGroup(int resourceId) {
|
public EntryGroup getEntryGroup(int resourceId) {
|
||||||
int pkgId = (resourceId>>24)&0xff;
|
EntryGroup entryGroup = searchEntryGroup(resourceId);
|
||||||
Set<PackageBlock> packageBlockSet = mPackagesMap.get(pkgId);
|
if(entryGroup!=null){
|
||||||
if(packageBlockSet==null){
|
return entryGroup;
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
for(PackageBlock packageBlock: packageBlockSet){
|
return searchEntryGroup(searchIdAlias(resourceId));
|
||||||
EntryGroup group=packageBlock.getEntryGroup(resourceId);
|
|
||||||
if(group!=null && group.pickOne()!=null){
|
|
||||||
return group;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public List<PackageBlock> getPackageBlocks(byte packageId) {
|
public List<PackageBlock> getPackageBlocks(byte packageId) {
|
||||||
@ -140,4 +126,50 @@ public class TableEntryStore implements EntryStore{
|
|||||||
}
|
}
|
||||||
return results;
|
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