gradle - reconstruir - guardar proyecto android studio con otro nombre
Cómo ejecutar una tarea de copia con el estudio de Android en la carpeta de activos (7)
Agregue esta línea a su archivo build.gradle
:
assemble.dependsOn copyFiles
assemble.mustRunAfter copyFiles
donde assemble
puede ser cualquier tarea.
Editar: agregué el bit mustRunAfter
para asegurarme de que la tarea copyFiles se ejecuta antes que cualquiera de las demás dependencias de ensamblaje.
Hasta ahora he agregado lo siguiente al final de mi "build.gradle"
task copyFiles(type: Copy)
copyFiles {
description = ''Copies html5 files from the common library...''
from ''../../www''
into ''assets/www''
include(''**/*'')
}
Ahora solo necesito ayuda sobre cómo hacer que esta tarea se ejecute cada vez (antes) compilando la fuente de Android. Puedo ejecutar la tarea de copia manualmente desde la línea de comandos, pero me gustaría ejecutarla cuando hago clic en "ejecutar" en el estudio de Android.
Con la ayuda de la sugerencia a continuación, he agregado
clean.dependsOn copyFiles
clean.mustRunAfter copyFiles
Y con esta adición puedo ejecutar mi tarea de copia haciendo reconstruir -> ejecutar. Es mejor que nada, pero sería bueno omitir el paso de reconstrucción.
Aquí está todo el build.gradle que uso con android studio.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath ''com.android.tools.build:gradle:0.5.+''
}
}
apply plugin: ''android''
dependencies {
compile files(''/libs/acra-4.3.0.jar'')
}
android {
compileSdkVersion 17
buildToolsVersion "17"
defaultConfig {
minSdkVersion 8
targetSdkVersion 17
}
sourceSets {
main {
manifest.srcFile ''AndroidManifest.xml''
java.srcDirs = [''src'',''libs'']
resources.srcDirs = [''src'']
aidl.srcDirs = [''src'']
renderscript.srcDirs = [''src'']
res.srcDirs = [''res'']
assets.srcDirs = [''assets'']
}
instrumentTest.setRoot(''tests'')
}
}
task copyFiles(type: Copy)
copyFiles {
description = ''Copies html5 files from the common library...''
from ''../../www''
into ''assets/www''
include(''**/*'')
}
clean.dependsOn copyFiles
clean.mustRunAfter copyFiles
Aquí está el build.gradle del módulo que estoy usando que copia exitosamente los archivos que quería como una tarea previa a la construcción. El "en" se modela después de la clase de archivo en Java, por lo que debe ser familiar sobre cómo usarlo. Las dos líneas al final son opcionales: ejecutará la tarea copyFiles cuando invoque gradle clean:
android {
.....
}
task copyFiles(type: Copy) {
description = ''copying some file(s)....''
from ''src/main''
into project('':Path:To:ModuleFrom:Settings.gradle'').file(''./res'')
include ''file1.suffix''
include ''**/*.html''
}
project.afterEvaluate {
preBuild.dependsOn copyFiles
}
clean.dependsOn copyFiles
clean.mustRunAfter copyFiles
De esta manera hago una copia personalizada de los archivos activos en mi sistema de compilación android-gradle
preBuild.dependsOn copyFiles
Pruebe esto debajo de su build.gradle
:
tasks.whenTaskAdded { task ->
if (task.name == ''assemble'') {
task.dependsOn copyFiles
}
}
En mi caso, manipulo algunos valores ''token'' dentro de res/values/strings.xml
, y luego los copio en ${project_root}/build/filtered-resources
debido al problema de limpieza del proyecto.
Para trabajar correctamente con este recurso manipulado, android.sourceSets.res
debe redefinir a la carpeta copiada.
Para su caso, copie la carpeta de assets
con su recurso www
en ${PROJECT_ROOT}/build/your/desired/location
, y asigne android.sourceSets.assets
a él.
Tuve un problema muy similar al tuyo y pude resolverlo de la siguiente manera:
android.buildTypes.all{ buildType ->
task "${buildType.name}CopyFiles" (type: Copy)
"${buildType.name}CopyFiles" {
description = ''Copies html5 files from the common library...''
from ''../../www''
into ''assets/www''
include(''**/*'')
}
tasks.getByPath(":${project.name}:assemble${buildType.name.capitalize()}").dependsOn "${buildType.name}CopyFiles"
}
El problema es que Android Studio parece llamar a una tarea de ensamblaje específica como assembleDebug cuando haces clic en ejecutar, es por eso que debes asegurarte de que todas las tareas de ensamblaje dependan de tu tarea de copiado.
Utilizo la siguiente tarea de copia en mi proyecto para copiar cadenas en otro directorio:
task copyStringsUniversal(type: Copy) {
from ''src/main/res/values''
include ''strings.xml''
include ''array.xml''
into ''src/universal/res/values''
}
build.dependsOn copyStringsUniversal
task myCopyToAssets(type: Copy) {
def toDir = rootProject.file(''app/assets'')
from (rootProject.file(''app/usb'')) {
include ''libhotplug.so''
}
into toDir
}
tasks.whenTaskAdded { task ->
//println task.getName()
if (task.name == ''assembleDebug'' || task.name == ''assembleRelease'') {
println ''myCopy''
myCopyToLibs.execute()
myCopyToAssets.execute()
}
}