Handle duplicate PackageBlock & StagedAlias json conversion

This commit is contained in:
REAndroid 2022-12-30 05:22:51 -05:00
parent 12f4d4f9d6
commit c2a9ebd7e9
5 changed files with 18 additions and 4 deletions

View File

@ -140,7 +140,6 @@ public class ApkUtil {
public static final String JSON_FILE_EXTENSION=".json";
public static final String RES_JSON_NAME="res-json";
public static final String ROOT_NAME="root";
public static final String PACKAGE_JSON_FILE="package.json";
public static final String SPLIT_JSON_DIRECTORY="resources";
public static final String DEF_MODULE_NAME="base";
public static final String NAME_value_type="value_type";

View File

@ -60,7 +60,7 @@ public class StringPoolBuilder {
mCurrentPackageId=0;
List<File> pkgDirList=ApkUtil.listDirectories(resourcesDir);
for(File dir:pkgDirList){
File pkgFile=new File(dir, ApkUtil.PACKAGE_JSON_FILE);
File pkgFile=new File(dir, PackageBlock.JSON_FILE_NAME);
scanFile(pkgFile);
List<File> jsonFileList=ApkUtil.recursiveFiles(dir, ".json");
for(File file:jsonFileList){

View File

@ -16,6 +16,7 @@
package com.reandroid.lib.apk;
import com.reandroid.lib.arsc.chunk.PackageBlock;
import com.reandroid.lib.arsc.chunk.StagedAlias;
import com.reandroid.lib.arsc.chunk.TableBlock;
import com.reandroid.lib.arsc.chunk.TypeBlock;
import com.reandroid.lib.arsc.container.SpecTypePair;
@ -43,6 +44,10 @@ public class TableBlockJson {
JSONObject jsonObject=new JSONObject();
jsonObject.put(PackageBlock.NAME_package_id, packageBlock.getId());
jsonObject.put(PackageBlock.NAME_package_name, packageBlock.getName());
StagedAlias stagedAlias=StagedAlias.mergeAll(packageBlock.getStagedAliasList().getChildes());
if(stagedAlias!=null){
jsonObject.put(PackageBlock.NAME_staged_aliases, stagedAlias.getStagedAliasEntryArray().toJson());
}
jsonObject.write(infoFile);
for(SpecTypePair specTypePair: packageBlock.listAllSpecTypePair()){
for(TypeBlock typeBlock:specTypePair.getTypeBlockArray().listItems()){
@ -67,6 +72,8 @@ public class TableBlockJson {
private String getDirName(PackageBlock packageBlock){
StringBuilder builder=new StringBuilder();
builder.append(String.format("0x%02x", packageBlock.getId()));
builder.append("-");
builder.append(packageBlock.getIndex());
String name= packageBlock.getName();
if(name!=null){
builder.append('-');

View File

@ -16,9 +16,11 @@
package com.reandroid.lib.apk;
import com.reandroid.lib.arsc.chunk.PackageBlock;
import com.reandroid.lib.arsc.chunk.StagedAlias;
import com.reandroid.lib.arsc.chunk.TableBlock;
import com.reandroid.lib.arsc.chunk.TypeBlock;
import com.reandroid.lib.arsc.value.ResConfig;
import com.reandroid.lib.json.JSONArray;
import com.reandroid.lib.json.JSONObject;
import java.io.File;
@ -50,7 +52,7 @@ public class TableBlockJsonBuilder {
return tableBlock;
}
private void scanPackageDirectory(TableBlock tableBlock, File pkgDir) throws IOException{
File pkgFile=new File(pkgDir, "package.json");
File pkgFile=new File(pkgDir, PackageBlock.JSON_FILE_NAME);
if(!pkgFile.isFile()){
throw new IOException("Invalid package directory! Package file missing: "+pkgFile);
}
@ -60,6 +62,12 @@ public class TableBlockJsonBuilder {
String name=jsonObject.optString(PackageBlock.NAME_package_name);
PackageBlock pkg=tableBlock.getPackageArray().getOrCreate((byte) id);
pkg.setName(name);
if(jsonObject.has(PackageBlock.NAME_staged_aliases)){
JSONArray stagedJson = jsonObject.getJSONArray(PackageBlock.NAME_staged_aliases);
StagedAlias stagedAlias = new StagedAlias();
stagedAlias.getStagedAliasEntryArray().fromJson(stagedJson);
pkg.getStagedAliasList().add(stagedAlias);
}
List<File> typeFileList=ApkUtil.listFiles(pkgDir, ".json");
typeFileList.remove(pkgFile);
for(File typeFile:typeFileList){

View File

@ -400,5 +400,5 @@ package com.reandroid.lib.arsc.chunk;
public static final String JSON_FILE_NAME = "package.json";
private static final String NAME_specs="specs";
private static final String NAME_libraries="libraries";
private static final String NAME_staged_aliases="staged_aliases";
public static final String NAME_staged_aliases="staged_aliases";
}