package gueei.binding.gen; import java.io.File; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class RegisterActivityTask extends Task { private File mDir; public void setDir(File dir) { mDir = dir; } private String mActivityClassName; public void setActivityClassName(String appClassName) { mActivityClassName = appClassName; } @Override public void execute() throws BuildException { try { File file = new File(mDir, "AndroidManifest.xml"); Document doc = DocumentBuilderFactory.newInstance() .newDocumentBuilder() .parse(new File(mDir, "AndroidManifest.xml")); Node appNode = doc.getElementsByTagName("application").item(0); NodeList activityList = doc.getElementsByTagName("activity"); for(int i=0; i<activityList.getLength(); i++){ Element activity = (Element) activityList.item(i); String name = activity.getAttribute("android:name"); if (mActivityClassName.equals(name) || ("." + mActivityClassName).equals(name)){ log("Activity defintion exists, no need to modify the manifest"); return; } } Element activity = doc.createElement("activity"); appNode.appendChild(activity); activity.setAttribute("android:name", "." + mActivityClassName); activity.setAttribute("android:label", mActivityClassName); TransformerFactory transformerFactory = TransformerFactory .newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(file); transformer.transform(source, result); log("Manifest <application> modified"); } catch (Exception e) { e.printStackTrace(); } } }