0

내 Android Studio 프로젝트에서 다른 언어 리소스 (Android 용 strings.xml, iOS 용 .lproj)를 만드는 작은 스크립트가 있습니다."project.copy"가 MacOS에서 작동하지 않습니다. High Sierra

지금까지 모든 것이 정상적으로 작동했지만 MacOS High Sierra로 업그레이드되었습니다. 그리고 지금 내 안드로이드 스튜디오 프로젝트에서 내 문자열 값을 생성하는 gradle-Task는 string.xmlres/ 폴더로 이동하면서 values-da 폴더를 열 수 없기 때문에 실패합니다.

실패 부분은 여기에 있습니다 :

project.fileTree(dir: scriptPath).visit { 
    FileVisitDetails details -> 
     if (details.file.name.startsWith("values-")) { 
      println "copying " + details.file.absolutePath + " to " + resPath; 
      //It fails here at .copy 
      project.copy { 
       from details.file.absolutePath 
       into resPath + "/" + details.file.name 
       // copy english resources to base values folder 
       if (details.file.name.equals("values-en")) { 
        into resPath + "/values" 
       } 
      } 

      details.file.deleteDir(); 
     } 
} 

내 첫번째 추측했다, 이것은 새로운 파일 시스템과 관련이있을 수 있음. 비슷한 문제가있는 사람이 있습니까? High Sierra로 인한 것임을 증명할 수 있습니다. High Sierra로 업데이트 한 후 동료가 동일한 문제를 겪고 있기 때문입니다. 여기

은 "가서 무엇이 잘못"-message :

Caused by: org.gradle.api.GradleException: Could not read directory path '/Some/path/from/User/values-da'. 
08:14:17.474 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.api.internal.file.collections.jdk7.Jdk7DirectoryWalker$1.postVisitDirectory(Jdk7DirectoryWalker.java:109) 
08:14:17.474 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.api.internal.file.collections.jdk7.Jdk7DirectoryWalker$1.postVisitDirectory(Jdk7DirectoryWalker.java:58) 
08:14:17.475 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.api.internal.file.collections.jdk7.Jdk7DirectoryWalker.walkDir(Jdk7DirectoryWalker.java:58) 
08:14:17.475 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.api.internal.file.collections.DirectoryFileTree.walkDir(DirectoryFileTree.java:163) 
08:14:17.475 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.api.internal.file.collections.DirectoryFileTree.visitFrom(DirectoryFileTree.java:147) 
08:14:17.475 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.api.internal.file.collections.DirectoryFileTree.visit(DirectoryFileTree.java:132) 
08:14:17.476 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.api.internal.file.collections.FileTreeAdapter.visit(FileTreeAdapter.java:110) 
08:14:17.476 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.api.internal.file.AbstractFileTree.visit(AbstractFileTree.java:123) 
08:14:17.476 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.api.internal.file.CompositeFileTree.visit(CompositeFileTree.java:64) 
08:14:17.476 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.api.internal.file.CompositeFileTree.visit(CompositeFileTree.java:58) 
08:14:17.476 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.api.file.FileTree$visit.call(Unknown Source) 
08:14:17.476 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at build_4z109ko3musne9trwmjez6vxh$_run_closure6.doCall(/Users/mtuchner/fotoplus-android/frontend-android/app/build.gradle:230) 
08:14:17.477 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.api.internal.ClosureBackedAction.execute(ClosureBackedAction.java:70) 
08:14:17.477 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.util.ConfigureUtil.configureTarget(ConfigureUtil.java:160) 
08:14:17.477 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.util.ConfigureUtil.configureSelf(ConfigureUtil.java:136) 
08:14:17.477 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.api.internal.AbstractTask.configure(AbstractTask.java:528) 
08:14:17.477 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.api.internal.tasks.DefaultTaskContainer.create(DefaultTaskContainer.java:137) 
08:14:17.478 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.api.tasks.TaskContainer$create.call(Unknown Source) 
08:14:17.478 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at build_4z109ko3musne9trwmjez6vxh.run(/Users/mtuchner/fotoplus-android/frontend-android/app/build.gradle:184) 
08:14:17.478 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:90) 
08:14:17.478 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] ... 62 more 

답변

0

나는 작은 변화와 내 문제를 해결할 수 있습니다 : 여기

* What went wrong: 
A problem occurred evaluating project ':app'. 
> Could not read directory path '/Some/path/from/User/values-da'. 

--stacktrace으로 작업을 실행하는 동안 내가 가진 스택 트레이스입니다 . 스택 추적을 게시 한 후 JDK7FileProvider의 ".postVisitDirectory"메서드가 오류를 throw합니다.

FileTree에서 방문한 후이 메서드가 항상 호출된다고 나와 있습니다. 그래서 나는 Delete Operation을 현재 방문에서 꺼내서 .visit{} 뒤에있는 클로저에 넣었고 다시 컴파일합니다. 여기

코드 :

List<File> dirsToDelete = new ArrayList<File>() 
// copy string resources from shared 
project.fileTree(dir: scriptPath).visit { 
    FileVisitDetails details -> 
     if (details.file.name.startsWith("values-")) { 
      println "copying " + details.file.absolutePath + " to " + resPath; 
       project.copy { 
        from details.file.absolutePath 
        into resPath + "/" + details.file.name 
        // copy english resources to base values folder 
        if (details.file.name.equals("values-en")) { 
         into resPath + "/values" 
        } 
        dirsToDelete.add(details.file) 
      } 
     } 
}.with { 
    for(Iterator<File> i = dirsToDelete.iterator(); i.hasNext();) { 
     File file = i.next(); 
     file.deleteDir(); 
    } 
}