Java 类soot.jimple.infoflow.android.axml.AXmlNode 实例源码

项目:FuzzDroid    文件:UtilApk.java   
@SuppressWarnings("unchecked")
private static void addMaxPrioForSMSReceiver(ProcessManifest manifest) {
    for(AXmlNode receiver : manifest.getReceivers()) {
        for(AXmlNode receiverChild : receiver.getChildren()) {
            if(receiverChild.getTag().equals("intent-filter")) {
                //search for SMS receiver
                for(AXmlNode childChild : receiverChild.getChildren()) {
                    if(childChild.getTag().equals("action")) {
                        if(childChild.hasAttribute("name") && ((String)childChild.getAttribute("name").getValue()).equalsIgnoreCase("android.provider.Telephony.SMS_RECEIVED")){
                            //prepare the priority filter
                            if(receiverChild.hasAttribute("priority")) 
                                ((AXmlAttribute<Integer>)receiverChild.getAttribute("priority")).setValue(Integer.MAX_VALUE);
                            else {
                                AXmlAttribute<Integer> attr = new AXmlAttribute<Integer>("priority", Integer.MAX_VALUE, ANDROID_NAMESPACE);
                                receiverChild.addAttribute(attr);
                            }
                        }
                    }
                }
            }
        }
    }
}
项目:JAADAS    文件:ProcessManifest.java   
private boolean isComponentExported(AXmlNode node)
{
    boolean accessible = false;
    AXmlAttribute<?> attrEnabled = node.getAttribute("enabled");
    if (attrEnabled == null || !attrEnabled.getValue().equals(Boolean.FALSE)) {
        AXmlAttribute<?> attrExported = node.getAttribute("exported");
        if (attrExported != null){
            if(attrExported.getValue().equals(Boolean.TRUE)) {
                accessible = true;
            }
            else if(attrExported.getValue().equals(Boolean.FALSE))
            {
                accessible = false;
            }
        }
        else
        {
            if(node.getChildrenWithTag("intent-filter").size() != 0) {
                accessible = true;
            }
        }
    }
    return accessible;
}
项目:JAADAS    文件:ProcessManifest.java   
private void checkAndAddComponent(Set<String> entryPoints, AXmlNode node) {
    AXmlAttribute<?> attrEnabled = node.getAttribute("enabled");
    if (attrEnabled == null || !attrEnabled.getValue().equals(Boolean.FALSE)) {
        AXmlAttribute<?> attr = node.getAttribute("name");
        if (attr != null)
            entryPoints.add(expandClassName((String) attr.getValue()));
        else {
            // This component does not have a name, so this might be obfuscated
            // malware. We apply a heuristic.
            for (Entry<String, AXmlAttribute<?>> a : node.getAttributes().entrySet())
                if (a.getValue().getName().isEmpty()
                        && a.getValue().getType() == AxmlVisitor.TYPE_STRING) {
                    String name = (String) a.getValue().getValue();
                    if (isValidComponentName(name))
                        entryPoints.add(expandClassName(name));
                }
        }
    }
}
项目:JAADAS    文件:ProcessManifest.java   
/**
 * Gets the permissions this application requests
 * @return The permissions requested by this application
 * @return
 */
public Set<String> getPermissions() {
    List<AXmlNode> usesPerms = this.manifest.getChildrenWithTag("uses-permission");
    Set<String> permissions = new HashSet<String>();
    for (AXmlNode perm : usesPerms) {
        AXmlAttribute<?> attr = perm.getAttribute("name");
        if (attr != null)
            permissions.add((String) attr.getValue());
        else {
            // The required "name" attribute is missing, so we collect all empty
            // attributes as a best-effort solution for broken malware apps
            for (AXmlAttribute<?> a : perm.getAttributes().values())
                if (a.getType() == AxmlVisitor.TYPE_STRING && a.getName().isEmpty())
                    permissions.add((String) a.getValue());
        }
    }
    return permissions;
}
项目:JAADAS    文件:ProcessManifest.java   
/**
 * Returns all activity nodes that are "launchable", i.e. that are called when the user 
 * clicks on the button in the launcher.
 * @return
 */
