Java 类soot.jimple.infoflow.android.axml.AXmlHandler 实例源码
项目: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");
}
项目: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
文件: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 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);
}
项目: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;
}
项目:JAADAS
文件:ProcessManifest.java
/**
* Returns the handler which parsed and holds the manifest's data.
*
* @return Android XML handler
*/
public AXmlHandler getAXml() {
return this.axml;
}
项目:DroidRA
文件:ProcessManifest.java
/**
* Returns the handler which parsed and holds the manifest's data.
*
* @return Android XML handler
*/
public AXmlHandler getAXml() {
return this.axml;
}