Skip to content

Commit

Permalink
[major] remove redundant classes
Browse files Browse the repository at this point in the history
  • Loading branch information
REAndroid committed Jun 18, 2023
1 parent 7d526a2 commit 09af9d0
Show file tree
Hide file tree
Showing 106 changed files with 2,777 additions and 7,048 deletions.
26 changes: 0 additions & 26 deletions src/main/java/com/reandroid/apk/ApkJsonEncoder.java

This file was deleted.

25 changes: 12 additions & 13 deletions src/main/java/com/reandroid/apk/ApkModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
import com.reandroid.arsc.chunk.xml.AndroidManifestBlock;
import com.reandroid.arsc.chunk.xml.ResXmlDocument;
import com.reandroid.arsc.container.SpecTypePair;
import com.reandroid.arsc.coder.Decoder;
import com.reandroid.arsc.group.StringGroup;
import com.reandroid.arsc.item.TableString;
import com.reandroid.arsc.pool.TableStringPool;
Expand All @@ -39,7 +38,6 @@
import com.reandroid.identifiers.PackageIdentifier;
import com.reandroid.xml.XMLDocument;
import com.reandroid.xml.XMLElement;
import com.reandroid.xml.XMLException;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

Expand All @@ -59,7 +57,6 @@ public class ApkModule implements ApkFile, Closeable {
private InputSource mManifestOriginalSource;
private final UncompressedFiles mUncompressedFiles;
private APKLogger apkLogger;
private Decoder mDecoder;
private ApkType mApkType;
private ApkSignatureBlock apkSignatureBlock;
private Integer preferredFramework;
Expand Down Expand Up @@ -438,11 +435,17 @@ public List<Entry> removeResFiles(int resourceId, ResConfig resConfig) {
}
return results;
}
public XMLDocument decodeXMLFile(String path) throws IOException, XMLException {
public XMLDocument decodeXMLFile(String path) throws IOException {
ResXmlDocument resXmlDocument = loadResXmlDocument(path);
AndroidManifestBlock manifestBlock = getAndroidManifestBlock();
int pkgId = manifestBlock.guessCurrentPackageId();
return resXmlDocument.decodeToXml(getTableBlock(), pkgId);
if(pkgId != 0 && hasTableBlock()){
PackageBlock packageBlock = getTableBlock().pickOne(pkgId);
if(packageBlock != null){
resXmlDocument.setPackageBlock(packageBlock);
}
}
return resXmlDocument.decodeToXml();
}
public List<DexFileInputSource> listDexFiles(){
List<DexFileInputSource> results=new ArrayList<>();
Expand Down Expand Up @@ -801,16 +804,12 @@ public ResXmlDocument loadResXmlDocument(InputSource inputSource) throws IOExcep
ResXmlDocument resXmlDocument = new ResXmlDocument();
resXmlDocument.setApkFile(this);
resXmlDocument.readBytes(inputSource.openStream());
TableBlock tableBlock = getTableBlock();
if(tableBlock != null){
resXmlDocument.setPackageBlock(tableBlock.pickOne());
}
return resXmlDocument;
}
@Override
public Decoder getDecoder(){
return mDecoder;
}
@Override
public void setDecoder(Decoder decoder){
this.mDecoder = decoder;
}
public ApkType getApkType(){
if(mApkType!=null){
return mApkType;
Expand Down
35 changes: 21 additions & 14 deletions src/main/java/com/reandroid/apk/ApkModuleXmlDecoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ private void decodeResXml(File mainDirectory, ResFile resFile)
InputSource inputSource = resFile.getInputSource();

logVerbose(inputSource.getAlias());
serializeXml(packageBlock.getId(), resFile.getInputSource(), file);
serializeXml(packageBlock, resFile.getInputSource(), file);

if(!keepResPath()){
addDecodedEntry(entry);
Expand All @@ -156,7 +156,7 @@ private File toDecodeResFile(File mainDirectory, ResFile resFile, PackageBlock p
private ResXmlDocumentSerializer getDocumentSerializer(){
if(documentSerializer == null){
documentSerializer = new ResXmlDocumentSerializer(getApkModule());
documentSerializer.setValidateXmlNamespace(true);
documentSerializer.setFixAttributesNamespace(true);
}
return documentSerializer;
}
Expand Down Expand Up @@ -216,8 +216,16 @@ private void decodeAndroidManifestXml(File mainDirectory)
AndroidManifestBlock manifestBlock = getApkModule().getAndroidManifestBlock();
File file = new File(mainDirectory, AndroidManifestBlock.FILE_NAME);
logMessage("Decoding: " + file.getName());
int currentPackageId = manifestBlock.guessCurrentPackageId();
serializeXml(currentPackageId, manifestBlock, file);
PackageBlock packageBlock = manifestBlock.getPackageBlock();
if(packageBlock == null){
int packageId = manifestBlock.guessCurrentPackageId();
TableBlock tableBlock = getApkModule().getTableBlock();
packageBlock = tableBlock.pickOne(packageId);
if(packageBlock == null){
packageBlock = tableBlock.pickOne();
}
}
serializeXml(packageBlock, manifestBlock, file);
addDecodedPath(AndroidManifestBlock.FILE_NAME);
}
private void decodeAndroidManifestBin(File mainDirectory)
Expand All @@ -232,29 +240,28 @@ private void decodeAndroidManifestBin(File mainDirectory)
inputSource.write(file);
addDecodedPath(AndroidManifestBlock.FILE_NAME);
}
private void serializeXml(int currentPackageId, ResXmlDocument document, File outFile)
private void serializeXml(PackageBlock packageBlock, ResXmlDocument document, File outFile)
throws IOException {
XMLNamespaceValidator.validateNamespaces(document);
ResXmlDocumentSerializer serializer = getDocumentSerializer();
if(currentPackageId != 0){
serializer.getDecoder().setCurrentPackageId(currentPackageId);
if(packageBlock != null){
document.setPackageBlock(packageBlock);
serializer.setCurrentPackage(packageBlock);
}
document.autoSetAttributeNamespaces();
try {
serializer.write(document, outFile);
} catch (XmlPullParserException ex) {
throw new IOException("Error: "+outFile.getName(), ex);
}
}
private void serializeXml(int currentPackageId, InputSource inputSource, File outFile)
private void serializeXml(PackageBlock packageBlock, InputSource inputSource, File outFile)
throws IOException {
ResXmlDocumentSerializer serializer = getDocumentSerializer();
if(currentPackageId != 0){
serializer.getDecoder().setCurrentPackageId(currentPackageId);
}
serializer.setCurrentPackage(packageBlock);
try {
serializer.write(inputSource, outFile);
} catch (XmlPullParserException ex) {
throw new IOException("Error: "+outFile.getName(), ex);
throw new IOException("Error: " + outFile.getName(), ex);
}
}
private void addDecodedEntry(Entry entry){
Expand Down Expand Up @@ -298,7 +305,7 @@ private void decodeValues(File resDir, SpecTypePair specTypePair) throws IOExcep
}
private XMLEntryDecoderSerializer getEntrySerializer(){
if(this.entrySerializer == null){
this.entrySerializer = new XMLEntryDecoderSerializer(getApkModule().getTableBlock());
this.entrySerializer = new XMLEntryDecoderSerializer();
this.entrySerializer.setDecodedEntries(this);
}
return entrySerializer;
Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/reandroid/apk/ApkModuleXmlEncoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ private void encodeManifestXml(File mainDirectory) {
PackageBlock packageBlock = encodeMaterials.pickMainPackageBlock(tableBlock);
if(packageBlock != null){
encodeMaterials.setCurrentPackage(packageBlock);
tableBlock.setCurrentPackage(packageBlock);
}
XMLSource xmlSource =
new XMLFileSource(AndroidManifestBlock.FILE_NAME, file);
Expand Down
3 changes: 1 addition & 2 deletions src/main/java/com/reandroid/apk/FrameworkApk.java
Original file line number Diff line number Diff line change
Expand Up @@ -247,8 +247,7 @@ public static boolean isFramework(ApkModule apkModule) {
}
public static boolean isFramework(AndroidManifestBlock manifestBlock){
ResXmlElement root = manifestBlock.getManifestElement();
ResXmlAttribute attribute = root.getStartElement()
.searchAttributeByName(AndroidManifestBlock.NAME_coreApp);
ResXmlAttribute attribute = root.searchAttributeByName(AndroidManifestBlock.NAME_coreApp);
if(attribute==null || attribute.getValueType()!= ValueType.BOOLEAN){
return false;
}
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/com/reandroid/apk/FrameworkOptimizer.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import com.reandroid.arsc.chunk.xml.ResXmlAttribute;
import com.reandroid.arsc.chunk.xml.ResXmlElement;
import com.reandroid.arsc.chunk.xml.ResXmlNode;
import com.reandroid.arsc.group.EntryGroup;
import com.reandroid.arsc.model.ResourceEntry;
import com.reandroid.arsc.io.BlockReader;
import com.reandroid.arsc.pool.ResXmlStringPool;
import com.reandroid.arsc.util.FrameworkTable;
Expand Down Expand Up @@ -228,8 +228,8 @@ private Entry getEntryWithValue(TableBlock tableBlock, int resourceId, Set<Integ
return null;
}
circularReference.add(resourceId);
EntryGroup entryGroup = tableBlock.getEntryGroup(resourceId);
Entry entry = entryGroup.pickOne();
ResourceEntry entryGroup = tableBlock.getResource(resourceId);
Entry entry = entryGroup.get();
if(entry==null){
return null;
}
Expand Down
26 changes: 22 additions & 4 deletions src/main/java/com/reandroid/apk/ResFile.java
Original file line number Diff line number Diff line change
Expand Up @@ -74,20 +74,38 @@ public Entry pickOne(){
}
private Entry selectOne(){
List<Entry> entryList = this.entryList;
if(entryList.size()==0){
if(entryList.size() == 0){
return null;
}
for(Entry entry :entryList){
if(entryList.size() == 1){
String p1 = entryList.get(0).getResValue().getValueAsString();
String p2 = getInputSource().getName();
if(p1.equals(p2)){
return entryList.get(entryList.size()-1);
}
return entryList.get(0);
}
String path = getInputSource().getName();
for(Entry entry : entryList){
ResValue resValue = entry.getResValue();
if(resValue == null || resValue.getValueType() != ValueType.STRING){
continue;
}
if(path.equals(resValue.getValueAsString())){
return entry;
}
}
for(Entry entry : entryList){
if(!entry.isNull() && entry.isDefault()){
return entry;
}
}
for(Entry entry :entryList){
for(Entry entry : entryList){
if(!entry.isNull()){
return entry;
}
}
for(Entry entry :entryList){
for(Entry entry : entryList){
if(entry.isDefault()){
return entry;
}
Expand Down
6 changes: 2 additions & 4 deletions src/main/java/com/reandroid/apk/xmldecoder/BagDecoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,10 @@
package com.reandroid.apk.xmldecoder;

import com.reandroid.arsc.value.ResTableMapEntry;
import com.reandroid.common.EntryStore;
import com.reandroid.xml.XMLElement;

abstract class BagDecoder<OUTPUT> extends DecoderTableEntry<ResTableMapEntry, OUTPUT> {
public BagDecoder(EntryStore entryStore){
super(entryStore);
public BagDecoder(){
super();
}
public abstract boolean canDecode(ResTableMapEntry mapEntry);
}
10 changes: 3 additions & 7 deletions src/main/java/com/reandroid/apk/xmldecoder/BagDecoderArray.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,15 @@
import com.reandroid.apk.ApkUtil;
import com.reandroid.apk.XmlHelper;
import com.reandroid.arsc.chunk.PackageBlock;
import com.reandroid.arsc.coder.ValueDecoder;
import com.reandroid.arsc.value.*;
import com.reandroid.common.EntryStore;

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

class BagDecoderArray<OUTPUT> extends BagDecoder<OUTPUT>{
public BagDecoderArray(EntryStore entryStore) {
super(entryStore);
public BagDecoderArray() {
super();
}

@Override
Expand All @@ -40,7 +38,6 @@ public OUTPUT decode(ResTableMapEntry mapEntry, EntryWriter<OUTPUT> writer) thro
writer.attribute("name", entry.getName());

PackageBlock packageBlock = entry.getPackageBlock();
EntryStore entryStore = getEntryStore();
ResValueMap[] resValueMaps = mapEntry.listResValueMap();
boolean zero_name = isZeroNameArray(resValueMaps);

Expand All @@ -52,8 +49,7 @@ public OUTPUT decode(ResTableMapEntry mapEntry, EntryWriter<OUTPUT> writer) thro
writer.writeTagIndent(INDENT_BAG);
writer.startTag(childTag);
if(zero_name){
String name = ValueDecoder.decodeAttributeName(
entryStore, packageBlock, valueMap.getName());
String name = valueMap.decodeName();
writer.attribute("name", name);
}
writeText(writer, packageBlock, valueMap);
Expand Down
24 changes: 4 additions & 20 deletions src/main/java/com/reandroid/apk/xmldecoder/BagDecoderAttr.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,14 @@

import com.reandroid.apk.XmlHelper;
import com.reandroid.arsc.array.CompoundItemArray;
import com.reandroid.arsc.chunk.PackageBlock;
import com.reandroid.arsc.coder.ValueDecoder;
import com.reandroid.arsc.util.HexUtil;
import com.reandroid.arsc.value.*;
import com.reandroid.arsc.value.attribute.AttributeBag;
import com.reandroid.common.EntryStore;

import java.io.IOException;

class BagDecoderAttr<OUTPUT> extends BagDecoder<OUTPUT>{
public BagDecoderAttr(EntryStore entryStore){
super(entryStore);
public BagDecoderAttr(){
super();
}

@Override
Expand All @@ -45,9 +41,6 @@ public OUTPUT decode(ResTableMapEntry mapEntry, EntryWriter<OUTPUT> writer) thro

ResValueMap[] bagItems = mapEntry.listResValueMap();

EntryStore entryStore = getEntryStore();
PackageBlock packageBlock = entry.getPackageBlock();

boolean hasBags = false;

for(int i = 0; i < bagItems.length; i++){
Expand All @@ -58,17 +51,8 @@ public OUTPUT decode(ResTableMapEntry mapEntry, EntryWriter<OUTPUT> writer) thro
}
writer.writeTagIndent(INDENT_BAG);
writer.startTag(bagType.getName());
String name = ValueDecoder.decodeAttributeName(
entryStore, packageBlock, valueMap.getName());
writer.attribute("name", name);
int rawVal = valueMap.getData();
String value;
if(valueMap.getValueType() == ValueType.HEX){
value = HexUtil.toHex8(rawVal);
}else {
value = Integer.toString(rawVal);
}
writer.text(value);
writer.attribute("name", valueMap.decodeName());
writer.text(valueMap.decodeValue());

writer.endTag(bagType.getName());
hasBags = true;
Expand Down
Loading

0 comments on commit 09af9d0

Please sign in to comment.