public Set<AXmlNode> getLaunchableActivities() {
    Set<AXmlNode> allLaunchableActivities = new HashSet<AXmlNode>();

    for(AXmlNode activity : activities) {
        for(AXmlNode activityChildren : activity.getChildren()) {
            if(activityChildren.getTag().equals("intent-filter")) {
                boolean actionFilter = false;
                boolean categoryFilter = false;
                for(AXmlNode intentFilter : activityChildren.getChildren()) {
                    if(intentFilter.toString().equals("<action name=\"android.intent.action.MAIN\">"))
                        actionFilter = true;
                    else if(intentFilter.toString().equals("<category name=\"android.intent.category.LAUNCHER\">"))
                        categoryFilter = true;
                }

                if(actionFilter && categoryFilter)
                    allLaunchableActivities.add(activity);
            }
        }

    }

    return allLaunchableActivities;
}
项目:DroidRA    文件:ProcessManifest.java   
/**
 * Initialises the {@link ProcessManifest} by parsing the manifest provided by the given {@link InputStream}.
 * 
 * @param   manifestIS              InputStream for an AppManifest.
 * @throws  IOException             if an I/O error occurs.
 * @throws  XmlPullParserException  can occur due to a malformed manifest.
 */
protected void handle(InputStream manifestIS) throws IOException, XmlPullParserException {
    this.axml = new AXmlHandler(manifestIS);

    // get manifest node
    List<AXmlNode> manifests = this.axml.getNodesWithTag("manifest");
    if(manifests.isEmpty()) throw new RuntimeException("Manifest contains no manifest node");
    else if(manifests.size() > 1) throw new RuntimeException("Manifest contains more than one manifest node");
    this.manifest = manifests.get(0);

    // get application node
    List<AXmlNode> applications = this.manifest.getChildrenWithTag("application");
    if(applications.isEmpty()) throw new RuntimeException("Manifest contains no application node");
    else if(applications.size() > 1) throw new RuntimeException("Manifest contains more than one application node");
    this.application = applications.get(0);

    // Get components
    this.providers = this.axml.getNodesWithTag("provider");
    this.services = this.axml.getNodesWithTag("service");
    this.activities = this.axml.getNodesWithTag("activity");
    this.receivers = this.axml.getNodesWithTag("receiver");
}
项目:DroidRA    文件:ProcessManifest.java   
private void checkAndAddComponent(Set<String> entryPoints, AXmlNode node) {
    AXmlAttribute<?> attrEnabled = node.getAttribute("enabled");
    if (attrEnabled == null || !attrEnabled.getValue().equals(Boolean.FALSE)) {
        AXmlAttribute<?> attr = node.getAttribute("name");
        if (attr != null)
            entryPoints.add(expandClassName((String) attr.getValue()));
        else {
            // This component does not have a name, so this might be obfuscated
            // malware. We apply a heuristic.
            for (Entry<String, AXmlAttribute<?>> a : node.getAttributes().entrySet())
                if (a.getValue().getName().isEmpty()
                        && a.getValue().getType() == AxmlVisitor.TYPE_STRING) {
                    String name = (String) a.getValue().getValue();
                    if (isValidComponentName(name))
                        entryPoints.add(expandClassName(name));
                }
        }
    }
}
项目:DroidRA    文件:ProcessManifest.java   
/**
 * Gets the permissions this application requests
 * @return The permissions requested by this application
 * @return
 */
