simplify reference check

This commit is contained in:
REAndroid 2023-02-17 08:41:47 -05:00
parent 2f75149bae
commit 67585ca19c
10 changed files with 19 additions and 27 deletions

View File

@ -180,7 +180,7 @@ public class ApkModule {
continue; continue;
} }
for(TableString tableString:groupTableString.listItems()){ for(TableString tableString:groupTableString.listItems()){
List<Entry> entryList = tableString.listReferencedEntries(); List<Entry> entryList = tableString.listReferencedResValueEntries();
if(entryList.size()==0){ if(entryList.size()==0){
continue; continue;
} }

View File

@ -58,7 +58,7 @@ public abstract class StringArray<T extends StringItem> extends OffsetBlockArray
public List<T> listUnusedStrings(){ public List<T> listUnusedStrings(){
List<T> results=new ArrayList<>(); List<T> results=new ArrayList<>();
for(T item:listItems()){ for(T item:listItems()){
if(item.getReferencedList().size()==0){ if(!item.hasReference()){
results.add(item); results.add(item);
} }
} }

View File

@ -38,14 +38,14 @@ public class ResIdBuilder implements Comparator<Integer> {
xmlIDArray.ensureSize(size); xmlIDArray.ensureSize(size);
for(int i=0;i<size;i++){ for(int i=0;i<size;i++){
ResXmlString xmlString = xmlStringsArray.get(i); ResXmlString xmlString = xmlStringsArray.get(i);
if(xmlString.getReferencedList().size()>0){ if(xmlString.hasReference()){
ResXmlString replaceXmlString=new ResXmlString(xmlString.isUtf8(), xmlString.get()); ResXmlString replaceXmlString=new ResXmlString(xmlString.isUtf8(), xmlString.get());
xmlStringsArray.setItem(i, replaceXmlString); xmlStringsArray.setItem(i, replaceXmlString);
xmlStringsArray.add(xmlString); xmlStringsArray.add(xmlString);
xmlString=replaceXmlString; xmlString=replaceXmlString;
} }
ResXmlID xmlID = xmlIDArray.get(i); ResXmlID xmlID = xmlIDArray.get(i);
if(xmlID.getReferencedList().size()>0){ if(xmlID.hasReference()){
ResXmlID replaceXmlId = new ResXmlID(xmlID.get()); ResXmlID replaceXmlId = new ResXmlID(xmlID.get());
xmlIDArray.setItem(i, replaceXmlId); xmlIDArray.setItem(i, replaceXmlId);
xmlIDArray.add(xmlID); xmlIDArray.add(xmlID);

View File

@ -197,7 +197,7 @@
} }
@Override @Override
protected void onUnlinkDataString(StringItem stringItem){ protected void onUnlinkDataString(StringItem stringItem){
if(stringItem.getReferencedList().size()==0){ if(!stringItem.hasReference()){
stringItem.set(""); stringItem.set("");
} }
} }
@ -277,7 +277,7 @@
return; return;
} }
stringItem.removeReference(reference); stringItem.removeReference(reference);
if(stringItem.getReferencedList().size()==0){ if(!stringItem.hasReference()){
stringItem.set(""); stringItem.set("");
} }
} }

View File

@ -42,6 +42,9 @@ public class ResXmlID extends IntegerItem {
mReferencedList.add(ref); mReferencedList.add(ref);
} }
} }
public boolean hasReference(){
return mReferencedList.size()>0;
}
public int getReferenceCount(){ public int getReferenceCount(){
return mReferencedList.size(); return mReferencedList.size();
} }

View File

@ -15,7 +15,6 @@
*/ */
package com.reandroid.arsc.item; package com.reandroid.arsc.item;
import java.util.List;
public class ResXmlString extends StringItem { public class ResXmlString extends StringItem {
public ResXmlString(boolean utf8) { public ResXmlString(boolean utf8) {
@ -25,9 +24,4 @@ public class ResXmlString extends StringItem {
this(utf8); this(utf8);
set(value); set(value);
} }
@Override
public String toString(){
List<ReferenceItem> refList = getReferencedList();
return "USED BY="+refList.size()+"{"+super.toString()+"}";
}
} }

View File

@ -15,8 +15,6 @@
*/ */
package com.reandroid.arsc.item; package com.reandroid.arsc.item;
import java.util.List;
public class SpecString extends StringItem { public class SpecString extends StringItem {
public SpecString(boolean utf8) { public SpecString(boolean utf8) {
super(utf8); super(utf8);
@ -26,9 +24,4 @@ package com.reandroid.arsc.item;
// Spec (resource name) don't have style unless to obfuscate/confuse other decompilers // Spec (resource name) don't have style unless to obfuscate/confuse other decompilers
return null; return null;
} }
@Override
public String toString(){
List<ReferenceItem> refList = getReferencedList();
return "USED BY="+refList.size()+"{"+super.toString()+"}";
}
} }

View File

@ -50,6 +50,9 @@ public class StringItem extends BlockItem implements JSONConvert<JSONObject> {
public void removeAllReference(){ public void removeAllReference(){
mReferencedList.clear(); mReferencedList.clear();
} }
public boolean hasReference(){
return mReferencedList.size()>0;
}
public List<ReferenceItem> getReferencedList(){ public List<ReferenceItem> getReferencedList(){
return mReferencedList; return mReferencedList;
} }
@ -250,11 +253,11 @@ public class StringItem extends BlockItem implements JSONConvert<JSONObject> {
} }
@Override @Override
public String toString(){ public String toString(){
String str=get(); String str=getHtml();
if(str==null){ if(str==null){
return "NULL"; return "NULL";
} }
return str; return "USED BY="+getReferencedList().size()+"{"+str+"}";
} }
private static int[] decodeUtf8StringByteLength(byte[] lengthBytes) { private static int[] decodeUtf8StringByteLength(byte[] lengthBytes) {

View File

@ -28,7 +28,7 @@ public class TableString extends StringItem {
public TableString(boolean utf8) { public TableString(boolean utf8) {
super(utf8); super(utf8);
} }
public List<Entry> listReferencedEntries(){ public List<Entry> listReferencedResValueEntries(){
List<Entry> results=new ArrayList<>(); List<Entry> results=new ArrayList<>();
for(ReferenceItem ref:getReferencedList()){ for(ReferenceItem ref:getReferencedList()){
if(!(ref instanceof ReferenceBlock)){ if(!(ref instanceof ReferenceBlock)){
@ -46,9 +46,4 @@ public class TableString extends StringItem {
} }
return results; return results;
} }
@Override
public String toString(){
List<ReferenceItem> refList = getReferencedList();
return "USED BY="+refList.size()+"{"+super.toString()+"}";
}
} }

View File

@ -35,4 +35,8 @@ package com.reandroid.arsc.item;
// Type don't have style unless to obfuscate/confuse other decompilers // Type don't have style unless to obfuscate/confuse other decompilers
return null; return null;
} }
@Override
public String toString(){
return String.format("0x%02x", getId())+':'+get();
}
} }