Skip to content

Commit

Permalink
use optional external framework file
Browse files Browse the repository at this point in the history
  • Loading branch information
REAndroid committed Jun 24, 2023
1 parent 4796459 commit f35c575
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 13 deletions.
30 changes: 30 additions & 0 deletions src/main/java/com/reandroid/apkeditor/Options.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
import com.reandroid.commons.command.ARGException;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class Options {
public File inputFile;
Expand All @@ -26,14 +28,40 @@ public class Options {
public File signaturesDirectory;
public String type;
public Integer frameworkVersion;
public File[] frameworks;
public Options(){
}
public void parse(String[] args) throws ARGException {
parseForce(args);
parseFrameworkVersion(args);
parseFrameworks(args);
checkUnknownOptions(args);
}

protected void parseFrameworks(String[] args) throws ARGException {
frameworks = null;
File file = parseFramework(args);
if(file == null){
return;
}
List<File> fileList = new ArrayList<>();
while (file != null){
fileList.add(file);
file = parseFramework(args);
}
frameworks = fileList.toArray(new File[0]);
}
private File parseFramework(String[] args) throws ARGException {
String path = parseArgValue(ARG_framework, args);
if(path == null){
return null;
}
File file = new File(path);
if(!file.isFile()){
throw new ARGException("No such file: " + path);
}
return file;
}
protected void parseFrameworkVersion(String[] args) throws ARGException {
String version = parseArgValue(ARG_framework_version, args);
if(version == null){
Expand Down Expand Up @@ -204,6 +232,8 @@ protected boolean containsArg(String argSwitch, boolean ignore_case, String[] ar
protected static final String ARG_DESC_sig = "signatures directory path";
protected static final String ARG_framework_version = "-framework-version";
protected static final String ARG_DESC_framework_version = "preferred framework version number";
protected static final String ARG_framework = "-framework";
protected static final String ARG_DESC_framework = "path of framework file (can be multiple)";
public static final String ARG_type = "-t";

public static final String TYPE_SIG = "sig";
Expand Down
17 changes: 15 additions & 2 deletions src/main/java/com/reandroid/apkeditor/compile/BuildOptions.java
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,14 @@ public String toString(){
builder.append("\n Force: true");
}
if(frameworkVersion != null){
builder.append("\nframework: ").append(frameworkVersion);
builder.append("\nFramework version: ").append(frameworkVersion);
}
if(frameworks != null && frameworks.length > 0){
builder.append("\nFrameworks:");
for(File file : frameworks){
builder.append("\n ");
builder.append(file);
}
}
builder.append("\n ---------------------------- ");
return builder.toString();
Expand Down Expand Up @@ -114,6 +121,7 @@ public static String getHelp(){
new String[]{ARG_input, ARG_DESC_input},
new String[]{ARG_output, ARG_DESC_output},
new String[]{ARG_framework_version, ARG_DESC_framework_version},
new String[]{ARG_framework, ARG_DESC_framework},
new String[]{ARG_sig, ARG_DESC_sig},
new String[]{ARG_resDir, ARG_DESC_resDir}
};
Expand All @@ -134,12 +142,17 @@ public static String getHelp(){
.append(ARG_input).append(" path/to/input_dir");

builder.append("\nExample-3 (restore signatures):");

builder.append("\n java -jar ").append(jar).append(" ").append(Builder.ARG_SHORT)
.append(" ").append(ARG_type).append(" ").append(TYPE_SIG)
.append(" ").append(ARG_input).append(" path/to/input.apk")
.append(" ").append(ARG_sig).append(" path/to/signatures_dir");

builder.append("\nExample-4: (framework)");
builder.append("\n java -jar ").append(jar).append(" ").append(Builder.ARG_SHORT).append(" ")
.append(ARG_input).append(" input_dir");
builder.append(" ").append(ARG_framework).append(" framework-res.apk");
builder.append(" ").append(ARG_framework).append(" platforms/android-32/android.jar");

return builder.toString();
}
}
7 changes: 7 additions & 0 deletions src/main/java/com/reandroid/apkeditor/compile/Builder.java
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,14 @@ public void buildXml() throws IOException {
ApkModuleXmlEncoder encoder=new ApkModuleXmlEncoder();
encoder.setApkLogger(getAPKLogger());
ApkModule loadedModule = encoder.getApkModule();
loadedModule.setAPKLogger(getAPKLogger());
loadedModule.setPreferredFramework(options.frameworkVersion);
if(options.frameworks != null){
for(File file : options.frameworks){
loadedModule.addExternalFramework(file);
}
}

encoder.scanDirectory(options.inputFile);
loadedModule = encoder.getApkModule();
log("Writing apk...");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@

import com.reandroid.apkeditor.APKEditor;
import com.reandroid.apkeditor.Options;
import com.reandroid.apkeditor.compile.Builder;
import com.reandroid.apkeditor.utils.StringHelper;
import com.reandroid.commons.command.ARGException;

Expand Down Expand Up @@ -115,12 +114,19 @@ public String toString(){
builder.append("\n Keep res path: true");
}
if(frameworkVersion != null){
builder.append("\nframework: ").append(frameworkVersion);
builder.append("\nFramework version: ").append(frameworkVersion);
}
builder.append("\n Type: ").append(type);
if(!TYPE_XML.equals(type) && signaturesDirectory == null){
builder.append("\n Split: ").append(splitJson);
}
if(frameworks != null && frameworks.length > 0){
builder.append("\nFrameworks:");
for(File file : frameworks){
builder.append("\n ");
builder.append(file);
}
}
builder.append("\n ---------------------------- ");
return builder.toString();
}
Expand All @@ -132,6 +138,7 @@ public static String getHelp(){
new String[]{ARG_input, ARG_DESC_input},
new String[]{ARG_output, ARG_DESC_output},
new String[]{ARG_framework_version, ARG_DESC_framework_version},
new String[]{ARG_framework, ARG_DESC_framework},
new String[]{ARG_sig, ARG_DESC_sig},
new String[]{ARG_type, ARG_DESC_type},
new String[]{ARG_resDir, ARG_DESC_resDir}
Expand All @@ -147,24 +154,29 @@ public static String getHelp(){
StringHelper.printTwoColumns(builder, " ", Options.PRINT_WIDTH, table);
String jar = APKEditor.getJarName();
builder.append("\n\nExample-1:");
builder.append("\n java -jar ").append(jar).append(" ").append(Builder.ARG_SHORT).append(" ")
builder.append("\n java -jar ").append(jar).append(" ").append(Decompiler.ARG_SHORT).append(" ")
.append(ARG_input).append(" path/to/input.apk");
builder.append(" ").append(ARG_output).append(" path/to/out_dir");
builder.append("\nExample-2:");
builder.append("\n java -jar ").append(jar).append(" ").append(Builder.ARG_SHORT).append(" ")
builder.append("\n java -jar ").append(jar).append(" ").append(Decompiler.ARG_SHORT).append(" ")
.append(ARG_input).append(" path/to/input.apk");
builder.append("\nExample-3:");
builder.append("\n java -jar ").append(jar).append(" ").append(Builder.ARG_SHORT).append(" ")
builder.append("\n java -jar ").append(jar).append(" ").append(Decompiler.ARG_SHORT).append(" ")
.append(ARG_input).append(" path/to/input.apk").append(" ").append(ARG_split_resources);
builder.append("\nExample-4: (XML)");
builder.append("\n java -jar ").append(jar).append(" ").append(Builder.ARG_SHORT).append(" ")
builder.append("\n java -jar ").append(jar).append(" ").append(Decompiler.ARG_SHORT).append(" ")
.append(ARG_type).append(" ").append(TYPE_XML).append(" ").append(ARG_input)
.append(" path/to/input.apk");
builder.append("\nExample-5: (signatures)");
builder.append("\n java -jar ").append(jar).append(" ").append(Builder.ARG_SHORT).append(" ")
builder.append("\n java -jar ").append(jar).append(" ").append(Decompiler.ARG_SHORT).append(" ")
.append(ARG_type).append(" ").append(TYPE_SIG).append(" ").append(ARG_input)
.append(" path/to/input.apk")
.append(" ").append(ARG_sig).append(" path/to/signatures_dir");
builder.append("\nExample-6: (framework)");
builder.append("\n java -jar ").append(jar).append(" ").append(Decompiler.ARG_SHORT).append(" ")
.append(ARG_input).append(" input.apk");
builder.append(" ").append(ARG_framework).append(" framework-res.apk");
builder.append(" ").append(ARG_framework).append(" platforms/android-32/android.jar");
return builder.toString();
}
private static final String ARG_split_resources="-split-json";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ private Decompiler(DecompileOptions options){
}
public void run() throws IOException {
log("Loading ...");
ApkModule apkModule=ApkModule.loadApkFile(options.inputFile);
ApkModule apkModule=ApkModule.loadApkFile(getAPKLogger(),
options.inputFile, options.frameworks);
apkModule.setPreferredFramework(options.frameworkVersion);
apkModule.setAPKLogger(getAPKLogger());
if(options.signaturesDirectory != null){
dumpSignatureBlock();
return;
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/reandroid/apkeditor/info/Info.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@ public Info(InfoOptions options){
public void run() throws IOException{
setEnableLog(options.outputFile != null);
logMessage("Loading: " + options.inputFile);
ApkModule apkModule = ApkModule.loadApkFile(options.inputFile);
ApkModule apkModule = ApkModule.loadApkFile(this, options.inputFile, options.frameworks);
String msg = Util.isProtected(apkModule);
if(msg != null){
logMessage(msg);
logWarn(msg);
return;
}
apkModule.setAPKLogger(this);
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/com/reandroid/apkeditor/info/InfoOptions.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ public void parse(String[] args) throws ARGException {

parseResourceFilterList(args);

parseFrameworks(args);

packageName = containsArg(ARG_package, args, packageName);
versionCode = containsArg(ARG_version_code, args, versionCode);
versionName = containsArg(ARG_version_name, args, versionName);
Expand Down Expand Up @@ -153,6 +155,7 @@ public static String getHelp(){
new String[]{ARG_output, ARG_DESC_output},
new String[]{ARG_res, ARG_DESC_res},
new String[]{ARG_filter_type, ARG_DESC_filter_type},
new String[]{ARG_framework, ARG_DESC_framework},
};
StringHelper.printTwoColumns(builder, " ", PRINT_WIDTH, table);
builder.append("\n\nFlags:\n");
Expand Down

0 comments on commit f35c575

Please sign in to comment.