进程无法访问该文件,因为它正被另一个进程使用 [Android] [Gradle]

Posted

技术标签:

【中文标题】进程无法访问该文件,因为它正被另一个进程使用 [Android] [Gradle]【英文标题】:Process cannot access the file because it is being used by another process [Android] [Gradle] 【发布时间】:2019-11-22 09:09:51 【问题描述】:

每当尝试运行颤振应用程序时,都会遇到此错误。

* What went wrong: Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. java.nio.file.FileSystemException: D:\Projects\buisnesscard\build\app\intermediates\transforms\mergeJavaRes\debug\0.jar: The process cannot access the file because it is being used by another process.

我尝试添加:

packagingOptions exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt'

到我的构建 gradle 文件并重新启动 android studio 但是错误仍然发生。

我的 /app/build.gradle 看起来像这样:

`

def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) 
    localPropertiesFile.withReader('UTF-8')  reader ->
        localProperties.load(reader)
    


def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) 
    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")


def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) 
    flutterVersionCode = '1'


def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) 
    flutterVersionName = '1.0'


apply plugin: 'com.android.application'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

android 
    compileSdkVersion 28

    lintOptions 
        disable 'InvalidPackage'
    

    packagingOptions 
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
    

    defaultConfig 
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.seandiacono.buisnesscard"
        minSdkVersion 21
        targetSdkVersion 27
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    

    buildTypes 
        release 
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.debug
        
    


flutter 
    source '../..'


dependencies 
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.google.firebase:firebase-core:17.0.0'


apply plugin: 'com.google.gms.google-services'

`

【问题讨论】:

【参考方案1】:

对我有用的是关闭 Android Studio,在文件资源管理器中转到我的工作区并删除 project/app/build.然后重新打开 Android Studio。

【讨论】:

【参考方案2】:

我加了

    packagingOptions 
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
        exclude 'META-INF/*'
        exclude("META-INF/*.kotlin_module")
    

在我的 app/build.gradle 文件的 android 部分,然后我进入 FileExplorer [myproject]/app 并删除了标题为“build”的整个目录

【讨论】:

【参考方案3】:

试试这个 Android 工作室:

File -> Invalidate Caches / Restart.. > Invalidate/ Restart

或终端:

flutter clean

【讨论】:

我尝试了flutter clean,但出现错误'flutter' is not recognized as an internal or external command, operable program or batch file.【参考方案4】:

app\build.grade中添加一个multiDexEnabled

defaultConfig 
        .......
        minSdkVersion 21
        targetSdkVersion 28 
        multiDexEnabled true
        .......
    
dependencies 
    .....
    implementation 'com.google.firebase:firebase-core:16.0.9'
    compile  'com.android.support:multidex:1.0.3'

【讨论】:

【参考方案5】:

当我开始从 Windows 更新我的项目时,我遇到了同样的问题。同一个项目运行良好,并且能够在 mac os 中构建 apk。

在我的情况下,问题是由于堆分析造成的。如果您不想使用堆分析,请在 build.gradle 中禁用堆并删除相关依赖项。 或者,如果这是一个要求,请在下面查看我的解决方案。

当前系统操作系统:Windows 10


我的解决方案:

    使用最新版本更新了所有依赖项(仅更新 lib 不能解决问题:但建议这样做)。 在项目级别build.gradle 中更新'com.heapanalytics.android' 版本(**非常重要)。就我而言,我更新到版本“1.7.0” 在项目级别更新 google play 服务版本build.gradle 如果之前未包含在清单中添加android.permission.WAKE_LOCK 权限。这是为了 firebase 分析实例。

使缓存无效并重新启动,然后重建您的项目。

Nb: It will be helpful if anyone struggling with same scenario. That's why i'm posting here. Thanks.

【讨论】:

【参考方案6】:

可能的问题:问题是 Java 服务/进程被您的调试文件夹中的文件卡住(这就是错误消息指向您的 .jar 文件的原因),

可能的解决方案:您必须重新启动或终止 Java 服务/进程。

这样我就可以解决问题了,希望对你有帮助

【讨论】:

【参考方案7】:

将我的文件夹移出我的 Dropbox 文件夹并执行 flutter clean 为我修复了类似的问题。

【讨论】:

以上是关于进程无法访问该文件,因为它正被另一个进程使用 [Android] [Gradle]的主要内容,如果未能解决你的问题,请参考以下文章

该进程无法访问该文件,因为它正被另一个进程 Streamwriter 使用

IOException:该进程无法访问该文件,因为它正被另一个进程使用

该进程无法访问该文件,因为它正被另一个进程使用

错误“该进程无法访问文件'fileDir',因为它正被另一个进程使用。”尝试读取或写入文本文件时[重复]

该进程无法访问该文件,因为它正被另一个进程使用 ioexception

进程无法访问该文件,因为它正被另一个进程使用 [Android] [Gradle]