Permalink
Fetching contributors…
Cannot retrieve contributors at this time
230 lines (201 sloc) 8.1 KB
import de.undercouch.gradle.tasks.download.Download
import org.apache.tools.ant.taskdefs.condition.Os
// 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:${ANDROID_GRADLE_PLUGIN_VERSION}"
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:${GRADLE_BINTRAY_PLUGIN_VERSION}"
classpath "com.github.dcendents:android-maven-gradle-plugin:${ANDROID_MAVEN_GRADLE_PLUGIN_VERSION}"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
plugins {
id "de.undercouch.download" version "3.1.2"
}
project.ext {
buildToolsVersion = "${BUILD_TOOLS_VERSION}"
compileSdkVersion = COMPILE_SDK_VERSION.toInteger()
minSdkVersion = MIN_SDK_VERSION;
targetSdkVersion = TARGET_SDK_VERSION;
preDexLibs = !project.hasProperty('disablePreDex');
}
subprojects {
repositories {
mavenLocal()
jcenter()
mavenCentral()
}
task allclean {
}
afterEvaluate { project ->
allclean.dependsOn(project.tasks.matching {it.name == 'clean'})
if (project.tasks.matching { it.name == 'assembleRelease'}) {
def jarList = new ArrayList()
task setJarList(dependsOn: assembleRelease) << {
configurations.compile.each {
jarList.add(it)
}
}
task copyDeps(dependsOn: setJarList, type: Copy) {
from jarList
into 'build/external'
}
}
}
project.plugins.whenPluginAdded { plugin ->
if ("com.android.build.gradle.AppPlugin".equals(plugin.class.name)) {
project.android.dexOptions.preDexLibraries = rootProject.ext.preDexLibs
} else if ("com.android.build.gradle.LibraryPlugin".equals(plugin.class.name)) {
project.android.dexOptions.preDexLibraries = rootProject.ext.preDexLibs
}
}
apply plugin: 'de.undercouch.download'
ext.makeNdkTasks = { name, deps ->
task "ndk_build_${name}"(dependsOn: deps, type: Exec) {
inputs.file("src/main/jni/${name}")
outputs.dir("$buildDir/${name}")
commandLine getNdkBuildFullPath(project),
'NDK_PROJECT_PATH=null',
'NDK_APPLICATION_MK=../Application.mk',
'NDK_OUT=' + temporaryDir,
"NDK_LIBS_OUT=$buildDir/${name}",
'-C', file("src/main/jni/${name}").absolutePath,
'--jobs', Runtime.getRuntime().availableProcessors()
}
task "ndk_clean_$name"(type: Exec) {
ignoreExitValue true
commandLine getNdkBuildFullPath(project),
'NDK_PROJECT_PATH=null',
'NDK_APPLICATION_MK=../Application.mk',
'NDK_OUT=' + temporaryDir,
"NDK_LIBS_OUT=$buildDir/${name}",
'-C', file("src/main/jni/${name}").absolutePath,
'clean'
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn "ndk_build_$name"
}
clean.dependsOn "ndk_clean_$name"
}
ext.getNdkBuildName = {
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
return "ndk-build.cmd"
} else {
return "ndk-build"
}
}
ext.getNdkBuildFullPath = { Project project ->
File propFile = project.rootProject.file('local.properties')
if (!propFile.exists()) {
return getNdkBuildName()
}
Properties properties = new Properties()
properties.load(propFile.newDataInputStream())
def ndkCommand = properties.getProperty('ndk.command')
if (ndkCommand != null) {
return ndkCommand
}
def path = null
def ndkPath = properties.getProperty('ndk.path')
if (ndkPath != null) {
path = ndkPath
} else {
def ndkDir = properties.getProperty('ndk.dir')
if (ndkDir != null) {
path = ndkDir
}
}
if (path != null) {
if (!path.endsWith(File.separator)) {
path += File.separator
}
return path + getNdkBuildName()
} else {
// if none of above is provided, we assume ndk-build is already in $PATH
return getNdkBuildName()
}
}
ext.nativeDepsDir = new File("${projectDir}/nativedeps")
ext.downloadsDir = new File("${nativeDepsDir}/downloads")
ext.mergeDir = new File("${nativeDepsDir}/merge")
task removeNativeDeps(type: Delete) {
delete nativeDepsDir
}
allclean.dependsOn removeNativeDeps
task createNativeDepsDirectories {
nativeDepsDir.mkdirs()
downloadsDir.mkdirs()
mergeDir.mkdirs()
}
ext.createNativeLibrariesTasks = {name, libraryUrl, libraryFileName, libraryDestinationDir, sourceDir, includePaths, destinationDir ->
// We create the DownloadTask
tasks.create("download${name}", Download) {
src libraryUrl
onlyIfNewer true
overwrite false
dest downloadsDir
dependsOn createNativeDepsDirectories
}
// The unpack task
tasks.create("unpack${name}", Copy) {
from tarTree(resources.gzip("${downloadLibjpeg.dest}/${libraryFileName}"))
into "${downloadsDir}/${libraryDestinationDir}"
dependsOn "download${name}"
}
// The copy task
Task unpackTask = tasks.getByName("unpack${name}")
tasks.create("copy${name}", Copy) {
from "${unpackTask.destinationDir}/${sourceDir}"
from "src/main/jni/third-party/${destinationDir}"
include(includePaths)
into "${mergeDir}/${destinationDir}"
dependsOn "unpack${name}"
}
}
// Libjpeg-turbo
createNativeLibrariesTasks(
'Libjpeg', // Name for the tasks
'https://github.com/libjpeg-turbo/libjpeg-turbo/archive/1.5.0.tar.gz', // The Url for download
'1.5.0.tar.gz', // The downloaded file
'libjpeg', // The folder where the file is downloaded
'libjpeg-turbo-1.5.0', // The first dir where we have put our customisation
['**/*.c', '**/*.h','**/*.S', '**/*.asm', '**/*.inc', '*.mk'], // Files to compile
'libjpeg-turbo-1.5.x' // Final destination dir
)
// Libpng
createNativeLibrariesTasks(
'Libpng', // Name for the tasks
'https://github.com/glennrp/libpng/archive/v1.6.10.tar.gz', // The Url for download
'v1.6.10.tar.gz', // The downloaded file
'libpng', // The folder where the file is downloaded
'libpng-1.6.10', // The first dir where we have put our customisation
['**/*.c', '**/*.h', '**/*.S', '*.mk'], // Files to compile
'libpng-1.6.10' // Final destination dir
)
// Gif
createNativeLibrariesTasks(
'Giflib', // Name for the tasks
'https://launchpad.net/ubuntu/+archive/primary/+files/giflib_5.1.1.orig.tar.gz', // The Url for download
'giflib_5.1.1.orig.tar.gz', // The downloaded file
'giflib', // The folder where the file is downloaded
'giflib-5.1.1/lib', // The first dir where we have put our customisation
['*.c', '*.h', '*.mk'], // Files to compile
'giflib' // Final destination dir
)
// Webp
createNativeLibrariesTasks(
'Libwebp', // Name for the tasks
'https://github.com/webmproject/libwebp/archive/v0.5.2.tar.gz', // The Url for download
'v0.5.2.tar.gz', // The downloaded file
'libwebp', // The folder where the file is downloaded
'libwebp-0.5.2', // The first dir where we have put our customisation
['src/**/*.c', 'src/**/*.h', '*.mk'], // Files to compile
'libwebp-0.5.2' // Final destination dir
)
}
repositories {
}