新增:签名工具支持保存签名参数
新增:反编译打包工具在打包结束后询问是否进行签名 新增:text_dialog支持传view 修改:TextToDalog重命名TextToDialog 修复:打包工具打包失败or反编译失败不再闪退 修复:签名工具偶尔会卡住的问题 修复:打包工具点击关闭未杀死线程导致挂起
This commit is contained in:
parent
bddb4d1243
commit
862c17c90f
@ -1,16 +1,16 @@
|
|||||||
package com.qy.ui;
|
package com.qy.ui;
|
||||||
|
|
||||||
import javax.swing.JFrame;
|
import javax.swing.*;
|
||||||
import javax.swing.JButton;
|
|
||||||
import javax.swing.JFileChooser;
|
|
||||||
import javax.swing.JLabel;
|
|
||||||
import javax.swing.JTextField;
|
|
||||||
|
|
||||||
import com.qy.utils.ApkSignTools;
|
import com.qy.utils.ApkSignTools;
|
||||||
|
import com.qy.utils.Tools;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
public class ApkSignUi extends JFrame {
|
public class ApkSignUi extends JFrame {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
@ -27,9 +27,10 @@ public class ApkSignUi extends JFrame {
|
|||||||
private ApkSignTools tools;
|
private ApkSignTools tools;
|
||||||
private JLabel lblApkpath ;
|
private JLabel lblApkpath ;
|
||||||
private JLabel lblSginpath;
|
private JLabel lblSginpath;
|
||||||
|
private LinkedHashMap<String,String> keyMap;
|
||||||
|
|
||||||
public ApkSignUi() {
|
public ApkSignUi() {
|
||||||
setTitle("\u7B7E\u540D\u5DE5\u5177v1.1");
|
setTitle("\u7B7E\u540D\u5DE5\u5177v1.2");
|
||||||
setResizable(false);
|
setResizable(false);
|
||||||
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||||
// TODO Auto-generated constructor stub
|
// TODO Auto-generated constructor stub
|
||||||
@ -72,15 +73,18 @@ public class ApkSignUi extends JFrame {
|
|||||||
button.setBounds(36, 96, 105, 27);
|
button.setBounds(36, 96, 105, 27);
|
||||||
getContentPane().add(button);
|
getContentPane().add(button);
|
||||||
|
|
||||||
JButton button_1 = new JButton("\u4F7F\u7528\u9ED8\u8BA4\u7B7E\u540D");
|
JButton button_1 = new JButton("保存签名");
|
||||||
button_1.addActionListener(new ActionListener() {
|
button_1.addActionListener(new ActionListener() {
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
File sign=new File("/media/yutou/_dde_data/AndroidKeys/langtian.jks");
|
|
||||||
lblSginpath.setText(sign.getAbsolutePath());
|
JSONObject key=new JSONObject();
|
||||||
tools.setSignFile(sign);
|
key.put("alias",txtName.getText());
|
||||||
txtName.setText("langtian");
|
key.put("alias_password",txtSpass.getText());
|
||||||
txtPass.setText("134679");
|
key.put("password",txtPass.getText());
|
||||||
txtSpass.setText("134679");
|
key.put("file",lblSginpath.getText());
|
||||||
|
key.put("name",tools.getSignFile().getName());
|
||||||
|
saveKey(key);
|
||||||
|
keyMap=loadKeys();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
button_1.setBounds(220, 96, 130, 27);
|
button_1.setBounds(220, 96, 130, 27);
|
||||||
@ -108,6 +112,33 @@ public class ApkSignUi extends JFrame {
|
|||||||
getContentPane().add(txtName);
|
getContentPane().add(txtName);
|
||||||
txtName.setColumns(10);
|
txtName.setColumns(10);
|
||||||
|
|
||||||
|
keyMap=loadKeys();
|
||||||
|
Vector<String> adbList = new Vector<>(keyMap.keySet());
|
||||||
|
JComboBox<String> keysList=new JComboBox<String>(adbList);
|
||||||
|
keysList.setBounds(157, 173, 200, 27);
|
||||||
|
keysList.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
String key=adbList.get(keysList.getSelectedIndex());
|
||||||
|
String tmp=keyMap.get(key);
|
||||||
|
if(!StringUtils.isEmpty(tmp)){
|
||||||
|
JSONObject json=new JSONObject(tmp);
|
||||||
|
txtName.setText(json.getString("alias"));
|
||||||
|
txtSpass.setText(json.getString("alias_password"));
|
||||||
|
txtPass.setText(json.getString("password"));
|
||||||
|
lblSginpath.setText(json.getString("file"));
|
||||||
|
tools.setSignFile(new File(lblSginpath.getText()));
|
||||||
|
}else{
|
||||||
|
txtName.setText("别名");
|
||||||
|
txtSpass.setText("别名密码");
|
||||||
|
txtPass.setText("密码");
|
||||||
|
lblSginpath.setText("");
|
||||||
|
tools.setSignFile(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
getContentPane().add(keysList);
|
||||||
|
|
||||||
JButton btnSign = new JButton("\u7B7E\u540D");
|
JButton btnSign = new JButton("\u7B7E\u540D");
|
||||||
btnSign.addActionListener(new ActionListener() {
|
btnSign.addActionListener(new ActionListener() {
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
@ -116,17 +147,48 @@ public class ApkSignUi extends JFrame {
|
|||||||
tools.setSignKey(txtPass.getText());
|
tools.setSignKey(txtPass.getText());
|
||||||
if(tools.chack()) {
|
if(tools.chack()) {
|
||||||
if(tools.sign()) {
|
if(tools.sign()) {
|
||||||
new TextToDalog("成功", "签名完成");
|
new TextToDialog("成功", "签名完成");
|
||||||
}else{
|
}else{
|
||||||
new TextToDalog("失败", "签名异常");
|
new TextToDialog("失败", "签名异常");
|
||||||
}
|
}
|
||||||
}else {
|
}else {
|
||||||
new TextToDalog("错误", "APK文件或签名文件不存在");
|
new TextToDialog("错误", "APK文件或签名文件不存在");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
btnSign.setBounds(263, 246, 105, 27);
|
btnSign.setBounds(263, 246, 105, 27);
|
||||||
getContentPane().add(btnSign);
|
getContentPane().add(btnSign);
|
||||||
setVisible(true);
|
setVisible(true);
|
||||||
|
|
||||||
|
keyMap=loadKeys();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void saveKey(JSONObject key) {
|
||||||
|
JSONObject keyJson= Tools.loadConfig(new File("keys.json"));
|
||||||
|
if(keyJson==null)
|
||||||
|
keyJson=new JSONObject();
|
||||||
|
keyJson.put(key.getString("file"),key);
|
||||||
|
Tools.saveConfig(new File("keys.json"),keyJson.toString());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LinkedHashMap<String,String> loadKeys(){
|
||||||
|
LinkedHashMap<String,String> map=new LinkedHashMap<>();
|
||||||
|
map.put("默认","");
|
||||||
|
|
||||||
|
JSONObject keyJson= Tools.loadConfig(new File("keys.json"));
|
||||||
|
if(keyJson==null)
|
||||||
|
{
|
||||||
|
keyJson=new JSONObject();
|
||||||
|
}
|
||||||
|
Iterator<String> keys=keyJson.keys();
|
||||||
|
while (keys.hasNext()){
|
||||||
|
String key=keys.next();
|
||||||
|
map.put(keyJson.getJSONObject(key).getString("name")+"|"+new File(key).getParentFile().getName(), keyJson.getJSONObject(key).toString());
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,9 +2,6 @@ package com.qy.ui;
|
|||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Desktop;
|
import java.awt.Desktop;
|
||||||
import java.awt.datatransfer.DataFlavor;
|
|
||||||
import java.awt.datatransfer.Transferable;
|
|
||||||
import java.awt.datatransfer.UnsupportedFlavorException;
|
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
@ -13,7 +10,6 @@ import java.io.BufferedReader;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.security.Permission;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.Timer;
|
import java.util.Timer;
|
||||||
|
|
||||||
@ -21,12 +17,10 @@ import javax.swing.*;
|
|||||||
import javax.swing.border.LineBorder;
|
import javax.swing.border.LineBorder;
|
||||||
|
|
||||||
import com.qy.utils.*;
|
import com.qy.utils.*;
|
||||||
import com.sun.javaws.exceptions.ExitException;
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import com.qy.Interfaces.SmaliApkToolsPath;
|
import com.qy.Interfaces.SmaliApkToolsPath;
|
||||||
import org.json.JSONTokener;
|
|
||||||
|
|
||||||
public class AppMain extends JFrame {
|
public class AppMain extends JFrame {
|
||||||
private JList<String> configList;
|
private JList<String> configList;
|
||||||
@ -250,7 +244,7 @@ public class AppMain extends JFrame {
|
|||||||
@Override
|
@Override
|
||||||
public void mouseClicked(MouseEvent e) {
|
public void mouseClicked(MouseEvent e) {
|
||||||
if (configList.getSelectedIndex() < 0) {
|
if (configList.getSelectedIndex() < 0) {
|
||||||
new TextToDalog("警告", "列表未选择");
|
new TextToDialog("警告", "列表未选择");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
json.put("switch", configList.getSelectedIndex() + 1 + "");
|
json.put("switch", configList.getSelectedIndex() + 1 + "");
|
||||||
@ -288,7 +282,7 @@ public class AppMain extends JFrame {
|
|||||||
@Override
|
@Override
|
||||||
public void mouseClicked(MouseEvent e) {
|
public void mouseClicked(MouseEvent e) {
|
||||||
if (configList.getSelectedIndex() < 0) {
|
if (configList.getSelectedIndex() < 0) {
|
||||||
new TextToDalog("警告", "列表未选择");
|
new TextToDialog("警告", "列表未选择");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
json.put("switch", configList.getSelectedIndex() + 1 + "");
|
json.put("switch", configList.getSelectedIndex() + 1 + "");
|
||||||
@ -439,7 +433,7 @@ public class AppMain extends JFrame {
|
|||||||
fileName += "_decrypt.jar";
|
fileName += "_decrypt.jar";
|
||||||
}
|
}
|
||||||
EncryptJar.FileData data = new EncryptJar().decrypt(file, fileName);
|
EncryptJar.FileData data = new EncryptJar().decrypt(file, fileName);
|
||||||
new TextToDalog("解码提示", data.toString());
|
new TextToDialog("解码提示", data.toString());
|
||||||
//JarToBase.start(file.getAbsolutePath(), false);
|
//JarToBase.start(file.getAbsolutePath(), false);
|
||||||
log.setText("已解码");
|
log.setText("已解码");
|
||||||
}
|
}
|
||||||
@ -654,7 +648,7 @@ public class AppMain extends JFrame {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void autoPackageSdk() {
|
public void autoPackageSdk() {
|
||||||
new AutoPackageSDK(path -> new TextToDalog("提示", String.format("打包完成%s", path)), version, packageName);
|
new AutoPackageSDK(path -> new TextToDialog("提示", String.format("打包完成%s", path)), version, packageName);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
menu.add(autoSDK);
|
menu.add(autoSDK);
|
||||||
|
@ -13,8 +13,6 @@ import com.qy.utils.Tools;
|
|||||||
import javax.swing.JList;
|
import javax.swing.JList;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
@ -78,7 +76,7 @@ public class ModifySdkUi extends JFrame{
|
|||||||
@Override
|
@Override
|
||||||
public void smaliPath(String path) {
|
public void smaliPath(String path) {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
new TextToDalog("提示", "处理完毕,文件路径:"+path);
|
new TextToDialog("提示", "处理完毕,文件路径:"+path);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -90,14 +88,14 @@ public class ModifySdkUi extends JFrame{
|
|||||||
@Override
|
@Override
|
||||||
public void smaliPath(String path) {
|
public void smaliPath(String path) {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
new TextToDalog("提示", "处理完毕,文件路径:"+path);
|
new TextToDialog("提示", "处理完毕,文件路径:"+path);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}else {
|
}else {
|
||||||
new TextToDalog("警告", "未选择文件或未选择列表配置");
|
new TextToDialog("警告", "未选择文件或未选择列表配置");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -63,11 +63,11 @@ public class OneWayTools {
|
|||||||
+ File.separator + "sdk" + File.separator + "c" + File.separator + "c.smali");
|
+ File.separator + "sdk" + File.separator + "c" + File.separator + "c.smali");
|
||||||
if (!activity.exists()) {
|
if (!activity.exists()) {
|
||||||
System.out.println(activity.getAbsolutePath());
|
System.out.println(activity.getAbsolutePath());
|
||||||
new TextToDalog("警告", "Unit.smali文件不存在!");
|
new TextToDialog("警告", "Unit.smali文件不存在!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!provider.exists()) {
|
if (!provider.exists()) {
|
||||||
new TextToDalog("警告", "c.smali文件不存在!");
|
new TextToDialog("警告", "c.smali文件不存在!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,10 +169,10 @@ public class OneWayTools {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// TODO: handle exception
|
// TODO: handle exception
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
new TextToDalog("错误", "处理unit.smali文件失败:" + e.getMessage());
|
new TextToDialog("错误", "处理unit.smali文件失败:" + e.getMessage());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
new TextToDalog("警告", "Unit.smali文件没有包含指定代码,请手动检查");
|
new TextToDialog("警告", "Unit.smali文件没有包含指定代码,请手动检查");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateProvider(String path) {
|
private void updateProvider(String path) {
|
||||||
@ -210,9 +210,9 @@ public class OneWayTools {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// TODO: handle exception
|
// TODO: handle exception
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
new TextToDalog("错误", "处理c.smali文件失败:" + e.getMessage());
|
new TextToDialog("错误", "处理c.smali文件失败:" + e.getMessage());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
new TextToDalog("警告", "c.smali文件没有包含指定代码,请手动检查");
|
new TextToDialog("警告", "c.smali文件没有包含指定代码,请手动检查");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,7 +71,7 @@ public class SMSToolsUi extends JFrame {
|
|||||||
SDKTools.start(new File("").getAbsolutePath());
|
SDKTools.start(new File("").getAbsolutePath());
|
||||||
btnNewButton.setText(path);
|
btnNewButton.setText(path);
|
||||||
btnNewButton.setEnabled(true);
|
btnNewButton.setEnabled(true);
|
||||||
new TextToDalog("提示", "计费SDK生成成功,请选择保存位置", new DalogAbs() {
|
new TextToDialog("提示", "计费SDK生成成功,请选择保存位置", new DalogAbs() {
|
||||||
File sdk;
|
File sdk;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -85,7 +85,7 @@ public class SMSToolsUi extends JFrame {
|
|||||||
File sdk_ = new File(
|
File sdk_ = new File(
|
||||||
sdk.getAbsolutePath() + "/" + "计费sdk" + SDKTools.version + ".zip");
|
sdk.getAbsolutePath() + "/" + "计费sdk" + SDKTools.version + ".zip");
|
||||||
SDKTools.buildSDK(sdk_);
|
SDKTools.buildSDK(sdk_);
|
||||||
new TextToDalog("完成", "任务已完成", new DalogAbs() {
|
new TextToDialog("完成", "任务已完成", new DalogAbs() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess() {
|
public void onSuccess() {
|
||||||
@ -101,7 +101,7 @@ public class SMSToolsUi extends JFrame {
|
|||||||
});
|
});
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
new TextToDalog("错误", "已放弃本次任务");
|
new TextToDialog("错误", "已放弃本次任务");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -4,31 +4,24 @@ import java.awt.Color;
|
|||||||
import java.awt.Desktop;
|
import java.awt.Desktop;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.awt.event.WindowEvent;
|
||||||
|
import java.awt.event.WindowListener;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Timer;
|
import java.util.Timer;
|
||||||
import java.util.TimerTask;
|
|
||||||
import java.util.Vector;
|
|
||||||
|
|
||||||
import javax.swing.JButton;
|
import javax.swing.*;
|
||||||
import javax.swing.JCheckBox;
|
|
||||||
import javax.swing.JFileChooser;
|
|
||||||
import javax.swing.JFrame;
|
|
||||||
import javax.swing.JLabel;
|
|
||||||
import javax.swing.JList;
|
|
||||||
import javax.swing.JScrollPane;
|
|
||||||
import javax.swing.JSeparator;
|
|
||||||
import javax.swing.JTextField;
|
|
||||||
import javax.swing.SwingConstants;
|
|
||||||
import javax.swing.UIManager;
|
|
||||||
import javax.swing.border.LineBorder;
|
import javax.swing.border.LineBorder;
|
||||||
import javax.swing.event.DocumentEvent;
|
import javax.swing.event.DocumentEvent;
|
||||||
import javax.swing.event.DocumentListener;
|
import javax.swing.event.DocumentListener;
|
||||||
|
|
||||||
|
import com.qy.Interfaces.DalogAbs;
|
||||||
import com.qy.Interfaces.SmaliApkToolsPath;
|
import com.qy.Interfaces.SmaliApkToolsPath;
|
||||||
|
import com.qy.utils.ApkSignTools;
|
||||||
import com.qy.utils.SmaliUtils;
|
import com.qy.utils.SmaliUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
public class SmaliUi extends JFrame {
|
public class SmaliUi extends JFrame {
|
||||||
/**
|
/**
|
||||||
@ -56,6 +49,42 @@ public class SmaliUi extends JFrame {
|
|||||||
vector = new Vector<>();
|
vector = new Vector<>();
|
||||||
fileList = new ArrayList<>();
|
fileList = new ArrayList<>();
|
||||||
timer = new Timer();
|
timer = new Timer();
|
||||||
|
addWindowListener(new WindowListener() {//监听关闭按钮,要取消timer,不然会一直线程挂起
|
||||||
|
@Override
|
||||||
|
public void windowOpened(WindowEvent e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void windowClosing(WindowEvent e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void windowClosed(WindowEvent e) {
|
||||||
|
timer.cancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void windowIconified(WindowEvent e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void windowDeiconified(WindowEvent e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void windowActivated(WindowEvent e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void windowDeactivated(WindowEvent e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
initView();
|
initView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,7 +95,7 @@ public class SmaliUi extends JFrame {
|
|||||||
// TODO: handle exception
|
// TODO: handle exception
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
setTitle("Smali\u53CD\u7F16\u8BD1\u5DE5\u5177v1.2");
|
setTitle("Smali\u53CD\u7F16\u8BD1\u5DE5\u5177v1.3");
|
||||||
// TODO Auto-generated constructor stub
|
// TODO Auto-generated constructor stub
|
||||||
setSize(900, 673);
|
setSize(900, 673);
|
||||||
getContentPane().setLayout(null);
|
getContentPane().setLayout(null);
|
||||||
@ -278,7 +307,7 @@ public class SmaliUi extends JFrame {
|
|||||||
public void run() {
|
public void run() {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
if(jarPath.getText().trim().length()==0) {
|
if(jarPath.getText().trim().length()==0) {
|
||||||
new TextToDalog("警告", "没有选择目标文件");
|
new TextToDialog("警告", "没有选择目标文件");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
utils.unPack(jarPath.getText(), new SmaliApkToolsPath() {
|
utils.unPack(jarPath.getText(), new SmaliApkToolsPath() {
|
||||||
@ -309,11 +338,11 @@ public class SmaliUi extends JFrame {
|
|||||||
if(savePath.getText().trim().length()==0) {
|
if(savePath.getText().trim().length()==0) {
|
||||||
savePath.setText(smaliHome);
|
savePath.setText(smaliHome);
|
||||||
lblInfo.setText("没有填写保存路径,默认保存在当前目录");
|
lblInfo.setText("没有填写保存路径,默认保存在当前目录");
|
||||||
new TextToDalog("警告", "没有填写保存路径,默认保存在当前目录");
|
new TextToDialog("警告", "没有填写保存路径,默认保存在当前目录");
|
||||||
}
|
}
|
||||||
if(jarPath.getText().trim().length()==0) {
|
if(jarPath.getText().trim().length()==0) {
|
||||||
path="dex.zip";
|
path="dex.zip";
|
||||||
new TextToDalog("警告", "没有填写保存文件名,默认为dex.zip");
|
new TextToDialog("警告", "没有填写保存文件名,默认为dex.zip");
|
||||||
}else {
|
}else {
|
||||||
path=new File(jarPath.getText()).getName();
|
path=new File(jarPath.getText()).getName();
|
||||||
}
|
}
|
||||||
@ -324,7 +353,42 @@ public class SmaliUi extends JFrame {
|
|||||||
public void run() {
|
public void run() {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
utils.bale(smaliPath.getText(), savePath.getText() + File.separator+path);
|
utils.bale(smaliPath.getText(), savePath.getText() + File.separator+path);
|
||||||
|
if(SmaliUtils.packageError){
|
||||||
|
return;
|
||||||
|
}
|
||||||
lblInfo.setText("打包完成,保存路径为:" + savePath.getText());
|
lblInfo.setText("打包完成,保存路径为:" + savePath.getText());
|
||||||
|
LinkedHashMap<String,String> keyMap=ApkSignUi.loadKeys();
|
||||||
|
Vector<String> adbList = new Vector<String>(keyMap.keySet());
|
||||||
|
JComboBox<String> keysList=new JComboBox<String>(adbList);
|
||||||
|
keysList.setBounds(157, 50, 200, 27);
|
||||||
|
new TextToDialog("选择签名", keysList, new DalogAbs() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess() {
|
||||||
|
String key=adbList.get(keysList.getSelectedIndex());
|
||||||
|
String tmp=keyMap.get(key);
|
||||||
|
if(!StringUtils.isEmpty(tmp)){
|
||||||
|
lblInfo.setText("开始签名...");
|
||||||
|
JSONObject json=new JSONObject(tmp);
|
||||||
|
ApkSignTools signTools=new ApkSignTools();
|
||||||
|
signTools.setSignFile(new File(json.getString("file")));
|
||||||
|
signTools.setApkFile(new File(savePath.getText()+ File.separator+path));
|
||||||
|
signTools.setKeyStorePassword(json.getString("alias_password"));
|
||||||
|
signTools.setName(json.getString("alias"));
|
||||||
|
signTools.setSignKey(json.getString("password"));
|
||||||
|
if(signTools.sign()){
|
||||||
|
try {
|
||||||
|
Desktop.getDesktop().open(new File(signTools.getApkFile().getAbsolutePath()+"_sign.apk").getParentFile());
|
||||||
|
lblInfo.setText("签名完成");
|
||||||
|
System.out.println("签名完成");
|
||||||
|
} catch (IOException ioException) {
|
||||||
|
ioException.printStackTrace();
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
new TextToDialog("警告","签名失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}, 100);
|
}, 100);
|
||||||
}
|
}
|
||||||
@ -382,6 +446,7 @@ public class SmaliUi extends JFrame {
|
|||||||
@Override
|
@Override
|
||||||
public void smaliPath(String path) {
|
public void smaliPath(String path) {
|
||||||
lblInfo.setText("完成");
|
lblInfo.setText("完成");
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ public class TestAdSrc {
|
|||||||
File file = new File(obj.toString().substring(1, obj.toString().length() - 1));
|
File file = new File(obj.toString().substring(1, obj.toString().length() - 1));
|
||||||
System.out.println(file.getAbsolutePath());
|
System.out.println(file.getAbsolutePath());
|
||||||
if (!file.getName().endsWith(".apk")) {
|
if (!file.getName().endsWith(".apk")) {
|
||||||
new TextToDalog("警告", "并非一个apk文件:" + file.getAbsolutePath());
|
new TextToDialog("警告", "并非一个apk文件:" + file.getAbsolutePath());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (checkBox.isSelected()) {
|
if (checkBox.isSelected()) {
|
||||||
@ -116,9 +116,9 @@ public class TestAdSrc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(msg.equals("")){
|
if(msg.equals("")){
|
||||||
new TextToDalog("提示",file.getName()+"不包含已知广告源");
|
new TextToDialog("提示",file.getName()+"不包含已知广告源");
|
||||||
}else{
|
}else{
|
||||||
new TextToDalog("提示","已扫描到:"+msg);
|
new TextToDialog("提示","已扫描到:"+msg);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -1,61 +0,0 @@
|
|||||||
package com.qy.ui;
|
|
||||||
|
|
||||||
import java.awt.event.MouseAdapter;
|
|
||||||
import java.awt.event.MouseEvent;
|
|
||||||
|
|
||||||
import javax.swing.JButton;
|
|
||||||
import javax.swing.JTextArea;
|
|
||||||
|
|
||||||
import com.qy.Interfaces.DalogAbs;
|
|
||||||
|
|
||||||
import javax.swing.JFrame;
|
|
||||||
import javax.swing.UIManager;
|
|
||||||
|
|
||||||
|
|
||||||
public class TextToDalog extends JFrame {
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
DalogAbs abs;
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
public TextToDalog(String title,String text,DalogAbs abs) {
|
|
||||||
super(title);
|
|
||||||
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
|
||||||
this.abs=abs;
|
|
||||||
initView(text);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* @wbp.parser.constructor
|
|
||||||
*/
|
|
||||||
public TextToDalog(String title,String text) {
|
|
||||||
// TODO Auto-generated constructor stub
|
|
||||||
new TextToDalog(title, text,null);
|
|
||||||
}
|
|
||||||
public void initView(String text) {
|
|
||||||
// TODO Auto-generated constructor stub
|
|
||||||
setSize(636, 231);
|
|
||||||
getContentPane().setLayout(null);
|
|
||||||
|
|
||||||
JTextArea lblNewLabel = new JTextArea(text);
|
|
||||||
lblNewLabel.setBackground(UIManager.getColor("Label.background"));
|
|
||||||
lblNewLabel.setEditable(false);
|
|
||||||
lblNewLabel.setLineWrap(true);
|
|
||||||
lblNewLabel.setBounds(42, 37, 438, 106);
|
|
||||||
getContentPane().add(lblNewLabel);
|
|
||||||
|
|
||||||
|
|
||||||
JButton btnOk = new JButton("ok");
|
|
||||||
btnOk.addMouseListener(new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mouseClicked(MouseEvent e) {
|
|
||||||
TextToDalog.this.dispose();
|
|
||||||
if(abs!=null) {
|
|
||||||
abs.onSuccess();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
btnOk.setBounds(491, 144, 113, 27);
|
|
||||||
getContentPane().add(btnOk);
|
|
||||||
setVisible(true);
|
|
||||||
}
|
|
||||||
}
|
|
67
src/com/qy/ui/TextToDialog.java
Normal file
67
src/com/qy/ui/TextToDialog.java
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
package com.qy.ui;
|
||||||
|
|
||||||
|
import java.awt.event.MouseAdapter;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
|
||||||
|
import com.qy.Interfaces.DalogAbs;
|
||||||
|
|
||||||
|
|
||||||
|
public class TextToDialog extends JFrame {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
DalogAbs abs;
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
public TextToDialog(String title, String text, DalogAbs abs) {
|
||||||
|
super(title);
|
||||||
|
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||||
|
this.abs=abs;
|
||||||
|
initView(text,null);
|
||||||
|
}
|
||||||
|
public TextToDialog(String title, JComponent view,DalogAbs abs){
|
||||||
|
super(title);
|
||||||
|
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||||
|
this.abs=abs;
|
||||||
|
initView(null,view);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @wbp.parser.constructor
|
||||||
|
*/
|
||||||
|
public TextToDialog(String title, String text) {
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
new TextToDialog(title, text,null);
|
||||||
|
}
|
||||||
|
public void initView(String text,JComponent view) {
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
setSize(636, 231);
|
||||||
|
getContentPane().setLayout(null);
|
||||||
|
|
||||||
|
if(view==null) {
|
||||||
|
JTextArea lblNewLabel = new JTextArea(text);
|
||||||
|
lblNewLabel.setBackground(UIManager.getColor("Label.background"));
|
||||||
|
lblNewLabel.setEditable(false);
|
||||||
|
lblNewLabel.setLineWrap(true);
|
||||||
|
lblNewLabel.setBounds(42, 37, 438, 106);
|
||||||
|
getContentPane().add(lblNewLabel);
|
||||||
|
}else{
|
||||||
|
getContentPane().add(view);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
JButton btnOk = new JButton("ok");
|
||||||
|
btnOk.addMouseListener(new MouseAdapter() {
|
||||||
|
@Override
|
||||||
|
public void mouseClicked(MouseEvent e) {
|
||||||
|
TextToDialog.this.dispose();
|
||||||
|
if(abs!=null) {
|
||||||
|
abs.onSuccess();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
btnOk.setBounds(491, 144, 113, 27);
|
||||||
|
getContentPane().add(btnOk);
|
||||||
|
setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,9 @@
|
|||||||
package com.qy.utils;
|
package com.qy.utils;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
|
||||||
|
|
||||||
public class ApkSignTools {
|
public class ApkSignTools {
|
||||||
@ -29,7 +31,13 @@ public class ApkSignTools {
|
|||||||
+ " -storepass " + keyStorePassword + " -signedjar \"" + apkFile.getAbsolutePath()+"_sign.apk" + "\" \"" + apkFile.getAbsolutePath() + "\" " + name;
|
+ " -storepass " + keyStorePassword + " -signedjar \"" + apkFile.getAbsolutePath()+"_sign.apk" + "\" \"" + apkFile.getAbsolutePath() + "\" " + name;
|
||||||
System.out.println(exec);
|
System.out.println(exec);
|
||||||
try {
|
try {
|
||||||
Runtime.getRuntime().exec(exec).waitFor();
|
Process process=Runtime.getRuntime().exec(exec);
|
||||||
|
BufferedReader reader=new BufferedReader(new InputStreamReader(process.getInputStream()));
|
||||||
|
String tmp;
|
||||||
|
while ((tmp=reader.readLine())!=null){
|
||||||
|
System.out.println(tmp);
|
||||||
|
}
|
||||||
|
reader.close();
|
||||||
return true;
|
return true;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// TODO Auto-generated catch block
|
// TODO Auto-generated catch block
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
package com.qy.utils;
|
package com.qy.utils;
|
||||||
|
|
||||||
import java.awt.Desktop;
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.sql.SQLOutput;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -13,7 +11,6 @@ import com.qy.ui.EditToDalog;
|
|||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import com.qy.Interfaces.DalogAbs;
|
|
||||||
/*
|
/*
|
||||||
配置JSON格式:
|
配置JSON格式:
|
||||||
{
|
{
|
||||||
@ -47,7 +44,6 @@ import com.qy.Interfaces.DalogAbs;
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
import com.qy.Interfaces.SmaliApkToolsPath;
|
import com.qy.Interfaces.SmaliApkToolsPath;
|
||||||
import com.qy.ui.TextToDalog;
|
|
||||||
|
|
||||||
public class AutoRandomAdSDK {
|
public class AutoRandomAdSDK {
|
||||||
private File sdk;
|
private File sdk;
|
||||||
|
@ -1,18 +1,24 @@
|
|||||||
package com.qy.utils;
|
package com.qy.utils;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.*;
|
||||||
import java.io.File;
|
import java.nio.ByteBuffer;
|
||||||
import java.io.FileReader;
|
import java.security.Permission;
|
||||||
import java.io.PrintWriter;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.logging.Handler;
|
||||||
|
import java.util.logging.LogRecord;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import brut.androlib.Androlib;
|
||||||
|
import brut.androlib.res.xml.ResXmlPatcher;
|
||||||
import com.qy.Interfaces.SmaliApkToolsPath;
|
import com.qy.Interfaces.SmaliApkToolsPath;
|
||||||
|
|
||||||
import brut.apktool.Main;
|
import brut.apktool.Main;
|
||||||
|
import com.qy.ui.TextToDialog;
|
||||||
|
import com.sun.javaws.exceptions.ExitException;
|
||||||
|
|
||||||
public class SmaliUtils {
|
public class SmaliUtils {
|
||||||
//private String str = "";
|
//private String str = "";
|
||||||
@ -232,15 +238,45 @@ public class SmaliUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void bale(String path, String smaliPath) {
|
public void bale(String path, String smaliPath) {
|
||||||
|
run=false;
|
||||||
|
packageError=false;
|
||||||
bale(path, smaliPath, null);
|
bale(path, smaliPath, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean run = false;
|
||||||
|
public static StringBuffer error=new StringBuffer();
|
||||||
public void bale(String smaliPath, String path, SmaliApkToolsPath inter) {
|
public void bale(String smaliPath, String path, SmaliApkToolsPath inter) {
|
||||||
String[] args = new String[]{"b", "-f", smaliPath, "-o", path};
|
String[] args = new String[]{"b", "-f", smaliPath, "-o", path};
|
||||||
for (String string : args) {
|
for (String string : args) {
|
||||||
System.out.print(string + " ");
|
System.out.print(string + " ");
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
run = true;
|
||||||
|
error=new StringBuffer();
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||||
|
PrintStream printStream = new PrintStream(outputStream);
|
||||||
|
PrintStream old=System.err;
|
||||||
|
System.setErr(printStream);
|
||||||
|
while (run) {
|
||||||
|
byte[] bs = outputStream.toByteArray();
|
||||||
|
if (bs.length > 0) {
|
||||||
|
error.append(new String(outputStream.toByteArray())).append("\n");
|
||||||
|
outputStream.reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
System.setErr(old);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
System.setSecurityManager(new NoExitSecurityManager());
|
||||||
|
|
||||||
Main.main(args);
|
Main.main(args);
|
||||||
if (inter != null) {
|
if (inter != null) {
|
||||||
inter.smaliPath(path);
|
inter.smaliPath(path);
|
||||||
@ -252,6 +288,8 @@ public class SmaliUtils {
|
|||||||
inter.smaliPath("error");
|
inter.smaliPath("error");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
System.setSecurityManager(null);
|
||||||
|
run = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<String> list;
|
List<String> list;
|
||||||
@ -268,4 +306,36 @@ public class SmaliUtils {
|
|||||||
public void setFilter(List<String> list) {
|
public void setFilter(List<String> list) {
|
||||||
this.list = list;
|
this.list = list;
|
||||||
}
|
}
|
||||||
|
public static boolean packageError=false;
|
||||||
|
public static class NoExitSecurityManager extends SecurityManager {
|
||||||
|
|
||||||
|
public NoExitSecurityManager() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void checkExit(int status) {
|
||||||
|
super.checkExit(status);
|
||||||
|
throw new SmaliUtils.ExitException(status);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void checkPermission(Permission perm) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void checkPermission(Permission perm, Object context) {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class ExitException extends SecurityException {
|
||||||
|
public ExitException(int status) {
|
||||||
|
System.out.println("print exit :" + status);
|
||||||
|
if(error.length()>0){
|
||||||
|
packageError=true;
|
||||||
|
new TextToDialog("打包异常",error.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package com.qy.utils;
|
|||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.rmi.server.ExportException;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.jar.JarOutputStream;
|
import java.util.jar.JarOutputStream;
|
||||||
import java.util.zip.CRC32;
|
import java.util.zip.CRC32;
|
||||||
@ -184,7 +185,26 @@ public class Tools {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
public static void saveConfig(File file,String data){
|
||||||
|
if(!file.exists()){
|
||||||
|
try {
|
||||||
|
if(!file.createNewFile()){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
FileWriter writer=new FileWriter(file);
|
||||||
|
writer.write(data);
|
||||||
|
writer.flush();
|
||||||
|
writer.close();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
public static JSONObject loadConfig(File file) {
|
public static JSONObject loadConfig(File file) {
|
||||||
JSONObject json = null;
|
JSONObject json = null;
|
||||||
BufferedReader reader;
|
BufferedReader reader;
|
||||||
@ -202,6 +222,7 @@ public class Tools {
|
|||||||
while ((tmp = reader.readLine()) != null) {
|
while ((tmp = reader.readLine()) != null) {
|
||||||
str += tmp;
|
str += tmp;
|
||||||
}
|
}
|
||||||
|
reader.close();
|
||||||
json = new JSONObject(str);
|
json = new JSONObject(str);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// TODO Auto-generated catch block
|
// TODO Auto-generated catch block
|
||||||
|
Loading…
Reference in New Issue
Block a user