1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
// 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.2.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
def setupSkiaLibraryBuild(project, appVariants, appName) {
appVariants.all{ variant ->
def buildNativeLib = project.task("${variant.name}_BuildSkiaLib", type:Exec) {
workingDir '../../../..' // top-level skia directory
commandLine constructBuildCommand(project, variant, appName).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("x86_64")) {
variantPrefix = "x64"
androidLibDir = "x86_64"
} else if (variant.name.startsWith("x86")) {
variantPrefix = "x86"
androidLibDir = "x86"
} else if (variant.name.startsWith("mipsel")) {
variantPrefix = "mipsel"
androidLibDir = "mips"
} else if (variant.name.startsWith("mips64el")) {
variantPrefix = "mips64el"
androidLibDir = "mips64"
}
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(":")) {
if (entry.contains("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 out_dir = getVariantOutDir(project, variant).skiaOut
return "${depotToolsDir}/ninja -C $out_dir $appName"
}
|