Manifest Explorer

来源:互联网 发布:python 设计模式的书 编辑:程序博客网 时间:2024/05/12 15:09

看名字就知道是解析apk里面的manifest的。

            protected String[] getPackages() {

               ArrayList<String> res = newArrayList<String>();

               List<PackageInfo> l =getPackageManager().getInstalledPackages(

                               PackageManager.GET_DISABLED_COMPONENTS);

               for (PackageInfo pi : l)

                       res.add(pi.packageName);

               Collections.sort(res);

               return res.toArray(new String[res.size()]);

        }

        protected booleanconfigForPackage(String packageName) {

               if (packageName == null ||packageName == "")

                       packageName ="android";

               AssetManager initAM = mCurAm;

               Resources initRes =mCurResources;

               try {

                       mCurAm = createPackageContext(packageName,0).getAssets();

                       mCurResources = newResources(mCurAm, getResources()

                                      .getDisplayMetrics(),null);

               } catch(NameNotFoundException name) {

                       Toast.makeText(this,"Error, couldn't create package context: "

                                      + name.getLocalizedMessage(),Toast.LENGTH_LONG);

                       mCurAm = initAM;

                       mCurResources = initRes;

                       return false;

               } catch (RuntimeExceptionunexpected) {

                       Log.e(MANIFEST_TAG,"error configuring for package: " + packageName

                                      + "" + unexpected.getMessage());

                       mCurAm = initAM;

                       mCurResources = initRes;

                       return false;

               }

               return true;

        }

 

        protected void updateView() {

               this.mOut.setText("");

               try {

                       XmlResourceParser xml =null;

                       xml =mCurAm.openXmlResourceParser("AndroidManifest.xml");

                       this.mInput.setText("/sdcard/"+ getPkgName() + ".txt");

                       this.mOut.append(getXMLText(xml,mCurResources));

               } catch (IOException ioe) {

                       this.showError("ReadingXML", ioe);

               }

        }

protectedCharSequence getXMLText(XmlResourceParser xrp,

                       ResourcescurrentResources) {

               StringBuffer sb = newStringBuffer();

               int indent = 0;

               try {

                       int eventType =xrp.getEventType();

                       while (eventType !=XmlPullParser.END_DOCUMENT) {

                               // for sb

                               switch(eventType) {

                               caseXmlPullParser.START_TAG:

                                      indent +=1;

                                      sb.append("\n");

                                      insertSpaces(sb,indent);

                                      sb.append("<"+ xrp.getName());

                                      sb.append(getAttribs(xrp,currentResources));

                                      sb.append(">");

                                      break;

                               caseXmlPullParser.END_TAG:

                                      indent -=1;

                                      sb.append("\n");

                                      insertSpaces(sb,indent);

                                      sb.append("</"+ xrp.getName() + ">");

                                      break;

 

                               caseXmlPullParser.TEXT:

                                      sb.append(""+ xrp.getText());

                                      break;

 

                               caseXmlPullParser.CDSECT:

                                      sb.append("<!CDATA["+ xrp.getText() + "]]>");

                                      break;

 

                               caseXmlPullParser.PROCESSING_INSTRUCTION:

                                      sb.append("<?"+ xrp.getText() + "?>");

                                      break;

 

                               caseXmlPullParser.COMMENT:

                                      sb.append("<!--"+ xrp.getText() + "-->");

                                      break;

                               }

                               eventType =xrp.nextToken();

                       }

               } catch (IOException ioe) {

                       showError("ReadingXML", ioe);

               } catch(XmlPullParserException xppe) {

                       showError("ParsingXML", xppe);

               }

               return sb;

        }