| // Top-level build file where you can add configuration options common to all sub-projects/modules. |
| |
| import java.io.File |
| import java.nio.file.Paths |
| import org.apache.tools.ant.taskdefs.condition.Os |
| |
| buildscript { |
| repositories { |
| google() |
| jcenter() |
| } |
| dependencies { |
| classpath 'com.android.tools.build:gradle:3.2.0' |
| |
| // NOTE: Do not place your application dependencies here; they belong |
| // in the individual module build.gradle files |
| } |
| } |
| |
| allprojects { |
| repositories { |
| google() |
| jcenter() |
| } |
| } |
| |
| def setupSkiaLibraryBuild(project, appVariants, appName) { |
| appVariants.all{ variant -> |
| def buildNativeLib = project.task("${variant.name}_BuildSkiaLib", type:Exec) { |
| workingDir '../../../..' // top-level skia directory |
| final String cmd = constructBuildCommand(project, variant, appName) |
| if (Os.isFamily(Os.FAMILY_WINDOWS)) { |
| commandLine "cmd", "/c", cmd |
| } else { |
| commandLine cmd.split() |
| } |
| } |
| buildNativeLib.onlyIf { !project.hasProperty("suppressNativeBuild") } |
| |
| def copyNativeLib = project.task("${variant.name}_CopySkiaLib", type:Copy) { |
| def fromDir = getVariantOutDir(project, variant).skiaOut |
| def intoDir = getVariantOutDir(project, variant).androidOut |
| from fromDir |
| into intoDir |
| include "${appName}.so" |
| } |
| |
| TaskCollection<Task> compileTask = project.tasks.matching { |
| // println(it.name) |
| it.name.toLowerCase().contains("compile" + variant.name.toLowerCase()) && |
| it.name.toLowerCase().endsWith("ndk") |
| } |
| compileTask.findAll()*.dependsOn copyNativeLib |
| copyNativeLib.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 getVariantOutDir(project, variant) { |
| String variantPrefix = null |
| String androidLibDir = null |
| if (variant.name.startsWith("arm64")) { |
| variantPrefix = "arm64" |
| androidLibDir = "arm64-v8a" |
| } else if (variant.name.startsWith("arm")) { |
| variantPrefix = "arm" |
| androidLibDir = "armeabi-v7a" |
| } else if (variant.name.startsWith("x64")) { |
| variantPrefix = "x64" |
| androidLibDir = "x86_64" |
| } else if (variant.name.startsWith("x86")) { |
| variantPrefix = "x86" |
| androidLibDir = "x86" |
| } |
| |
| String skiaOutDir = null |
| String propName = "${variantPrefix}.out.dir" |
| if (project.hasProperty(propName)) { |
| skiaOutDir = project.getProperties().getAt(propName) |
| } else { |
| skiaOutDir = getLocalProperties().getProperty(propName, "missing_variant_out") |
| } |
| |
| return [skiaOut: skiaOutDir, |
| androidOut: "src/main/libs/${androidLibDir}"] |
| } |
| |
| def constructBuildCommand(project, variant, appName) { |
| String depotToolsDir = null |
| for (String entry : System.getenv("PATH").split(File.pathSeparator)) { |
| if (Paths.get(entry).endsWith("depot_tools")) { |
| depotToolsDir = entry; |
| break; |
| } |
| } |
| if (depotToolsDir == null) { |
| depotToolsDir = getLocalProperties().getProperty('depot_tools.dir', null) |
| } |
| |
| if (depotToolsDir == null) { |
| throw GradleScriptException("Depot Tools not found! Please update your path to include" + |
| " depot_tools or define depot_tools.dir in local.properties") |
| } |
| |
| String ninja = Paths.get(depotToolsDir, "ninja") |
| String out_dir = getVariantOutDir(project, variant).skiaOut |
| return "$ninja -C $out_dir $appName" |
| } |