1

我必须阅读如下所示的 android 清单文件,

<?xml version="1.0" encoding="utf-8"?>
<manifest android:versionCode="92" android:versionName="1.9.7B92" package="com.rechild.advancedtaskkiller"
  xmlns:android="http://schemas.android.com/apk/res/android">
    <application android:label="@string/app_name" android:icon="@drawable/icon2">
        <activity android:label="@string/app_name" android:name=".AdvancedTaskKiller" android:launchMode="singleTask" android:configChanges="keyboardHidden|orientation">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="com.rechild.intent.action.ADVANCED_TASK_KILLER_FREE" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity android:name=".NewSettings" />
        <activity android:name=".IgnoreListActivity">
            <intent-filter>
                <action android:name="com.rechild.advancedtaskkiller.intent.action.IgnoreList" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity android:name=".HealthActivity" />
        <activity android:name=".LogActivity" />
        <activity android:name=".HelpActivity" />
        <activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation" />
        <receiver android:name=".AutoStartReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
        <service android:name=".BackService" android:exported="true" />
        <receiver android:label="@string/app_name" android:icon="@drawable/icon2" android:name=".OneClickAppWidgetProvider">
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
            <meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_provider" />
        </receiver>
        <receiver android:name=".AlarmReceiver" />
    </application>
    <uses-permission android:name="android.permission.RESTART_PACKAGES" />
    <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-sdk android:minSdkVersion="3" />
    <supports-screens android:anyDensity="true" android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" />
</manifest>

我的目标是读取所有活动元素中的android:name属性的值。我怎样才能在java中实现呢?

4

1 回答 1

0

我解决了这个问题,这是我的代码,

package mytest;

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 *
 * @author 
 */
public class ManifestParser {

    public static void Parse(String fileName) {

    try 
    {
        File file = new File(fileName);
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(file);
        doc.getDocumentElement().normalize();
        System.out.println("Root element " + doc.getDocumentElement().getNodeName());
        NodeList nodeLst = doc.getElementsByTagName("application");
        System.out.println("Information of all activities");

        for (int s = 0; s < nodeLst.getLength(); s++) {


            Node fstNode = nodeLst.item(s);

          if (fstNode.getNodeType() == Node.ELEMENT_NODE) {

            Element fstElmnt = (Element) fstNode;
            NodeList fstNmElmntLst = fstElmnt.getChildNodes();
            int sz=fstNmElmntLst.getLength();


            for(int nodes=0;nodes<sz;nodes++)
            {
                Node tempNode=fstNmElmntLst.item(nodes);
                if (tempNode.getNodeType() == Node.ELEMENT_NODE)
                {
                    Element tmpElmnt = (Element) tempNode;
                    NamedNodeMap nn=tmpElmnt.getAttributes();

                    if(tmpElmnt.getNodeName().equals("activity"))System.out.println("a: "+tmpElmnt.getAttribute("android:name"));
                }
            }

          }

       }
    } catch (Exception e) {
      e.printStackTrace();
    }
   }



}
于 2012-09-28T01:50:48.130 回答