public Set<String> getPermissions() {
    List<AXmlNode> usesPerms = this.manifest.getChildrenWithTag("uses-permission");
    Set<String> permissions = new HashSet<String>();
    for (AXmlNode perm : usesPerms) {
        AXmlAttribute<?> attr = perm.getAttribute("name");
        if (attr != null)
            permissions.add((String) attr.getValue());
        else {
            // The required "name" attribute is missing, so we collect all empty
            // attributes as a best-effort solution for broken malware apps
            for (AXmlAttribute<?> a : perm.getAttributes().values())
                if (a.getType() == AxmlVisitor.TYPE_STRING && a.getName().isEmpty())
                    permissions.add((String) a.getValue());
        }
    }
    return permissions;
}
项目:DroidRA    文件:ProcessManifest.java   
/**
 * Returns all activity nodes that are "launchable", i.e. that are called when the user 
 * clicks on the button in the launcher.
 * @return
 */
public Set<AXmlNode> getLaunchableActivities() {
    Set<AXmlNode> allLaunchableActivities = new HashSet<AXmlNode>();

    for(AXmlNode activity : activities) {
        for(AXmlNode activityChildren : activity.getChildren()) {
            if(activityChildren.getTag().equals("intent-filter")) {
                boolean actionFilter = false;
                boolean categoryFilter = false;
                for(AXmlNode intentFilter : activityChildren.getChildren()) {
                    if(intentFilter.toString().equals("<action name=\"android.intent.action.MAIN\">"))
                        actionFilter = true;
                    else if(intentFilter.toString().equals("<category name=\"android.intent.category.LAUNCHER\">"))
                        categoryFilter = true;
                }

                if(actionFilter && categoryFilter)
                    allLaunchableActivities.add(activity);
            }
        }

    }

    return allLaunchableActivities;
}
项目:FuzzDroid    文件:FrameworkEventManager.java   
private boolean isLaunchableAcitivity(SootClass sc, ProcessManifest manifest) {
    Set<AXmlNode> launchableActivities = manifest.getLaunchableActivities();
    for(AXmlNode node : launchableActivities) {
        if(node.hasAttribute("name")) {
            String activityName = (String)node.getAttribute("name").getValue();
            activityName = getFullyQualifiedName(manifest, activityName);

            if(activityName.equals(sc.getName()))
                return true;
        }
    }
    return false;
}
项目:FuzzDroid    文件:UtilApk.java   
private static void addComponentCallerService(ProcessManifest androidManifest) {
    AXmlNode componentCallerService = new AXmlNode("service", null, androidManifest.getApplication());
    AXmlAttribute<String> nameAttribute = new AXmlAttribute<String>("name", UtilInstrumenter.COMPONENT_CALLER_SERVICE_HELPER,  ANDROID_NAMESPACE);
    AXmlAttribute<String> exportedAttribute = new AXmlAttribute<String>("exported", "false",  ANDROID_NAMESPACE);
    componentCallerService.addAttribute(nameAttribute);
    componentCallerService.addAttribute(exportedAttribute);

    androidManifest.addService(componentCallerService);
}
项目:FuzzDroid    文件:UtilApk.java   
private static void addHookinHelperAsApplicationIfNecessary(ProcessManifest androidManifest){
    AXmlNode application = androidManifest.getApplication();
    if(!application.hasAttribute("name")) {
        AXmlAttribute<String> nameAttribute = new AXmlAttribute<String>("name", UtilInstrumenter.HELPER_APPLICATION_FOR_HOOKING,  ANDROID_NAMESPACE);
        application.addAttribute(nameAttribute);
    }
}
项目:FuzzDroid    文件:UtilApk.java   
private static void addTracingService(ProcessManifest androidManifest) {
    AXmlNode tracingService = new AXmlNode("service", null, androidManifest.getApplication());
    AXmlAttribute<String> nameAttribute = new AXmlAttribute<String>("name", UtilInstrumenter.HELPER_SERVICE_FOR_PATH_TRACKING,  ANDROID_NAMESPACE);
    AXmlAttribute<String> exportedAttribute = new AXmlAttribute<String>("exported", "false",  ANDROID_NAMESPACE);
    tracingService.addAttribute(nameAttribute);
    tracingService.addAttribute(exportedAttribute);

    androidManifest.addService(tracingService);
}
项目:JAADAS    文件:LayoutFileParser.java   
/**
 * Parses the attributes required for a layout file inclusion
 * @param layoutFile The full path and file name of the file being parsed
 * @param rootNode The AXml node containing the attributes
 */
