Pure Java Environment get APK information: Package name, version, version number, size, permissions ...
Pure Java Environment Get APK information requires two packages:Axmlprinter2.jar and Jdom.jar, used to decompile XML and parse XML
Project directory
This class is the one that gets the APK information
public class Apkutil {private static final Namespace NS = Namespace.getnamespace ("http://schemas.android.com/apk/res/ Android "), @SuppressWarnings (" unchecked ") public static string Getapkinfo (String apkpath) {Apkinfo apkinfo = new Apkinfo ( ); Saxbuilder builder = new Saxbuilder ();D ocument Document = null;try{document = Builder.build (Getxmlinputstream (Apkpath)) ;} catch (Exception e) {e.printstacktrace ();} Element root = Document.getrootelement ();//Node-->manifestapkinfo.setversioncode (Root.getattributevalue (" Versioncode ", NS)); Apkinfo.setversionname (Root.getattributevalue (" Versionname ", NS)); Apkinfo.setapkpackage ( Root.getattributevalue ("package", NS)); Element elemusesdk = Root.getchild ("USES-SDK");//child node-->uses-sdkapkinfo.setminsdkversion ( Elemusesdk.getattributevalue ("Minsdkversion", NS)); List listpermission = Root.getchildren ("uses-permission");//child node is a collection list permissions = new ArrayList (); for (Object object:listpermission) {String permission = ((Element) object). Getattributevalue ("name", NS);Permissions.add (permission);} Apkinfo.setuses_permission (permissions); String s = root.getattributes (). toString (); String c[] = S.split (","); String versioncode = null; String versionname = null; String PackageName = Null;for (string a:c) {if (A.contains ("Versioncode")) {Versioncode = a.substring (A.indexof (" Versioncode=\ "") +13, A.lastindexof ("\" "));} if (A.contains ("Versionname")) {versionname = a.substring (A.indexof ("versionname=\") +13, A.lastindexof ("\" "));} if (A.contains ("package")) {PackageName = a.substring (A.indexof ("package=\") +9, A.lastindexof ("\" "));}} System.out.println ("\ n version number:" +versioncode+ "\ nthe version name:" +versionname+ "\ n Package Name:" +packagename "); String str = "\ n version number:" \ +versioncode+ "\ n version name:" +versionname+ "\ n Package Name:" +packagename;//return root.getattributes (). ToString ( ); return str;} private static InputStream Getxmlinputstream (String apkpath) {InputStream InputStream = Null;inputstream Xmlinputstream = NULL; ZipFile ZipFile = null;try {zipfile = new ZipFile (Apkpath); ZipEntry zipentry = new ZipEntry ("Androidmanifest. xml "); InputStream = Zipfile.getinputstream (zipentry); Axmlprinter xmlprinter = new Axmlprinter (); Xmlprinter.startprinf (inputstream); xmlinputstream = new Bytearrayinputstream (Xmlprinter.getbuf (). toString (). GetBytes ("UTF-8")); catch (IOException e) {e.printstacktrace (); try {inputstream.close (); Zipfile.close ();} catch (IOException E1) { E1.printstacktrace ();}} return xmlinputstream;}}
Directly on the code, next time to mend the explanation.
The following is a main class of interface, mainly read the APK location and size
/** * * @author Administrator */public class Maintest extends Javax.swing.JFrame {private File f = null; Private list<string> pathList = new arraylist<string> (); /** * Creates new form Newjframe */public Maintest () {initcomponents (); }/** * This method was called from within the constructor to initialize the form. * Warning:do not modify this code. The content of this method was always * regenerated by the Form Editor. */@SuppressWarnings ("unchecked")//<editor-fold defaultstate= "collapsed" desc= "Generated Code" >//gen-begin:i nitcomponents private void Initcomponents () {jButton1 = new Javax.swing.JButton (); JScrollPane1 = new Javax.swing.JScrollPane (); JTEXTAREA1 = new Javax.swing.JTextArea (); Setdefaultcloseoperation (Javax.swing.WindowConstants.EXIT_ON_CLOSE); Jbutton1.settext ("Select File location"); Jbutton1.addactionlistener (New Java.awt.event.ActionListener () { public void actionperformed (Java.awt.event.ActionEvent evt) {Openfilepath (evt); } }); Jtextarea1.setcolumns (20); Jtextarea1.setfont (New Java.awt.Font ("Arial", 0, 20)); Jtextarea1.setrows (5); Jscrollpane1.setviewportview (JTEXTAREA1); Javax.swing.GroupLayout layout = new Javax.swing.GroupLayout (Getcontentpane ()); Getcontentpane (). setlayout (layout); Layout.sethorizontalgroup (Layout.createparallelgroup (Javax.swing.GroupLayout.Alignment.LEADING). Ad DGroup (Layout.createsequentialgroup (). Addcontainergap (). AddGroup (Layout.createparallelgrou P (Javax.swing.GroupLayout.Alignment.LEADING). AddComponent (JScrollPane1, Javax.swing.GroupLayout.DEFAUL T_size, 542, Short.max_value). AddGroup (Layout.createsequentialgroup (). Addcompo Nent (JButton1). Addgap (0, 0, short.max_value))) . Addcontainergap ())); Layout.setverticalgroup (Layout.createparallelgroup (Javax.swing.GroupLayout.Alignment.LEADING). ADDG Roup (Layout.createsequentialgroup (). Addcontainergap (). AddComponent (JButton1) . Addpreferredgap (Javax.swing.LayoutStyle.ComponentPlacement.UNRELATED). AddComponent (JScrollPane1, javax. Swing. Grouplayout.preferred_size, 218, Javax.swing.GroupLayout.PREFERRED_SIZE). Addcontainergap ()); Pack (); }//</editor-fold>//gen-end:initcomponents private void Openfilepath (Java.awt.event.ActionEvent evt) {// Gen-first:event_openfilepath//TODO Add your handling code here:int result = 0; String path = null; JFileChooser filechooser = new JFileChooser (); FileSystemView FSV = Filesystemview.getfilesystemview (); Note that the important sentence here is System.out.println (Fsv.gethomedirectory ()); Get Desktop Path Filechooser.setcurrentdirectory (Fsv.gethomedirectory ()); Filechooser.setdialogtitle ("Select File path"); Filechooser.setapprovebuttontext ("OK"); Filechooser.setfileselectionmode (jfilechooser.directories_only); result = Filechooser.showopendialog (this); if (jfilechooser.approve_option = = result) {path = Filechooser.getselectedfile (). GetPath (); System.out.println ("Path:" + path); } if (Path==null | | path.equals ("")) {return; } jtextarea1.settext (""); f = new File (path); if (f.exists ()) {getList (f); for (String filepath:pathlist) {File File = new file (FilePath); if (!file.exists ()) {break; } try {String str = jtextarea1.gettext (); String s = "file name:" + file.getname () + "\ n" + "size:" + getfilesize (file) + "Bit;" + (float) getfilesize (file)/(float) 1024/(float) 1024+ "MB "+apkutil.getapkinfo (File.getpath ()) +" \ n "; Jtextarea1.settext (s + str); } catch (Exception ex) {Logger.getlogger (MainTest.class.getName ()). log (Level.severe, NULL, ex); }}}} private void GetList (file file) {if (File.isfile () && file.getname (). E Ndswith (". apk")) {Pathlist.add (File.getpath ());} Else{file filelist[] = File.listfiles (); for (File f:filelist) {try {getList (f);} catch (Exception e) {//TODO Auto-generat Ed catch Blocke.printstacktrace ();}}} /** * Gets the specified file size * @param f * @return * @throws Exception */Private long getfilesize (file F Ile) throws Exception {long size = 0; if (file.exists ()) {FileInputStream FIS = null; FIS = new FileInputStream (file); Size = Fis.available (); } else {file.createnewfile (); } return size; }/** * @parAm args the command line arguments * * public static void Main (String args[]) {/* Set the Nimbus look and FE El *///<editor-fold defaultstate= "collapsed" desc= "look and feel setting code (optional)" >/* If Ni MBus (introduced in Java SE 6) isn't available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */try { For (Javax.swing.UIManager.LookAndFeelInfo info:javax.swing.UIManager.getInstalledLookAndFeels ()) { if ("Nimbus". Equals (Info.getname ())) {Javax.swing.UIManager.setLookAndFeel (Info.getclassname ()); Break }}} catch (ClassNotFoundException ex) {Java.util.logging.Logger.getLogger (MAINTEST.CLASS.G Etname ()). log (Java.util.logging.Level.SEVERE, NULL, ex); } catch (Instantiationexception ex) {Java.util.logging.Logger.GetLogger (MainTest.class.getName ()). log (Java.util.logging.Level.SEVERE, NULL, ex); } catch (Illegalaccessexception ex) {Java.util.logging.Logger.getLogger (MainTest.class.getName ()). log (Java.uti L.logging.level.severe, NULL, ex); } catch (Javax.swing.UnsupportedLookAndFeelException ex) {Java.util.logging.Logger.getLogger (MainTest.class.ge Tname ()). log (Java.util.logging.Level.SEVERE, NULL, ex); }//</editor-fold>/* Create and display the form */java.awt.EventQueue.invokeLater (new Runnab Le () {public void run () {new Maintest (). setvisible (True); } }); }//Variables declaration-do not modify//gen-begin:variables private Javax.swing.JButton jButton1; Private Javax.swing.JScrollPane jScrollPane1; Private Javax.swing.JTextArea jTextArea1; End of Variables Declaration//gen-end:variables}
Example test, which was found in Jinshan
Here only check the package name, version, version number, size, no check permissions, permissions are I blocked off
List listpermission = Root.getchildren ("uses-permission");//child node is a collection list permissions = new ArrayList (); for (Object object:listpermission) {String permission = ((Element) object). Getattributevalue ("name", NS);p Ermissions.add ( permission);} Apkinfo.setuses_permission (permissions);
This section is the code that gets the permission
SOURCE download
Respect the original, reproduced please specify the source:http://blog.csdn.net/chillax_li/article/details/41850863
Pure Java Environment Get APK information (package name, version, version number, size, permissions ...), Java language writing PC-side get apk information