2017-10-19 20 views
3

Je suis sous Windows et mis à jour vers Android Studio (AS) 3.0 RC1. Lorsque j'essaie de construire notre projet avec gradle via AS ou terminal, il s'arrête, le Stacktrace est à la fin. Ce qui est bizarre, c'est que sur mes collègues Mac, ça ne fait que construire.Gradle 3.0 BuildException impossible de créer le répertoire

Donc, je suppose que quelque chose ne va pas avec le chemin. Je n'ai rien trouvé de spécifique à propos de cette BuildException. Quelqu'un a une idée de la raison pour laquelle le chemin semble dupliqué? C:\Development\Workspace\Project\app\build\outputs\apk\Test\debug\C:\Development\Workspace\Project\app\build\outputs\apk\Test\debug

Que puis-je essayer de résoudre ce problème? J'ai nettoyé, reconstruit et redémarré tout ce que je pouvais.

Mise à jour Je viens de mettre à jour AS 3.0 RC 2 et toujours le même problème.

Mise à jour même chose se produit avec l'écurie AS version 3.0 :(

>FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':app:packageTestDebug'. 
> Cannot create directory C:\Development\Workspace\Project\app\build\outputs\apk\Test\debug\C:\Development\Workspace\Project\app\build\outputs\apk\Test\debug 

* Try: 
Run with --info or --debug option to get more log output. 

* Exception is: 
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:packageTestDebug'. 
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100) 
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70) 
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63) 
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54) 
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) 
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88) 
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52) 
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) 
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54) 
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) 
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34) 
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248) 
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) 
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) 
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197) 
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107) 
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241) 
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230) 
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:124) 
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:80) 
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:105) 
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:99) 
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625) 
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580) 
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99) 
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) 
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) 
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) 
Caused by: org.gradle.tooling.BuildException: Cannot create directory C:\Development\Workspace\Project\app\build\outputs\apk\Test\debug\C:\Development\Workspace\Project\app\build\outputs\apk\Test\debug 
at com.android.build.gradle.internal.scope.OutputScope.lambda$parallelForEachOutput$10(OutputScope.java:241) 
at com.android.build.gradle.internal.scope.OutputScope.parallelForEachOutput(OutputScope.java:236) 
at com.android.build.gradle.internal.scope.OutputScope.parallelForEachOutput(OutputScope.java:197) 
at com.android.build.gradle.internal.scope.OutputScope.parallelForEachOutput(OutputScope.java:181) 
at com.android.build.gradle.tasks.PackageAndroidArtifact.doFullTaskAction(PackageAndroidArtifact.java:471) 
at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction(IncrementalTask.java:109) 
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73) 
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$IncrementalTaskAction.doExecute(DefaultTaskClassInfoStore.java:173) 
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134) 
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:121) 
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:122) 
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) 
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) 
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197) 
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107) 
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111) 
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92) 
... 27 more 
Caused by: java.lang.RuntimeException: Cannot create directory C:\Development\Workspace\Project\app\build\outputs\apk\Test\debug\C:\Development\Workspace\Project\app\build\outputs\apk\Test\debug 
at com.android.utils.FileUtils.mkdirs(FileUtils.java:215) 
at com.android.build.gradle.tasks.PackageAndroidArtifact.doTask(PackageAndroidArtifact.java:664) 
at com.android.build.gradle.tasks.PackageAndroidArtifact.splitFullAction(PackageAndroidArtifact.java:522) 
at com.android.build.gradle.internal.scope.OutputScope.lambda$parallelForEachOutput$6(OutputScope.java:186) 
at com.android.build.gradle.internal.scope.OutputScope.lambda$parallelForEachOutput$7(OutputScope.java:203) 
at com.android.build.gradle.internal.scope.OutputScope.lambda$null$8(OutputScope.java:225) 

Répondre

15

Avec la version stable d'Android Studio 3.0, j'ai creusé un peu plus profond.Fait notre script pour nommer l'APK ne fonctionnait pas, mais ne faisait que casser sur Windows.

Old Script:

applicationVariants.all { variant -> 
    variant.outputs.each { output -> 
     def outputFile = output.outputFile 
     if (outputFile != null && outputFile.name.endsWith('.apk')) { 
      def fileName = outputFile.name.replace('.apk', "-${versionName}.apk") 
      output.outputFile = new File(outputFile.parent, fileName) 
     } 
    } 
} 

Script fixe:

applicationVariants.all { variant -> 
    variant.outputs.all { 
     outputFileName = "${variant.name}-${variant.versionName}.apk" 
    } 
} 
+0

Si je veux changer le répertoire de sortie par défaut, il? – qinxianyuzou

+0

j'ai essayé cette solution mais son ne fonctionne pas besoin d'aide ici https://stackoverflow.com/questions/48241450/android-studio-3-0-1-error-in-build-gradle –

1

Dans votre fichier gradle (niveau du module), vous utilisez applicationVariants pour renommer ce? Apk ou des choses comme je devais supprimer cette partie dans mon fichier Gradle pour résoudre ce problème

+0

Haha, c'est incroyable. Je viens de trouver exactement la même solution. Merci quand même! –

0

Je construis même application avec Android Studio 3.0 sur les deux Linux ou Windows. Après la mise à niveau Gradle 3.0.1, j'ai eu un problème similaire sur Windows, alors qu'il fonctionnait très bien sous Linux:

Error:Execution failed for task ':smsreminder:packageDebug'. > Cannot create directory C:\Users\Florent\AndroidStudioProjects\MyApp\myapp\build\outputs\apk\debug\C:\Users\Florent\AndroidStudioProjects\MyApp\myapp\build\outputs\apk\debug

Et grâce à la réponse ci-dessus de Leo, je fait ce nom plus convivial apk:

outputFileName = "${variant.name}-${variant.versionName}.apk" 
=> produces: debug-x.y.apk 

outputFileName = output.outputFile.name + ".${variant.versionName}.apk" 
=> produces: MyAppName.x.y.apk 

Sinon, je trouve ce travail aussi, si l'on veut garder par défaut:

if (org.gradle.internal.os.OperatingSystem.current().windows) 
      outputFileName = "${variant.name}-${variant.versionName}.apk" 
     else 
      outputFileName = new File(output.outputFile.parent, outputFileName.replace(output.outputFile.name, defaultConfig.applicationId + ".apk"))