private void parseIdeaModule(final IdeaModule ideaModule) throws IOException { final org.gradle.tooling.model.GradleProject gradleProject = ideaModule.getGradleProject(); String name = convertName(gradleProject.getPath()); if (nonNull(name) && !name.isEmpty()) { this.name = name; } final AndroidProject androidProject = AndroidSupport.getAndroidProject(this.rootProject, gradleProject); if (nonNull(androidProject)) { Set<ProjectDependency> projectDependencies = analyzeDependencies(ideaModule); this.dependencies.addAll(projectDependencies); // parse android this.isAndroidProject = true; this.androidApiVersion = androidProject.getApiVersion(); this.androidModelVersion = androidProject.getModelVersion(); log.info( "detect android project {}. api {} model {}", name, androidApiVersion, androidModelVersion); System.setProperty("meghanada.android.project", "true"); System.setProperty("meghanada.android.project.name", name); final AndroidSupport androidSupport = new AndroidSupport(this); androidSupport.parseAndroidProject(androidProject); } else { // normal this.parseIdeaModule(gradleProject, ideaModule); } }
@Override public CompileResult compileTestJava(boolean force) throws IOException { this.runPrepareTestCompileTask(); if (this.isAndroidProject) { new AndroidSupport(this).prepareCompileAndroidTestJava(); return super.compileTestJava(force); } else { return super.compileTestJava(force); } }
@Override public CompileResult compileJava(boolean force) throws IOException { this.runPrepareCompileTask(); if (this.isAndroidProject) { new AndroidSupport(this).prepareCompileAndroidJava(); return super.compileJava(force); } else { return super.compileJava(force); } }
for (String cp : bootClasspath) { File file = new File(cp); addDependencies(dependencies, file); addDependencies(dependencies, jar); for (JavaLibrary javaLibrary : javaLibraries) { File file = javaLibrary.getJarFile(); addDependencies(dependencies, file); parseExtraAndroidArtifacts(dependencies, variant); parseExtraJavaArtifacts(dependencies, variant);
Map<String, Set<File>> androidSources = AndroidSupport.getAndroidSources(defaultConfig); Set<ProjectDependency> dependencies = this.getAndroidDependencies(androidProject);
void prepareCompileAndroidJava() { ProjectConnection connection = this.project.getProjectConnection(); try { BuildLauncher buildLauncher = connection.newBuild(); String genTask = this.project.getName() + this.genSourceTaskName; buildLauncher.forTasks(genTask).run(); int size = this.project.getDependencies().size(); String aar = Joiner.on(File.separator) .join(this.project.getProjectRoot(), BUILD_DIR, INTERMEDIATE_DIR, EXPLODED_DIR); List<File> jars = FileUtils.collectFiles(new File(aar), EXT_JAR); for (File jar : jars) { addAAR(jar); } int after = this.project.getDependencies().size(); if (size != after) { CachedASMReflector.getInstance().createClassIndexes(jars); this.project.resetCachedClasspath(); } } finally { connection.close(); } }
private void parseExtraJavaArtifacts(Set<ProjectDependency> dependencies, Variant variant) { String buildType = variant.getBuildType(); boolean debugBuild = buildType.equals(DEBUG_BUILD); Collection<JavaArtifact> extraJavaArtifacts = variant.getExtraJavaArtifacts(); for (JavaArtifact javaArtifact : extraJavaArtifacts) { if (debugBuild) { Collection<File> generatedSourceFolders = javaArtifact.getGeneratedSourceFolders(); for (File src : generatedSourceFolders) { this.project.getSources().add(src); } } Dependencies compileDependencies = javaArtifact.getDependencies(); Collection<AndroidLibrary> libraries = compileDependencies.getLibraries(); for (AndroidLibrary androidLibrary : libraries) { Collection<File> localJars = androidLibrary.getLocalJars(); for (File jar : localJars) { addDependencies(dependencies, jar); } } Collection<JavaLibrary> javaLibraries = compileDependencies.getJavaLibraries(); for (JavaLibrary javaLibrary : javaLibraries) { File file = javaLibrary.getJarFile(); addDependencies(dependencies, file); } } }
private void prepareCompileAndroidTestJavaV2() { ProjectConnection connection = this.project.getProjectConnection(); try { BuildLauncher buildLauncher = connection.newBuild(); String genTestTask = this.project.getName() + genUnitTestTaskName; String genAndroidTestTask = this.project.getName() + genAndroidTestTaskName; buildLauncher.forTasks(genTestTask, genAndroidTestTask).run(); int size = this.project.getDependencies().size(); String aar = Joiner.on(File.separator) .join(this.project.getProjectRoot(), BUILD_DIR, INTERMEDIATE_DIR, EXPLODED_DIR); List<File> jars = FileUtils.collectFiles(new File(aar), EXT_JAR); for (File jar : jars) { addAAR(jar); } int after = this.project.getDependencies().size(); if (size != after) { CachedASMReflector.getInstance().createClassIndexes(jars); this.project.resetCachedClasspath(); } } finally { connection.close(); } }
if (localJars.isEmpty()) { File jar = androidLibrary.getJarFile(); addDependencies(dependencies, jar); } else { for (File jar : localJars) { addDependencies(dependencies, jar); for (JavaLibrary javaLibrary : javaLibraries) { File file = javaLibrary.getJarFile(); addDependencies(dependencies, file);