private void parseIncludeAttributes(String layoutFile, AXmlNode rootNode) {
    for (Entry<String, AXmlAttribute<?>> entry : rootNode.getAttributes().entrySet()) {
        String attrName = entry.getKey().trim();
        AXmlAttribute<?> attr = entry.getValue();

        if (attrName.equals("layout")) {
            if ((attr.getType() == AxmlVisitor.TYPE_REFERENCE || attr.getType() == AxmlVisitor.TYPE_INT_HEX)
                    && attr.getValue() instanceof Integer) {
                // We need to get the target XML file from the binary manifest
                AbstractResource targetRes = resParser.findResource((Integer) attr.getValue());
                if (targetRes == null) {
                    System.err.println("Target resource " + attr.getValue() + " for layout include not found");
                    return;
                }
                if (!(targetRes instanceof StringResource)) {
                    System.err.println("Invalid target node for include tag in layout XML, was "
                            + targetRes.getClass().getName());
                    return;
                }
                String targetFile = ((StringResource) targetRes).getValue();

                // If we have already processed the target file, we can
                // simply copy the callbacks we have found there
                if (callbackMethods.containsKey(targetFile))
                    for (String callback : callbackMethods.get(targetFile))
                        addCallbackMethod(layoutFile, callback);
                else {
                    // We need to record a dependency to resolve later
                    addToMapSet(includeDependencies, targetFile, layoutFile);
                }
            }
        }
    }
}
项目:JAADAS    文件:ProcessManifest.java   
private void collectIntentFilters(AXmlNode node)
{
    String componentName = (String) node.getAttribute("name").getValue();
    if(node.getChildrenWithTag("intent-filter").size() != 0) {
        List<IntentFilter> intentFilters = new ArrayList<>();
        List<AXmlNode> currentFilters = node.getChildrenWithTag("intent-filter");
        for(AXmlNode filter: currentFilters)
        {
            IntentFilter intentFilter = new IntentFilter();
            //collect action
            List<AXmlNode> actionNodes = filter.getChildrenWithTag("action");
            //assume action size == 1
            List<String> actions = new ArrayList<>();
            for(AXmlNode actionNode: actionNodes)
            {
                actions.add((String) actionNode.getAttribute("name").getValue());
            }
            List<AXmlNode> categoryNodes = filter.getChildrenWithTag("category");
            //assume action size == 1
            List<String> categories = new ArrayList<>();
            for(AXmlNode categoryNode: categoryNodes)
            {
                categories.add((String) categoryNode.getAttribute("name").getValue());
            }
            intentFilter.setActions(actions);
            intentFilter.setCategories(categories);
            intentFilters.add(intentFilter);
        }

        this.filters.put(expandClassName(componentName), intentFilters);
    }
    else{
        this.filters.put(expandClassName(componentName), Collections.<IntentFilter>emptyList());
    }
}
项目:JAADAS    文件:ProcessManifest.java   
private void checkPublicAccessibleCompoenent(Set<String> entryPoints, AXmlNode node)
   {
    if (isComponentExported(node)) {
           AXmlAttribute<?> attr = node.getAttribute("name");
           if (attr != null)
               entryPoints.add(expandClassName((String) attr.getValue()));
       }
}
项目:JAADAS    文件:ProcessManifest.java   
/**
 * Iterates over <code>list</code> and checks which node has the given <code>name</code>.
 * 
 * @param   list    contains nodes.
 * @param   name    the node's name.
 * @return  node with <code>name</code>.
 */
protected AXmlNode getNodeWithName(List<AXmlNode> list, String name) {
    for (AXmlNode node : list) {
        Object attr = node.getAttributes().get("name");
        if(attr != null && attr.equals(name))
            return node;
    }

    return null;
}
项目:JAADAS    文件:ProcessManifest.java   
/**
 * Gets the minimum SDK version on which this application is supposed to run
 * @return The minimum SDK version on which this application is supposed to run
 */
