package com.ensoftcorp.open.android.essentials.subsystems.advertisements;
import java.util.ArrayList;
import com.ensoftcorp.atlas.core.db.graph.Node;
import com.ensoftcorp.atlas.core.xcsg.XCSG;
import com.ensoftcorp.open.android.essentials.subsystems.AndroidSubsystem;
import com.ensoftcorp.open.java.commons.analysis.PackageAnalysis;
/**
* A collection of known Android advertisement libraries
* Note: Primary reference http://arxiv.org/pdf/1303.0857.pdf
*
* Ported from the QuestionableCode.org project (by Ben Holland)
*
* @author Ben Holland
*/
public class AndroidAdvertisementSubsystem extends AndroidSubsystem {
public static final String TAG = "ANDROID_ADVERTISEMENT_SUBSYSTEM";
@Override
public String getTag() {
return TAG;
}
@Override
public String[] getParentTags() {
return new String[] { AndroidSubsystem.TAG };
}
@Override
public String getDescription() {
return getName() + " advertisement libraries";
}
/**
* Returns all packages starting with the given package prefixes
* @param rootPackages
* @return
*/
protected String[] getNestedPackages(String... rootPackages){
ArrayList<String> packages = new ArrayList<String>();
for(String rootPackage : rootPackages){
for(Node pkg : PackageAnalysis.getPackageWithSubpackages(rootPackage).eval().nodes()){
packages.add(pkg.getAttr(XCSG.name).toString());
}
}
String[] result = new String[packages.size()];
return packages.toArray(result);
}
}