studio reconstruir proyectos proyecto otro nombre los guardar guardan donde copiar con como gradle android-studio prebuild build.gradle

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() } }