public int getMinSdkVersion() {
    List<AXmlNode> usesSdk = this.manifest.getChildrenWithTag("uses-sdk");
    if (usesSdk == null || usesSdk.isEmpty())
        return -1;
    AXmlAttribute<?> attr = usesSdk.get(0).getAttribute("minSdkVersion");

    if (attr == null)
        return -1;

    if (attr.getValue() instanceof Integer)
        return (Integer) attr.getValue();

    return Integer.getInteger((String) attr.getValue());        
}
项目:JAADAS    文件:ProcessManifest.java   
/**
 * Gets the target SDK version for which this application was developed
 * @return The target SDK version for which this application was developed
 */
public int targetSdkVersion() {
    List<AXmlNode> usesSdk = this.manifest.getChildrenWithTag("uses-sdk");
    if (usesSdk == null || usesSdk.isEmpty())
        return -1;
    AXmlAttribute<?> attr = usesSdk.get(0).getAttribute("targetSdkVersion");

    if (attr == null)
        return -1;

    if (attr.getValue() instanceof Integer)
        return (Integer) attr.getValue();

    return Integer.getInteger((String) attr.getValue());        
}
项目:JAADAS    文件:AbstractBinaryXMLFileParser.java   
@Override
public List<AXmlNode> getNodesWithTag(String tag) {
    if(this.nodesWithTag.containsKey(tag))
        return new ArrayList<AXmlNode>(this.nodesWithTag.get(tag));
    else
        return Collections.emptyList();
}
项目:JAADAS    文件:AXML20Parser.java   
@Override
    public NodeVisitor child(String ns, String name) {
    AXmlNode childNode = new AXmlNode(name == null ? null : name.trim(),
            ns == null ? null : ns.trim(), node);
    if (name != null)
        addPointer(name, childNode);
    return new MyNodeVisitor(childNode);
}
项目:DroidRA    文件:ProcessManifest.java   
/**
 * Iterates over <code>list</code> and checks which node has the given <code>name</code>.
 * 
 * @param   list    contains nodes.
 * @param   name    the node's name.
 * @return  node with <code>name</code>.
 */
protected AXmlNode getNodeWithName(List<AXmlNode> list, String name) {
    for (AXmlNode node : list) {
        Object attr = node.getAttributes().get("name");
        if(attr != null && attr.equals(name))
            return node;
    }

    return null;
}
项目:DroidRA    文件:ProcessManifest.java   
/**
 * Gets the minimum SDK version on which this application is supposed to run
 * @return The minimum SDK version on which this application is supposed to run
 */
public int getMinSdkVersion() {
    List<AXmlNode> usesSdk = this.manifest.getChildrenWithTag("uses-sdk");
    if (usesSdk == null || usesSdk.isEmpty())
        return -1;
    AXmlAttribute<?> attr = usesSdk.get(0).getAttribute("minSdkVersion");

    if (attr == null)
        return -1;

    if (attr.getValue() instanceof Integer)
        return (Integer) attr.getValue();

    return Integer.parseInt("" + attr.getValue());      
}
项目:DroidRA    文件:ProcessManifest.java   
/**
 * Gets the target SDK version for which this application was developed
 * @return The target SDK version for which this application was developed
 */
public int targetSdkVersion() {
    List<AXmlNode> usesSdk = this.manifest.getChildrenWithTag("uses-sdk");
    if (usesSdk == null || usesSdk.isEmpty())
        return -1;
    AXmlAttribute<?> attr = usesSdk.get(0).getAttribute("targetSdkVersion");

    if (attr == null)
        return -1;

    if (attr.getValue() instanceof Integer)
        return (Integer) attr.getValue();

    return Integer.parseInt("" + attr.getValue());      
}
项目:DroidForce    文件:UpdateManifestAndCodeForWaitPDP.java   
/**
 * Get the package name of the application
 * @param apkFileLocation
 * @return
 */
