mirror of
https://github.com/revanced/ARSCLib.git
synced 2025-05-01 06:34:26 +02:00
implement json conversion on StagedAlias
This commit is contained in:
parent
33817b36d8
commit
e841b12f03
@ -21,10 +21,13 @@
|
|||||||
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.value.StagedAliasEntry;
|
import com.reandroid.lib.arsc.value.StagedAliasEntry;
|
||||||
|
import com.reandroid.lib.json.JSONArray;
|
||||||
|
import com.reandroid.lib.json.JSONConvert;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class StagedAliasEntryArray extends BlockArray<StagedAliasEntry> implements BlockLoad {
|
public class StagedAliasEntryArray extends BlockArray<StagedAliasEntry>
|
||||||
|
implements BlockLoad, JSONConvert<JSONArray> {
|
||||||
private final IntegerItem count;
|
private final IntegerItem count;
|
||||||
public StagedAliasEntryArray(IntegerItem count){
|
public StagedAliasEntryArray(IntegerItem count){
|
||||||
super();
|
super();
|
||||||
@ -57,4 +60,29 @@
|
|||||||
private void updateCount(){
|
private void updateCount(){
|
||||||
this.count.set(childesCount());
|
this.count.set(childesCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JSONArray toJson() {
|
||||||
|
StagedAliasEntry[] childes=getChildes();
|
||||||
|
if(childes==null||childes.length==0){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
JSONArray jsonArray=new JSONArray();
|
||||||
|
for(int i=0;i<childes.length;i++){
|
||||||
|
jsonArray.put(i, childes[i].toJson());
|
||||||
|
}
|
||||||
|
return jsonArray;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void fromJson(JSONArray json) {
|
||||||
|
clearChildes();
|
||||||
|
if(json==null){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int length = json.length();
|
||||||
|
setChildesCount(length);
|
||||||
|
for(int i=0;i<length;i++){
|
||||||
|
get(i).fromJson(json.getJSONObject(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@ package com.reandroid.lib.arsc.chunk;
|
|||||||
import com.reandroid.lib.arsc.pool.TypeStringPool;
|
import com.reandroid.lib.arsc.pool.TypeStringPool;
|
||||||
import com.reandroid.lib.arsc.value.EntryBlock;
|
import com.reandroid.lib.arsc.value.EntryBlock;
|
||||||
import com.reandroid.lib.arsc.value.LibraryInfo;
|
import com.reandroid.lib.arsc.value.LibraryInfo;
|
||||||
|
import com.reandroid.lib.json.JSONArray;
|
||||||
import com.reandroid.lib.json.JSONConvert;
|
import com.reandroid.lib.json.JSONConvert;
|
||||||
import com.reandroid.lib.json.JSONObject;
|
import com.reandroid.lib.json.JSONObject;
|
||||||
|
|
||||||
@ -289,11 +290,11 @@ package com.reandroid.lib.arsc.chunk;
|
|||||||
mSpecStringPoolCount.set(mSpecStringPool.countStrings());
|
mSpecStringPoolCount.set(mSpecStringPool.countStrings());
|
||||||
}
|
}
|
||||||
private void refreshTypeIdOffset(){
|
private void refreshTypeIdOffset(){
|
||||||
int smallestId=getSpecTypePairArray().getSmallestTypeId();
|
// TODO: find solution
|
||||||
if(smallestId>0){
|
//int largest=getSpecTypePairArray().getHighestTypeId();
|
||||||
smallestId=smallestId-1;
|
//int count=getTypeStringPool().countStrings();
|
||||||
}
|
//mTypeIdOffset.set(count-largest);
|
||||||
mTypeIdOffset.set(smallestId);
|
mTypeIdOffset.set(0);
|
||||||
}
|
}
|
||||||
public void onEntryAdded(EntryBlock entryBlock){
|
public void onEntryAdded(EntryBlock entryBlock){
|
||||||
updateEntry(entryBlock);
|
updateEntry(entryBlock);
|
||||||
@ -321,6 +322,12 @@ package com.reandroid.lib.arsc.chunk;
|
|||||||
if(libraryInfoArray.childesCount()>0){
|
if(libraryInfoArray.childesCount()>0){
|
||||||
jsonObject.put(NAME_libraries,libraryInfoArray.toJson());
|
jsonObject.put(NAME_libraries,libraryInfoArray.toJson());
|
||||||
}
|
}
|
||||||
|
StagedAlias stagedAlias =
|
||||||
|
StagedAlias.mergeAll(getStagedAliasList().getChildes());
|
||||||
|
if(stagedAlias!=null){
|
||||||
|
jsonObject.put(NAME_staged_aliases,
|
||||||
|
stagedAlias.getStagedAliasEntryArray().toJson());
|
||||||
|
}
|
||||||
return jsonObject;
|
return jsonObject;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
@ -330,6 +337,12 @@ package com.reandroid.lib.arsc.chunk;
|
|||||||
getSpecTypePairArray().fromJson(json.getJSONArray(NAME_specs));
|
getSpecTypePairArray().fromJson(json.getJSONArray(NAME_specs));
|
||||||
LibraryInfoArray libraryInfoArray = mLibraryBlock.getLibraryInfoArray();
|
LibraryInfoArray libraryInfoArray = mLibraryBlock.getLibraryInfoArray();
|
||||||
libraryInfoArray.fromJson(json.optJSONArray(NAME_libraries));
|
libraryInfoArray.fromJson(json.optJSONArray(NAME_libraries));
|
||||||
|
if(json.has(NAME_staged_aliases)){
|
||||||
|
StagedAlias stagedAlias=new StagedAlias();
|
||||||
|
stagedAlias.getStagedAliasEntryArray()
|
||||||
|
.fromJson(json.getJSONArray(NAME_staged_aliases));
|
||||||
|
mStagedAliasList.add(stagedAlias);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public void merge(PackageBlock packageBlock){
|
public void merge(PackageBlock packageBlock){
|
||||||
if(packageBlock==null||packageBlock==this){
|
if(packageBlock==null||packageBlock==this){
|
||||||
@ -376,4 +389,5 @@ package com.reandroid.lib.arsc.chunk;
|
|||||||
public static final String JSON_FILE_NAME = "package.json";
|
public static final String JSON_FILE_NAME = "package.json";
|
||||||
private static final String NAME_specs="specs";
|
private static final String NAME_specs="specs";
|
||||||
private static final String NAME_libraries="libraries";
|
private static final String NAME_libraries="libraries";
|
||||||
|
private static final String NAME_staged_aliases="staged_aliases";
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
stagedAliasEntryArray = new StagedAliasEntryArray(count);
|
stagedAliasEntryArray = new StagedAliasEntryArray(count);
|
||||||
addChild(stagedAliasEntryArray);
|
addChild(stagedAliasEntryArray);
|
||||||
}
|
}
|
||||||
public void addStagedAliasEntries(StagedAlias stagedAlias){
|
public void merge(StagedAlias stagedAlias){
|
||||||
if(stagedAlias==null||stagedAlias==this){
|
if(stagedAlias==null||stagedAlias==this){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -58,4 +58,21 @@
|
|||||||
return getClass().getSimpleName()+
|
return getClass().getSimpleName()+
|
||||||
": count="+getStagedAliasEntryCount();
|
": count="+getStagedAliasEntryCount();
|
||||||
}
|
}
|
||||||
|
public static StagedAlias mergeAll(Collection<StagedAlias> stagedAliasList){
|
||||||
|
if(stagedAliasList.size()==0){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
StagedAlias result=new StagedAlias();
|
||||||
|
for(StagedAlias stagedAlias:stagedAliasList){
|
||||||
|
if(stagedAlias.isNull()){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
result.merge(stagedAlias);
|
||||||
|
}
|
||||||
|
if(!result.isNull()){
|
||||||
|
result.refresh();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package com.reandroid.lib.arsc.value;
|
package com.reandroid.lib.arsc.value;
|
||||||
|
|
||||||
import com.reandroid.lib.arsc.item.ByteArray;
|
import com.reandroid.lib.arsc.item.ByteArray;
|
||||||
|
import com.reandroid.lib.json.JSONConvert;
|
||||||
|
import com.reandroid.lib.json.JSONObject;
|
||||||
|
|
||||||
public class StagedAliasEntry extends ByteArray {
|
public class StagedAliasEntry extends ByteArray implements JSONConvert<JSONObject> {
|
||||||
public StagedAliasEntry(){
|
public StagedAliasEntry(){
|
||||||
super(8);
|
super(8);
|
||||||
}
|
}
|
||||||
@ -23,4 +25,18 @@ public class StagedAliasEntry extends ByteArray {
|
|||||||
return "stagedResId="+String.format("0x%08x",getStagedResId())
|
return "stagedResId="+String.format("0x%08x",getStagedResId())
|
||||||
+", finalizedResId="+String.format("0x%08x",getFinalizedResId());
|
+", finalizedResId="+String.format("0x%08x",getFinalizedResId());
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
public JSONObject toJson() {
|
||||||
|
JSONObject jsonObject=new JSONObject();
|
||||||
|
jsonObject.put(NAME_staged_resource_id, getStagedResId());
|
||||||
|
jsonObject.put(NAME_finalized_resource_id, getFinalizedResId());
|
||||||
|
return jsonObject;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void fromJson(JSONObject json) {
|
||||||
|
setStagedResId(json.getInt(NAME_staged_resource_id));
|
||||||
|
setFinalizedResId(json.getInt(NAME_finalized_resource_id));
|
||||||
|
}
|
||||||
|
public static final String NAME_staged_resource_id = "staged_resource_id";
|
||||||
|
public static final String NAME_finalized_resource_id = "finalized_resource_id";
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user