您的位置:首页 > 编程语言 > Java开发

APK分析工具

2014-01-16 17:48 411 查看
上一篇博文中已经阐述了 Apk的部分属性的获取方式。

下面将程序封装起来,通过对话框方式方便操作。

package com.test;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class ApkMain extends JFrame {

private static final long serialVersionUID = 4437290081708117336L;

JLabel label = new JLabel("选择apk文件");

JTextField apkFilePath = new JTextField("单击输入框选择文件", 28);

JButton button = new JButton("分  析");
JButton button2 = new JButton("清 除");

JTextArea apkInfoArea = new JTextArea("分析结果", 14, 48);

private MouseListener selectFileListener = new MouseListener() {

@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
JFileChooser jfc = new JFileChooser(".");
int ret = jfc.showOpenDialog(null);
// System.out.println(ret);
if (ret == JFileChooser.APPROVE_OPTION) {
try {
File file = new File(jfc.getSelectedFile().getAbsolutePath());
apkFilePath.setText(file.getPath());
} catch (Exception ex) {
apkInfoArea.setText("exception");
// Logger.getLogger(ApkAnalysisView.class.getName()).log(Level.SEVERE,
// null, ex);
}
}
}

};

private ActionListener buttonClearListener = new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
apkFilePath.setText("");
apkInfoArea.setText("");
}

};

private ActionListener buttonDownListener = new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
FileInputStream in = null;
try {
// TODO add your handling code here:
// apkInfoArea.setText(apkFilePath.getText());
// System.out.println(apkFilePath.getText());
File file = new File(apkFilePath.getText());
ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
byte[] temp = new byte[1024];
int size = 0;
in = new FileInputStream(file);
while ((size = in.read(temp)) != -1) {
out.write(temp, 0, size);
}
byte[] bytes = out.toByteArray();
in.close();
/*
* FileInputStream in = new FileInputStream(file); byte []bytes
* = new byte[in.available()]; in.read(bytes);
*/

ApkReader reader = new ApkReader(bytes);
String text = "";
text += "\n" + "Permission: " + reader.getPermission();
text += "\n" + "version id name: " + reader.getVersionName();
text += "\n" + "version code: " + reader.getVerCode();
apkInfoArea.setText("apk 属性信息如下: \n---------------------\n" + text);
} catch (FileNotFoundException ex) {
apkInfoArea.setText("文件已损坏或未选择文件,单击输入框选择文件");
// Logger.getLogger(ApkAnalysisView.class.getName()).log(Level.SEVERE,
// null, ex);
} catch (IOException ex) {
apkInfoArea.setText("文件已损坏或未选择文件,单击输入框选择文件");
// Logger.getLogger(ApkAnalysisView.class.getName()).log(Level.SEVERE,
// null, ex);
} catch (Exception ex) {
apkInfoArea.setText("文件已损坏或未选择文件,单击输入框选择文件");
// Logger.getLogger(ApkAnalysisView.class.getName()).log(Level.SEVERE,
// null, ex);
} finally {
try {
in.close();
} catch (IOException ex) {
// Logger.getLogger(ApkAnalysisView.class.getName()).log(Level.SEVERE,
// null, ex);
}
}
}
};

public ApkMain() {
// apkFilePath.setSize(100, 2);

apkInfoArea.setBorder(BorderFactory.createLineBorder(Color.gray, 1));

apkFilePath.addMouseListener(selectFileListener);
button.addActionListener(buttonDownListener);
button2.addActionListener(buttonClearListener);

setLayout(new FlowLayout());// null布局
// setLayout(new GridLayout(2, 3));
add(label);

add(apkFilePath);
add(button);
add(button2);

add(BorderLayout.SOUTH, apkInfoArea);

}

public static void run(final JFrame frame, final int width, final int height) {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
// frame.setTitle(frame.getClass().getSimpleName());
frame.setTitle("Apk分析工具");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(width, height);
frame.setVisible(true);
frame.setResizable(false);
}
});
}

public static void main(String[] args) throws InterruptedException {
run(new ApkMain(), 560, 300);
}

}


由于之前对Swing开发不怎么熟悉,尤其在eclipse下进行界面开发,虽然有一些插件,但总没怎么装好。于是裸写,将就下。



本文的目的主要是希望引出下一篇,eclipse下的jar包(有依赖包)时的打jar包问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java apk