From 490deb59a31cf78749b5a007e13d133898a30e1a Mon Sep 17 00:00:00 2001 From: REAndroid Date: Wed, 8 Mar 2023 15:05:44 -0500 Subject: [PATCH] preserve Spec flags during decompile xml --- .../arsc/array/SpecTypePairArray.java | 26 ++++++++++--------- .../reandroid/arsc/array/TypeBlockArray.java | 4 ++- .../reandroid/arsc/chunk/PackageBlock.java | 6 ++--- .../arsc/container/SpecTypePair.java | 15 +++++++---- 4 files changed, 29 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/reandroid/arsc/array/SpecTypePairArray.java b/src/main/java/com/reandroid/arsc/array/SpecTypePairArray.java index bb801f4..d3de0cc 100755 --- a/src/main/java/com/reandroid/arsc/array/SpecTypePairArray.java +++ b/src/main/java/com/reandroid/arsc/array/SpecTypePairArray.java @@ -214,21 +214,10 @@ public class SpecTypePairArray extends BlockArray } @Override public JSONArray toJson() { - JSONArray jsonArray=new JSONArray(); - int i=0; - for(SpecTypePair specTypePair:listItems()){ - JSONObject jsonObject = specTypePair.toJson(); - if(jsonObject==null){ - continue; - } - jsonArray.put(i, jsonObject); - i++; - } - return jsonArray; + return toJson(false); } @Override public void fromJson(JSONArray json) { - clearChildes(); if(json==null){ return; } @@ -241,6 +230,19 @@ public class SpecTypePairArray extends BlockArray specTypePair.fromJson(jsonObject); } } + public JSONArray toJson(boolean specsOnly) { + JSONArray jsonArray=new JSONArray(); + int i=0; + for(SpecTypePair specTypePair:listItems()){ + JSONObject jsonObject = specTypePair.toJson(specsOnly); + if(jsonObject==null){ + continue; + } + jsonArray.put(i, jsonObject); + i++; + } + return jsonArray; + } public void merge(SpecTypePairArray pairArray){ if(pairArray==null || pairArray==this){ return; diff --git a/src/main/java/com/reandroid/arsc/array/TypeBlockArray.java b/src/main/java/com/reandroid/arsc/array/TypeBlockArray.java index 07077cf..3a0cfbe 100755 --- a/src/main/java/com/reandroid/arsc/array/TypeBlockArray.java +++ b/src/main/java/com/reandroid/arsc/array/TypeBlockArray.java @@ -294,8 +294,10 @@ public class TypeBlockArray extends BlockArray } @Override public void fromJson(JSONArray json) { + if(json == null){ + return; + } int length= json.length(); - clearChildes(); ensureSize(length); for (int i=0;i0){ jsonObject.put(NAME_libraries,libraryInfoArray.toJson()); diff --git a/src/main/java/com/reandroid/arsc/container/SpecTypePair.java b/src/main/java/com/reandroid/arsc/container/SpecTypePair.java index b922aae..0a1facc 100755 --- a/src/main/java/com/reandroid/arsc/container/SpecTypePair.java +++ b/src/main/java/com/reandroid/arsc/container/SpecTypePair.java @@ -198,15 +198,20 @@ public class SpecTypePair extends BlockContainer @Override public JSONObject toJson() { - JSONObject jsonObject=new JSONObject(); - jsonObject.put(SpecBlock.NAME_spec, getSpecBlock().toJson()); - jsonObject.put(NAME_types, getTypeBlockArray().toJson()); - return jsonObject; + return toJson(false); } @Override public void fromJson(JSONObject json) { getSpecBlock().fromJson(json.getJSONObject(SpecBlock.NAME_spec)); - getTypeBlockArray().fromJson(json.getJSONArray(NAME_types)); + getTypeBlockArray().fromJson(json.optJSONArray(NAME_types)); + } + public JSONObject toJson(boolean specOnly) { + JSONObject jsonObject=new JSONObject(); + jsonObject.put(SpecBlock.NAME_spec, getSpecBlock().toJson()); + if(!specOnly){ + jsonObject.put(NAME_types, getTypeBlockArray().toJson()); + } + return jsonObject; } public void merge(SpecTypePair typePair){ if(typePair==null||typePair==this){