All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
io.imqa.injector.CompileAction Maven / Gradle / Ivy
package io.imqa.injector;
import org.gradle.api.Task;
import org.gradle.api.Action;
import java.io.File;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import io.imqa.injector.util.BuildOption;
import io.imqa.injector.util.Logger;
import io.imqa.injector.util.PathBuilder;
import io.imqa.injector.util.StringUtil;
import static io.imqa.injector.util.BuildOption.gradleVersion;
public class CompileAction implements Action, io.imqa.injector.Action {
String buildLocation;
String projectName;
private BuildType buildType;
// private String flavorName = "";
private Flavor flavor;
AndroidManifestParser manifestParser;
public CompileAction(BuildType buildType, Flavor flavor) {
this.buildType = buildType;
this.flavor = flavor;
// Logger.d("Compile Action created");
}
public CompileAction(BuildType buildType, Flavor flavor, String buildLocation, AndroidManifestParser manifestParser) {
this.buildType = buildType;
this.buildLocation = buildLocation;
this.manifestParser = manifestParser;
this.flavor = flavor;
}
public void doAction(Task compileTask) {
projectName = compileTask.getProject().getName();
Pattern javacPattern;
if (gradleVersion.majorVersion == 3
&& gradleVersion.minorVersion >= 2) {
javacPattern = Pattern.compile(":"+projectName+":compile"+
StringUtil.toCapitalize(flavor.flavorName) +
StringUtil.toCapitalize(buildType.typeName) +
"Sources");
} else {
javacPattern = Pattern.compile(":"+projectName+":compile"+
StringUtil.toCapitalize(flavor.flavorName) +
StringUtil.toCapitalize(buildType.typeName) +
"JavaWithJavac");
}
/*Pattern javacPattern = Pattern.compile(":"+projectName+":compile"+
StringUtil.toCapitalize(flavor.flavorName) +
StringUtil.toCapitalize(buildType.typeName) +
"JavaWithJavac");*/
/*Pattern javacPattern = Pattern.compile(":"+projectName+":transformClassesWithDexBuilderFor"+
StringUtil.toCapitalize(flavor.flavorName) +
StringUtil.toCapitalize(buildType.typeName));*/
// Logger.d("javac pattern", javacPattern.toString());
Matcher javacMatcher = javacPattern.matcher( compileTask.toString() );
if( javacMatcher.find() ) {
compileTask.deleteAllActions();
compileTask.doLast(this);
}
}
public void execute(Task task) {
if (BuildOption.stop) return;
bciExecute(buildType.typeName);
}
public void bciExecute(String buildType) {
Logger.d("IMQA Task", "BCI Execute");
// Find Compile Location
if (buildLocation == null || buildLocation.equals("")) {
if (gradleVersion.majorVersion == 3
&& gradleVersion.minorVersion >= 2) {
PathBuilder builder = PathBuilder.getBuilder(new File("./").getAbsolutePath())
.addPath(projectName)
.addPath("/build/intermediates/javac");
if (!this.flavor.flavorName.equals("")) {
builder.addPath(this.flavor.flavorName + StringUtil.toCapitalize(buildType));
} else {
builder.addPath(buildType);
}
builder.addPath("compile" + StringUtil.toCapitalize(this.flavor.flavorName) + StringUtil.toCapitalize(buildType) + "JavaWithJavac")
.addPath("classes");
buildLocation = builder.toString();
} else {
// File location it
buildLocation = PathBuilder.getBuilder(new File("./").getAbsolutePath())
.addPath(projectName)
.addPath("/build/intermediates/classes/")
.addPath(this.flavor.flavorName)
.addPath(buildType)
.toString();
}
}
if (manifestParser == null) {
AndroidBuildConfig buildConfig = new AndroidBuildConfig(
projectName, buildType, flavor, buildLocation, null);
manifestParser = new AndroidManifestParser(
projectName, flavor.flavorName, buildType,
buildConfig.getPackageName());
}
// Get Activity List on Manifest.xml
ArrayList activityList = manifestParser.getActivityList();
// This find 'activity'
Logger.d("LifeCycle Search", "Start");
int injectedFileCount = 0;
for (String activityName : activityList) {
injectedFileCount++;
callLifeCycleInject(manifestParser.getPackageName().replace(".", "/"), activityName, buildLocation);
}
Logger.d("LifeCycle Search", "LifeCycle Searched of "+injectedFileCount+" Files");
// Get All Class List
ArrayList fileList = getAllFileList(new File(buildLocation));
Logger.d("Global Search", "Start");
injectedFileCount = 0;
for (String fileAbsoluteName : fileList) {
injectedFileCount++;
callGlobalInject(fileAbsoluteName);
}
Logger.d("Global Search", "Global Searched of "+injectedFileCount+" Files");
}
private ArrayList getAllFileList(File root) {
ArrayList list = new ArrayList();
File[] files = root.listFiles();
for (File file : files) {
if (file.isFile()) {
//Logger.d("FILE NAME", file.getName());
String[] names = file.getName().split("\\.");
//Logger.d("Splited size", names.toString());
if (names.length > 0 && names[names.length-1].equals("class")) {
//Logger.d("FILES TEST", file.getAbsolutePath());
list.add(file.getAbsolutePath());
//doSome();
}
} else {
list.addAll(getAllFileList(file));
}
}
return list;
}
private void callLifeCycleInject(String packageName, String activityName, String buildLocation) {
if (BuildOption.lifecycleInject) {
try {
Injector activityInjector =
//ActivityInjectorFactory.checkActivityPackage(projectName, packageName, activityName, buildLocation);
new ProjectActivityInjector(projectName, packageName, activityName, buildLocation);
if (activityInjector == null)
throw new InjectorException();
activityInjector.doInject();
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void callGlobalInject(String fileAbsoluteName) {
String[] filePath = fileAbsoluteName.split("/");
StringBuilder sb = new StringBuilder();
for (int i=0; i 0) {
sb.append("/");
sb.append(filePath[i]);
}
}
GlobalInjector globalInjector = new GlobalInjector(filePath[filePath.length-1], sb.toString());
globalInjector.doInject();
}
}