APK分析工具
2014-01-16 17:48
411 查看
上一篇博文中已经阐述了 Apk的部分属性的获取方式。
下面将程序封装起来,通过对话框方式方便操作。
由于之前对Swing开发不怎么熟悉,尤其在eclipse下进行界面开发,虽然有一些插件,但总没怎么装好。于是裸写,将就下。
本文的目的主要是希望引出下一篇,eclipse下的jar包(有依赖包)时的打jar包问题。
下面将程序封装起来,通过对话框方式方便操作。
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包问题。
相关文章推荐
- Android Studio APK分析工具--APK Analyzer
- Android平台APK分析工具包androguard的部署使用和原理分析
- apk分析工具(aapt.exe)
- 安卓APK分析工具APKAnalyser的使用
- 分析apk工具aapt的使用,解析其原理
- APK文件分析工具:AppMon
- APK分析工具:ApkAnalyser
- Android APK分析工具
- 转载分析apk工具aapt的使用,解析其原理
- 快速分析apk工具aapt的使用
- Android Studio APK分析工具--APK Analyzer
- ApkToolPlus 是一个可视化的跨平台 apk 分析工具,使用 java 语言开发的一个桌面应用。
- Android平台APK分析工具包androguard的部署使用和原理分析
- Android快速分析apk工具aapt的使用教程
- ApkToolPlus,一个可视化的跨平台 apk 分析工具
- Android快速分析apk工具aapt的使用教程
- aapt 快速分析apk工具aapt的使用
- Android apk 分析工具:APK Analyzer
- Linux下的网络协议分析工具-tcpdump快速入门手册
- [Android Tools] baksmali|Apktool|ShakaApktool 简体中文汉化版|APK反编译工具(更新)