public static String getApplicationPackageName(String apkFileLocation) {
    String packageName = null;
    try {
        ProcessManifest pm = new ProcessManifest(apkFileLocation);
        AXmlHandler axmlh = pm.getAXml(); 

        // Find main activity and remove main intent-filter
        List<AXmlNode> anodes = axmlh.getNodesWithTag("manifest");
        for (AXmlNode an: anodes) {
            boolean hasMain = false;
            boolean hasLauncher = false;
            AXmlNode filter = null;

            AXmlAttribute aname = an.getAttribute("package");
            String aval = (String)aname.getValue();
            packageName = aval;
            System.out.println("package: "+ packageName);
            break;

        }
    } catch (IOException | XmlPullParserException ex) {
        System.err.println("Could not read Android manifest file: " + ex.getMessage());
        throw new RuntimeException(ex);
    }

    return packageName;
}
项目:JAADAS    文件:LayoutFileParser.java   
/**
 * Parses the layout file with the given root node
 * @param layoutFile The full path and file name of the file being parsed
 * @param rootNode The root node from where to start parsing
 */
private void parseLayoutNode(String layoutFile, AXmlNode rootNode) {
    if (rootNode.getTag() == null || rootNode.getTag().isEmpty()) {
        System.err.println("Encountered a null or empty node name "
                + "in file " + layoutFile + ", skipping node...");
        return;
    }

    String tname = rootNode.getTag().trim();
    if (tname.equals("dummy")) {
        // dummy root node, ignore it
    }
    // Check for inclusions
    else if (tname.equals("include")) {
        parseIncludeAttributes(layoutFile, rootNode);
    }
    // The "merge" tag merges the next hierarchy level into the current
    // one for flattening hierarchies.
    else if (tname.equals("merge"))  {
        // do not consider any attributes of this elements, just
        // continue with the children
    }
    else if (tname.equals("fragment"))  {
        final AXmlAttribute<?> attr = rootNode.getAttribute("name");
        if (attr == null)
            System.err.println("Fragment without class name detected");
        else {
            if (attr.getType() != AxmlVisitor.TYPE_STRING)
                System.err.println("Invalid targer resource "+attr.getValue()+"for fragment class value");
            getLayoutClass(attr.getValue().toString());
        }
    }
    else {
        final SootClass childClass = getLayoutClass(tname);
        if (childClass != null && (isLayoutClass(childClass) || isViewClass(childClass)))
            parseLayoutAttributes(layoutFile, childClass, rootNode);
    }

    // Parse the child nodes
    for (AXmlNode childNode : rootNode.getChildren())
        parseLayoutNode(layoutFile, childNode);
}
项目:JAADAS    文件:LayoutFileParser.java   
/**
 * Parses the layout attributes in the given AXml node 
 * @param layoutFile The full path and file name of the file being parsed
 * @param layoutClass The class for the attributes are parsed
 * @param rootNode The AXml node containing the attributes
 */
