package com.wj.dexknife.shell;
import com.wj.dexknife.shell.utils.ClassHelper;
import com.wj.dexknife.shell.utils.Cmd;
import com.wj.dexknife.shell.utils.Debug;
import com.wj.dexknife.shell.utils.FileHelper;
import com.wj.dexknife.shell.utils.StringUtils;
import org.apache.tools.ant.taskdefs.Ant;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
import java.util.regex.Matcher;
public class AppManager {
public static final String TAG = AppManager.class.getSimpleName();
public static boolean isReleased = false;
public static String APKTOOL_JAR = "apktool.jar";
// public static String FRAMEWORK_RES = "framework-res.apk";
public static String APKTOOL_JAR_PATH = "src/apktool/"+APKTOOL_JAR;
public static String APKTOOLJARPATH = null;
private static File apkTool = new File(getTempDir(), APKTOOL_JAR);
public static boolean isReleased() {
return isReleased;
}
public static File getApkTool(){
initApkTool();
return apkTool;
}
public static void initApkTool(){
if(!FileHelper.exists(apkTool)){
// File frameworkRes = new File(apkTool.getParentFile(), FRAMEWORK_RES);
if(AppManager.isReleased()){
ClassHelper.releaseResourceToFile(APKTOOL_JAR_PATH,apkTool);
// ClassHelper.releaseResourceToFile("apktool/" + FRAMEWORK_RES,frameworkRes);
}else{
File apkToolFile = null;
if(APKTOOLJARPATH==null){
apkToolFile = new File(getProjectDir(),APKTOOL_JAR_PATH);
}else{
apkToolFile = new File(APKTOOLJARPATH);
}
// File frameworkResFile = new File(getProjectDir(),"src/apktool/" + FRAMEWORK_RES);
FileHelper.copyFile(apkToolFile,apkTool);
// FileHelper.copyFile(frameworkResFile,frameworkRes);
}
// ApkToolPlus.installFramework(apkTool, frameworkRes);
// FileHelper.delete(frameworkRes);
}
}
public static void init() {
isReleased = !getRoot().isDirectory();
Config.init();
initApkTool();
}
public static void browser(URI uri){
try {
if(uri == null){
return;
}
java.awt.Desktop.getDesktop().browse(uri);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void browser(String uri){
try {
browser(new URI(uri));
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
public static void browser(File file){
if(file == null){
return;
}
if(!file.exists()){
return;
}
browser(file.toURI());
}
public static String getVersion(){
return Config.getVersion();
}
public static File getRoot(){
return new File(ClassHelper.class.getProtectionDomain().getCodeSource().getLocation().getFile());
}
public static File getRuntimeDir(){
return getRoot().getParentFile();
}
public static File getProjectDir(){
return getRuntimeDir().getParentFile().getParentFile();
}
public static File getTempDir(){
File tempDir = new File(getRuntimeDir(), "Temp");
if(!tempDir.exists()){
tempDir.mkdirs();
}
return tempDir;
}
public static File getOutputDir(){
String dirPath = Config.get(Config.kAppOutputDir, null);
File dir;
if(!StringUtils.isEmpty(dirPath)){
dir = new File(dirPath);
dir.mkdirs();
if(dir.isDirectory()){
return dir;
}
FileHelper.delete(dir);
}
dir = new File(getRuntimeDir(),"ApkToolPlus_Files");
dir.mkdirs();
return dir;
}
public static File getLogDir(){
File logDir = new File(getOutputDir(), "Log");
if(!logDir.exists()){
logDir.mkdirs();
}
return logDir;
}
public static File copyToTemp(File file, String outName){
if(file == null || !file.exists() || StringUtils.isEmpty(outName)){
return null;
}
File outFile = new File(getTempDir(), outName);
if(file.isFile()){
FileHelper.copyFile(file, outFile);
}else{
FileHelper.copyDir(file,outFile);
}
return outFile;
}
public static boolean showInSublime(File file){
return showInSublime(file,false);
}
public static boolean showInSublime(File file, boolean isAdd){
if(!FileHelper.exists(file)){
Debug.e("file must exist");
return false;
}
String sublimePath = Config.get(Config.kSublimePath);
if(sublimePath != null){
File sublime = new File(sublimePath);
if(sublime.exists()){
String sublimeCmdParams = Config.get(Config.kSublimeCmdParams);
String cmd;
if(!StringUtils.isEmpty(sublimeCmdParams)){
String finalCmdParams = sublimeCmdParams.replaceAll("(%target%)+", Matcher.quoteReplacement(file.getAbsolutePath()));
cmd = sublimePath + " " + finalCmdParams;
}else{
cmd = sublimePath + " " + file.getAbsolutePath();
}
if(isAdd){
cmd = cmd + " --add";
}
Cmd.exec(cmd,false);
return true;
}
}else{
Debug.e("sublime path can'n be null");
}
return false;
}
public static void showInSublime(List<File> fileList){
if(fileList == null || fileList.isEmpty()){
return;
}
for(File file : fileList){
showInSublime(file);
}
}
}