build - para - gradle version android studio
Directorio de compilaciĆ³n global de Gradle (3)
Quiero saber si es posible configurar Gradle para usar un directorio de build
global para todos los proyectos. Necesito esto porque guardo todos mis proyectos en la carpeta de Google Drive (para respaldo y acceso rápido desde otros dispositivos) y cuando compilo el proyecto, Google Drive está cargando la CPU mientras sincronizo el directorio de build
proyecto. Así que quiero mover los directorios de build
fuera de Google Drive.
También esta opción será útil para aquellos que deseen compilar proyectos utilizando un disco RAM como almacenamiento para el directorio de build
.
Gracias a Peter Niederwieser. Decidí publicar mi propia respuesta debido a detalles adicionales.
Para configurar el directorio de compilación global , debe agregar estas líneas a ~ / .gradle / init.gradle :
gradle.projectsLoaded {
rootProject.allprojects {
buildDir = "/path/to/build/${rootProject.name}/${project.name}"
}
}
Buena opción para tener un directorio de build
global en el disco RAM .
Si eres usuario de macOS (OS X) puedes hacer esto con:
diskutil erasevolume HFS+ ''RAMDiskName'' `hdiutil attach -nomount ram://XXXXXX`
donde XXXXXX
es un recuento de bloques de 512 bytes (por ejemplo, es 262114 para un disco RAM de 128MB)
Y la línea buildDir
será:
buildDir = "/Volumes/RAMDiskName/${rootProject.name}/${project.name}"
También puedes extender la configuración a:
- obtenga la ruta de compilación global desde la variable de entorno o el respaldo para
build
directorio dentro del directorio del proyecto; - incluir grupo de proyectos en la ruta, esto hace que la ruta sea más única, especialmente si tiene varios proyectos con el mismo nombre.
~ / .gradle / init.gradle :
def configProject(p, buildDir) {
p.buildDir = "${buildDir}/${p.name}"
p.subprojects { s ->
configProject(s, "${p.buildDir}")
}
}
def buildDir = System.env.GRADLE_GLOBAL_BUILD_PATH
if (!buildDir?.trim()) {
buildDir = "build"
}
gradle.projectsLoaded {
if (ext.has("group")) {
buildDir += "/${ext.group}"
}
configProject(rootProject, buildDir)
}
Y en la configuración del proyecto.
gradle.ext.group = ''com.example.yourproject''
También puede usar esta configuración en el proyecto build.gradle para configurar el grupo de proyecto, pero esto es opcional:
allprojects {
...
group gradle.ext.group
}
También podrías ir por el camino opuesto. Reemplace la carpeta de build
con una carpeta global.
- Eliminar la carpeta de
build
del proyecto -
mklink /d ...disk/path/to/project/build ...RAM/path/to/project
(oln
en Unix) - Construir rapido
Puede automatizar esto en la tarea de clean
, por lo que una gradlew clean
limpia el contenido de la carpeta y recrea el enlace.
Con algunas pruebas rápidas, parece que Google Drive no reconoce el directorio de enlaces de unión en Windows. Se sincronizarán las carpetas, pero no los contenidos. Extrañamente, si subo archivos a Drive en esas carpetas, se sincronizan en la copia local. Pero, si elimino el archivo sincronizado del disco, la eliminación no se sincroniza de nuevo. Parece que los enlaces hacen que Drive sea de una manera.
build.gradle:
def baseDir = "/global/build/dir/$project.name"
buildDir = baseDir + "/root"
subprojects {
buildDir = baseDir + project.path.replaceFirst(":", "/").replace(":", ".")
}