// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.1.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } def setupSkiaLibraryBuild(project, appVariants, buildCmd, requireCMake = false) { appVariants.all{ variant -> def buildNativeLib = project.task("${variant.name}_SkiaNativeLib", type:Exec) { workingDir '../../../..' // top-level skia directory commandLine constructBuildCommand(variant, buildCmd).split() environment PATH: getPathWithDeps(requireCMake) environment ANDROID_SDK_ROOT: getSDKPath() } buildNativeLib.onlyIf { !project.hasProperty("suppressNativeBuild") } TaskCollection compileTask = project.tasks.matching { // println(it.name) it.name.toLowerCase().contains("compile" + variant.name.toLowerCase()) && it.name.toLowerCase().endsWith("ndk") } compileTask.getAt(0).dependsOn buildNativeLib } } def getLocalProperties() { Properties properties = new Properties() File propFile = project.rootProject.file('local.properties') if (propFile.canRead()) { properties.load(propFile.newDataInputStream()) } propFile = project.rootProject.file('gradle.properties') if (propFile.canRead()) { properties.load(propFile.newDataInputStream()) } return properties } def getSDKPath() { String path = System.getenv("ANDROID_SDK_ROOT") if (path == null) { path = getLocalProperties().getProperty('sdk.dir', null) } if (path == null) { throw new GradleScriptException("Android SDK not found! Please set ANDROID_SDK_ROOT to" + " your path or define sdk.dir in gradle.properties") } return path } def getPathWithDeps(requireCMake = false) { String path = System.getenv("PATH") if (!path.contains("depot_tools")) { path += ":" + getLocalProperties().getProperty('depot_tools.dir', null) } if (!path.contains("depot_tools")) { throw GradleScriptException("Depot Tools not found! Please update your path to include" + " depot_tools or define depot_tools.dir in gradle.properties") } if (requireCMake) { String cmakePath = getSDKPath() + "/cmake/bin" if (!file(cmakePath).exists()) { logger.warn("cmake not found! Please install the android SDK version of cmake."); } if (!path.contains(cmakePath)) { path = cmakePath + ":" + path } } return path } def constructBuildCommand(variant, buildTarget) { String cmdLine = "./platform_tools/android/bin/android_ninja $buildTarget" String deviceType = null if (variant.name.startsWith("arm64")) { deviceType = "arm64" } else if (variant.name.startsWith("arm")) { deviceType = "arm_v7_neon" } else if (variant.name.startsWith("x86_64")) { deviceType = "x86_64" } else if (variant.name.startsWith("x86")) { deviceType = "x86" } else if (variant.name.startsWith("mips")) { deviceType = "mips" } else if (variant.name.startsWith("mips64")) { deviceType = "mips64" } if (deviceType != null) { cmdLine += " -d " + deviceType } if (variant.name.endsWith("Release")) { cmdLine += " --release" } if (variant.name.indexOf("vulkan") != -1) { cmdLine += " --vulkan" } return cmdLine }