docs: function updateAndroidManifest(targetFilePath, configItems) {
          var tempManifest = fileUtils.parseElementtreeSync(targetFilePath),
              root = tempManifest.getroot();
  
          var isAllowedMultiple = function(tag, parent){
              var multipleConfig = null;
              _.each(androidMultiples, function(multiple){
                  if(multiple.tag === tag && multiple.parent === parent){
                      multipleConfig = multiple;
                  }
              });
              return multipleConfig;
          };
  
          _.each(configItems, function (item) {
              // if parent is not found on the root, child/grandchild nodes are searched
              var parentEl = root.find(item.parent) || root.find('*/' + item.parent),
                  parentSelector,
                  data = item.data,
                  childSelector = item.destination,
                  childEl;
  
              _.each(androidActivityNames, function(activityName){
                  if(parentEl){
                      return;
                  }
                  parentSelector = item.parent.replace("{ActivityName}", activityName);
                  parentEl = root.find(parentSelector) || root.find('*/' + parentSelector);
              });
  
              if (item.type === 'preference' && !parentEl) {
                  parentEl = createPath(root, item);
              }
  
              if (!parentEl) {
                  return;
              }
  
              if (item.type === 'preference') {
                  logger.debug("**PREFERENCE"); logger.dump(item);
  
                  logger.debug("**parentEl"); logger.dump(parentEl);
  
                  if(data.attrib['delete'] === 'true') {
                      logger.debug("Deleting preference");
                      childEl = parentEl.find(childSelector);
                      logger.debug("**childEl"); logger.dump(childEl);
  
                      if(childEl) parentEl.remove(childEl);
                  } else {
                      parentEl.attrib[childSelector.replace("@",'')] = data.attrib['value'];
                  }
              } else { // item.type === 'configFile'
  
                  logger.debug("**CONFIG-FILE");
                  logger.dump(item);
  
                  var multiple = isAllowedMultiple(childSelector, item.parent);
                  logger.debug("isAllowedMultiple: "+ !!multiple);
                  if(multiple){
                      childSelector += "[@android:"+multiple.uniqueBy+"='" + data.attrib["android:"+multiple.uniqueBy] + "']";
                  }
  
                  logger.debug("childSelector: " + childSelector);
                  childEl = parentEl.find(childSelector);
                  logger.debug("**childEl"); logger.dump(childEl);
  
                  // if child element doesnt exist, create new element
                  if(!childEl || item.add === 'true') {
                      childEl = new et.Element(item.destination);
                      parentEl.append(childEl);
                  }
  
                  // copy all config.xml data except for the generated _id property
                  _.each(data, function (prop, propName) {
                      if(propName !== '_id') {
                          childEl[propName] = prop;
                      }
                  });
              }
          });
          fs.writeFileSync(targetFilePath, tempManifest.write({indent: 4}), 'utf-8');
      }