mirror of
https://github.com/revanced/ARSCLib.git
synced 2025-04-30 06:14:25 +02:00
keep only type attr & id for framework optimization
This commit is contained in:
parent
a07a800470
commit
4ba43a6b5e
@ -174,6 +174,9 @@
|
||||
return frameworkTable;
|
||||
}
|
||||
public void optimize(){
|
||||
optimize(true);
|
||||
}
|
||||
public void optimize(boolean keepOnlyAttrsAndId){
|
||||
synchronized (mLock){
|
||||
if(mOptimizing){
|
||||
return;
|
||||
@ -187,7 +190,7 @@
|
||||
mOptimizing = false;
|
||||
return;
|
||||
}
|
||||
FrameworkOptimizer optimizer = new FrameworkOptimizer(this);
|
||||
FrameworkOptimizer optimizer = new FrameworkOptimizer(this, keepOnlyAttrsAndId);
|
||||
optimizer.optimize();
|
||||
mOptimizing = false;
|
||||
}
|
||||
|
@ -35,11 +35,12 @@ public class FrameworkOptimizer {
|
||||
private final ApkModule frameworkApk;
|
||||
private APKLogger apkLogger;
|
||||
private boolean mOptimizing;
|
||||
public FrameworkOptimizer(ApkModule frameworkApk){
|
||||
private final boolean keepOnlyAttrsAndId;
|
||||
public FrameworkOptimizer(ApkModule frameworkApk, boolean keepOnlyAttrsAndId){
|
||||
this.frameworkApk = frameworkApk;
|
||||
this.apkLogger = frameworkApk.getApkLogger();
|
||||
this.keepOnlyAttrsAndId = keepOnlyAttrsAndId;
|
||||
}
|
||||
|
||||
public void optimize(){
|
||||
if(mOptimizing){
|
||||
return;
|
||||
@ -91,7 +92,7 @@ public class FrameworkOptimizer {
|
||||
backupManifestValue(manifestBlock, table);
|
||||
}
|
||||
logMessage("Optimizing table ...");
|
||||
table.optimize(name, version);
|
||||
table.optimize(name, version, keepOnlyAttrsAndId);
|
||||
long diff=prev - table.countBytes();
|
||||
long percent=(diff*100L)/prev;
|
||||
logMessage("Table size reduced by: "+percent+" %");
|
||||
|
@ -174,9 +174,21 @@ public class FrameworkTable extends TableBlock {
|
||||
}
|
||||
}
|
||||
|
||||
public void optimize(String name, int version){
|
||||
public void optimize(String name, int version, boolean keepOnlyAttrsAndId){
|
||||
mOptimizeChecked = true;
|
||||
mOptimized = false;
|
||||
if(keepOnlyAttrsAndId){
|
||||
removeTypesExceptAttrId();
|
||||
}else {
|
||||
optimizeEntries();
|
||||
}
|
||||
optimizeTableString();
|
||||
writeVersionCode(version);
|
||||
mOptimizeChecked = false;
|
||||
setFrameworkName(name);
|
||||
refresh();
|
||||
}
|
||||
private void optimizeEntries(){
|
||||
Map<Integer, EntryGroup> groupMap=scanAllEntryGroups();
|
||||
for(EntryGroup group:groupMap.values()){
|
||||
List<Entry> entryList = getEntriesToRemove(group);
|
||||
@ -189,11 +201,29 @@ public class FrameworkTable extends TableBlock {
|
||||
pkg.removeEmpty();
|
||||
pkg.refresh();
|
||||
}
|
||||
optimizeTableString();
|
||||
writeVersionCode(version);
|
||||
mOptimizeChecked = false;
|
||||
setFrameworkName(name);
|
||||
refresh();
|
||||
}
|
||||
private void removeTypesExceptAttrId(){
|
||||
for(PackageBlock pkg:listPackages()){
|
||||
SpecTypePairArray pairArray = pkg.getSpecTypePairArray();
|
||||
List<SpecTypePair> specTypePairList =
|
||||
new ArrayList<>(pairArray.listItems());
|
||||
for(SpecTypePair specTypePair:specTypePairList){
|
||||
String name=specTypePair.getTypeName();
|
||||
if(shouldRemoveType(name)){
|
||||
specTypePair.destroy();
|
||||
pairArray.remove(specTypePair);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private boolean shouldRemoveType(String typeName){
|
||||
if(typeName==null){
|
||||
return true;
|
||||
}
|
||||
if("id".equals(typeName)){
|
||||
return false;
|
||||
}
|
||||
return !typeName.contains("attr");
|
||||
}
|
||||
private void removeEmptyBlocks(PackageBlock pkg){
|
||||
SpecTypePairArray specTypePairArray = pkg.getSpecTypePairArray();
|
||||
|
Loading…
x
Reference in New Issue
Block a user