private void parseLayoutAttributes(String layoutFile, SootClass layoutClass, AXmlNode rootNode) {
    boolean isSensitive = false;
    int id = -1;

    for (Entry<String, AXmlAttribute<?>> entry : rootNode.getAttributes().entrySet()) {
        String attrName = entry.getKey().trim();
        AXmlAttribute<?> attr = entry.getValue();

        // On obfuscated Android malware, the attribute name may be empty
        if (attrName.isEmpty())
            continue;

        // Check that we're actually working on an android attribute
        if (!isAndroidNamespace(attr.getNamespace()))
            continue;

        // Read out the field data
        if (attrName.equals("id")
                && (attr.getType() == AxmlVisitor.TYPE_REFERENCE || attr.getType() == AxmlVisitor.TYPE_INT_HEX))
            id = (Integer) attr.getValue();
        else if (attrName.equals("password")) {
            if (attr.getType() == AxmlVisitor.TYPE_INT_HEX)
                isSensitive = ((Integer) attr.getValue()) != 0; // -1 for true, 0 for false
            else if (attr.getType() == AxmlVisitor.TYPE_INT_BOOLEAN)
                isSensitive = (Boolean) attr.getValue();
            else
                throw new RuntimeException("Unknown representation of boolean data type");
        }
        else if (!isSensitive && attrName.equals("inputType") && attr.getType() == AxmlVisitor.TYPE_INT_HEX) {
            int tp = (Integer) attr.getValue();
            isSensitive = ((tp & TYPE_NUMBER_VARIATION_PASSWORD) == TYPE_NUMBER_VARIATION_PASSWORD)
                    || ((tp & TYPE_TEXT_VARIATION_PASSWORD) == TYPE_TEXT_VARIATION_PASSWORD)
                    || ((tp & TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) == TYPE_TEXT_VARIATION_VISIBLE_PASSWORD)
                    || ((tp & TYPE_TEXT_VARIATION_WEB_PASSWORD) == TYPE_TEXT_VARIATION_WEB_PASSWORD);
        }
        else if (isActionListener(attrName)
                && attr.getType() == AxmlVisitor.TYPE_STRING
                && attr.getValue() instanceof String) {
            String strData = ((String) attr.getValue()).trim();
            addCallbackMethod(layoutFile, strData);
        }
        else if (attr.getType() == AxmlVisitor.TYPE_STRING && attrName.equals("text")) {
            // To avoid unrecognized attribute for "text" field
        }
        else if (DEBUG && attr.getType() == AxmlVisitor.TYPE_STRING) {
            System.out.println("Found unrecognized XML attribute:  " + attrName);
        }
    }

    // Register the new user control
    addToMapSet(this.userControls, layoutFile, new LayoutControl(id, layoutClass, isSensitive));
}
项目:JAADAS    文件:ProcessManifest.java   
/**
 * Adds a new permission to the manifest.
 * @param complete permission name e.g. "android.permission.INTERNET"
 */
public void addPermission(String permissionName) {              
    AXmlNode permission = new AXmlNode("uses-permission", null, manifest);
    AXmlAttribute<String> permissionNameAttr = new AXmlAttribute<String>("name", permissionName,  AXmlHandler.ANDROID_NAMESPACE);       
    permission.addAttribute(permissionNameAttr);
}
项目:JAADAS    文件:ProcessManifest.java   
/**
 * Adds a new provider to the manifest
 * @param node provider represented as an AXmlNode
 */
public void addProvider(AXmlNode node) {
    if (providers.isEmpty()) 
        providers = new ArrayList<AXmlNode>();      
    providers.add(node);
}
项目:JAADAS    文件:ProcessManifest.java   
/**
 * Adds a new receiver to the manifest
 * @param node receiver represented as an AXmlNode
 */
public void addReceiver(AXmlNode node) {
    if (receivers.isEmpty()) 
        receivers = new ArrayList<AXmlNode>();
    receivers.add(node);
}
项目:JAADAS    文件:ProcessManifest.java   
/**
 * Adds a new activity to the manifest
 * @param node activity represented as an AXmlNode
 */
public void addActivity(AXmlNode node) {
    if (activities.isEmpty()) 
        activities = new ArrayList<AXmlNode>();
    activities.add(node);
}
项目:JAADAS    文件:ProcessManifest.java   
/**
 * Adds a new service to the manifest
 * @param node service represented as an AXmlNode
 */
public void addService(AXmlNode node) {
    if (services.isEmpty())
        services = new ArrayList<AXmlNode>();
    services.add(node);
}
项目:JAADAS    文件:AXML20Parser.java   
public MyNodeVisitor() {
    this.node = new AXmlNode("dummy", "", null);
}
项目:JAADAS    文件:AXML20Parser.java   
public MyNodeVisitor(AXmlNode node) {
    this.node = node;
}
项目:DroidRA    文件:ProcessManifest.java   
/**
 * Adds a new permission to the manifest.
 * @param complete permission name e.g. "android.permission.INTERNET"
 */
