NdkCompile ndkCompile = baseVariant.getNdkCompile(); Set<String> filters = ndkCompile != null ? ndkCompile.getAbiFilters() : ImmutableSet.of(); cpuFilters = filters != null ? filters : ImmutableSet.of();
@TaskAction void taskAction(IncrementalTaskInputs inputs) throws IOException, ProcessException { if (!AndroidGradleOptions.useDeprecatedNdk(getProject())) { if (isNdkOptionUnset()) { getLogger().warn("Warning: Native C/C++ source code is found, but it seems that NDK " + "option is not configured. Note that if you have an Android.mk, it is not " + "used for compilation. The recommended workaround is to remove the default " + getLogger().warn("Warning: Deprecated NDK integration enabled by " + "useDeprecatedNdk flag in gradle.properties will be removed from Android Gradle " + "plugin soon.\n" + ALTERNATIVES); FileTree sourceFileTree = getSource(); Set<File> sourceFiles = sourceFileTree.matching(new PatternSet().exclude("**/*.h")).getFiles(); File makefile = getGeneratedMakefile(); FileUtils.cleanOutputDir(getSoFolder()); FileUtils.cleanOutputDir(getObjFolder()); return; getLogger().info("Unable do incremental execution: full task run"); generateMakeFile.setValue(true); FileUtils.cleanOutputDir(getSoFolder()); FileUtils.cleanOutputDir(getObjFolder()); } else { writeMakefile(sourceFiles, makefile);
variantScope.getVariantData(); ndkCompile.setAndroidBuilder(variantScope.getGlobalScope().getAndroidBuilder()); ndkCompile.setVariantName(variantData.getName()); ndkCompile.setNdkDirectory( variantScope.getGlobalScope().getSdkHandler().getNdkFolder()); ndkCompile.setForTesting(variantData.getType().isForTesting()); variantData.ndkCompileTask = ndkCompile; ndkCompile.setNdkRenderScriptMode(true); } else { ndkCompile.setNdkRenderScriptMode(false); }); ndkCompile.setGeneratedMakefile( new File( variantScope.getGlobalScope().getIntermediatesDir(), ndkCompile.setDebuggable(variantConfig.getBuildType().isJniDebuggable()); ndkCompile.setObjFolder( new File( variantScope.getGlobalScope().getIntermediatesDir(), ndkCompile.setSoFolder(ndkSoFolder.iterator().next());
NdkCompile.class); ndkCompile.dependsOn(variantData.preBuildTask); ndkCompile.setAndroidBuilder(androidBuilder); ndkCompile.setNdkDirectory(sdkHandler.getNdkFolder()); ndkCompile.setIsForTesting(variantData.getType().isForTesting()); variantData.ndkCompileTask = ndkCompile; variantData.compileTask.dependsOn(variantData.ndkCompileTask); ndkCompile.setNdkRenderScriptMode(true); ndkCompile.dependsOn(variantData.renderscriptCompileTask); } else { ndkCompile.setNdkRenderScriptMode(false); ndkCompile.setGeneratedMakefile(new File(scope.getGlobalScope().getIntermediatesDir(), "ndk/" + variantData.getVariantConfiguration().getDirName() + "/Android.mk")); ndkCompile.setObjFolder(new File(scope.getGlobalScope().getIntermediatesDir(), "ndk/" + variantData.getVariantConfiguration().getDirName() + "/obj")); ndkCompile.setSoFolder(ndkSoFolder.iterator().next());
private void runNdkBuild(@NonNull File ndkLocation, @NonNull File makefile) throws ProcessException { CoreNdkOptions ndk = getNdkConfig(); IAndroidTarget target = getBuilder().getTarget(); if (!target.isPlatform()) { target = target.getParent(); builder.addArgs("NDK_OUT=" + getObjFolder().getAbsolutePath()); builder.addArgs("NDK_LIBS_OUT=" + getSoFolder().getAbsolutePath()); if (isDebuggable()) { builder.addArgs("NDK_DEBUG=1"); ProcessOutputHandler handler = new LoggedProcessOutputHandler(getBuilder().getLogger()); getBuilder().executeProcess(builder.createProcess(), handler) .rethrowFailure().assertNormalExitValue();
private boolean isNdkOptionUnset() { // If none of the NDK options are set, then it is likely that NDK is not configured. return (getModuleName() == null && getcFlags() == null && getLdLibs() == null && getAbiFilters() == null && getStl() == null); }