public void addPermission(String permissionName) {              
    AXmlNode permission = new AXmlNode("uses-permission", null, manifest);
    AXmlAttribute<String> permissionNameAttr = new AXmlAttribute<String>("name", permissionName,  AXmlHandler.ANDROID_NAMESPACE);       
    permission.addAttribute(permissionNameAttr);
}
项目:DroidRA    文件:ProcessManifest.java   
/**
 * Adds a new provider to the manifest
 * @param node provider represented as an AXmlNode
 */
public void addProvider(AXmlNode node) {
    if (providers.isEmpty()) 
        providers = new ArrayList<AXmlNode>();      
    providers.add(node);
}
项目:DroidRA    文件:ProcessManifest.java   
/**
 * Adds a new receiver to the manifest
 * @param node receiver represented as an AXmlNode
 */
public void addReceiver(AXmlNode node) {
    if (receivers.isEmpty()) 
        receivers = new ArrayList<AXmlNode>();
    receivers.add(node);
}
项目:DroidRA    文件:ProcessManifest.java   
/**
 * Adds a new activity to the manifest
 * @param node activity represented as an AXmlNode
 */
public void addActivity(AXmlNode node) {
    if (activities.isEmpty()) 
        activities = new ArrayList<AXmlNode>();
    activities.add(node);
}
项目:DroidRA    文件:ProcessManifest.java   
/**
 * Adds a new service to the manifest
 * @param node service represented as an AXmlNode
 */
public void addService(AXmlNode node) {
    if (services.isEmpty())
        services = new ArrayList<AXmlNode>();
    services.add(node);
}
项目:DroidForce    文件:UpdateManifestAndCodeForWaitPDP.java   
/**
 * Get the name of the main activity in the AndroidManifest.xml file
 * @param apkFileLocation
 * @return
 */
public static String getMainActivityName(String apkFileLocation) {
    String mainActivityName = null;
    try {
        ProcessManifest pm = new ProcessManifest(apkFileLocation);
        AXmlHandler axmlh = pm.getAXml(); 

        // Find main activity and remove main intent-filter
        List<AXmlNode> anodes = axmlh.getNodesWithTag("activity");
        for (AXmlNode an: anodes) {
            boolean hasMain = false;
            boolean hasLauncher = false;
            AXmlNode filter = null;

            AXmlAttribute aname = an.getAttribute("name");
            String aval = (String)aname.getValue();
            System.out.println("activity: "+ aval);
            for (AXmlNode ch : an.getChildren()) {
                System.out.println("children: "+ ch);
            }
            List<AXmlNode> fnodes = an.getChildrenWithTag("intent-filter");
            for (AXmlNode fn: fnodes) {

                hasMain = false;
                hasLauncher = false;

                // check action
                List<AXmlNode> acnodes = fn.getChildrenWithTag("action");
                for (AXmlNode acn: acnodes) {
                    AXmlAttribute acname = acn.getAttribute("name");
                    String acval = (String)acname.getValue();
                    System.out.println("action: "+ acval);
                    if (acval.equals("android.intent.action.MAIN")) {
                        hasMain = true;
                    }
                }
                // check category
                List<AXmlNode> catnodes = fn.getChildrenWithTag("category");
                for (AXmlNode catn: catnodes) {
                    AXmlAttribute catname = catn.getAttribute("name");
                    String catval = (String)catname.getValue();
                    System.out.println("category: "+ catval);
                    if (catval.equals("android.intent.category.LAUNCHER")) {
                        hasLauncher = true;
                        filter = fn;
                    }
                }
                if (hasLauncher && hasMain) {
                    break;
                }
            }

            if (hasLauncher && hasMain) {
                // replace name with the activity waiting for the connection to the PDP
                System.out.println("main activity is: "+ aval);
                System.out.println("excluding filter: "+ filter);
                filter.exclude();
                mainActivityName = aval;
                break;
            }

        }
    } catch (IOException | XmlPullParserException ex) {
        System.err.println("Could not read Android manifest file: " + ex.getMessage());
        throw new RuntimeException(ex);
    }

    return mainActivityName;
}