27.1.从零开始学springboot-运行原理

本文深入探讨SpringBoot的启动机制,解析SpringBoot如何通过简化配置,实现快速项目启动。从入口类、核心注解功能到SpringApplication实例初始化过程,全面揭示SpringBoot运行背后的秘密。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

SpringBoot作为目前最流行的 Java 开发框架,秉承“约定优于配置”原则,大大简化了 Spring MVC 繁琐的 XML 文件配置,基本实现零配置启动项目。
本文基于SpringBoot 2.1.4.RELEASE 版本,通过一步步追踪代码,详细探求 SpringBoot的运行原理。

图解

整个springboot运行流程可以由如下图表示(图来自互联网,版权归原作者所有)
1.png

入口类

首先让我们看一下最简单的 SpringBoot入口类

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

入口类的要求是最顶层包下面第一个含有 main 方法的类,使用注解 @SpringBootApplication 来启用SpringBoot特性,使用 SpringApplication.run 方法来启动 Spring Boot 项目。

首先我们来看下@SpringBootApplication这个注解都干了下什么。
追踪其实现类:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
		@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM,
				classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
        //....省略
}

由上可以看出@SpringBootApplication注解实际上是SpringBoot提供的一个复合注解,其中最重要的三个注解分别是:

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan

事实上,我们可以把入口类上的@SpringBootApplication这个注解替换为以上三个注解,效果是一样的。同学们可以自己试试。

下面我们分别阐述这三个注解都是干什么的。

@SpringBootConfiguration

@SpringBootConfiguration
追踪其实现代码

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {

}

终于看到熟悉的@Configuration注解了,在Spring中,作用是配置Spring容器,也即 JavaConfig 形式的 Spring IoC 容器的配置类所使用。
这说明 @SpringBootConfiguration 也是来源于 @Configuration,二者功能都是将当前类标注为配置类,并将当前类里以 @Bean 注解标记的方法的实例注入到srping容器中,实例名即为方法名。

@EnableAutoConfiguration

@EnableAutoConfiguration
实现代码

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
        //....省略
}

@EnableAutoConfiguration注解作用是启用自动配置,可以帮助 SpringBoot 应用,将所有符合条件的 @Configuration 配置都加载到当前 IoC 容器之中

@AutoConfigurationPackage自动配置包,将SpringBootApplication主配置类所在包以及子包的所有子类扫描到spring容器

@Import(AutoConfigurationImportSelector.class)导入组件开启自动配置类导包的选择器。
我们可以追踪AutoConfigurationImportSelector这个类看看其实现

	@Override
	public String[] selectImports(AnnotationMetadata annotationMetadata) {
		if (!isEnabled(annotationMetadata)) {
			return NO_IMPORTS;
		}
		AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader
				.loadMetadata(this.beanClassLoader);
		AutoConfigurationEntry autoConfigurationEntry = getAutoConfigurationEntry(
				autoConfigurationMetadata, annotationMetadata);
		return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
	}

对应的getAutoConfigurationEntry()实现

protected AutoConfigurationEntry getAutoConfigurationEntry(
			AutoConfigurationMetadata autoConfigurationMetadata,
			AnnotationMetadata annotationMetadata) {
		if (!isEnabled(annotationMetadata)) {
			return EMPTY_ENTRY;
		}
		AnnotationAttributes attributes = getAttributes(annotationMetadata);
		List<String> configurations = getCandidateConfigurations(annotationMetadata,
				attributes);
		configurations = removeDuplicates(configurations);
		Set<String> exclusions = getExclusions(annotationMetadata, attributes);
		checkExcludedClasses(configurations, exclusions);
		configurations.removeAll(exclusions);
		configurations = filter(configurations, autoConfigurationMetadata);
		fireAutoConfigurationImportEvents(configurations, exclusions);
		return new AutoConfigurationEntry(configurations, exclusions);
	}

getCandidateConfigurations()的实现

	protected List<String> getCandidateConfigurations(AnnotationMetadata metadata,
			AnnotationAttributes attributes) {
		List<String> configurations = SpringFactoriesLoader.loadFactoryNames(
				getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());
		Assert.notEmpty(configurations,
				"No auto configuration classes found in META-INF/spring.factories. If you "
						+ "are using a custom packaging, make sure that file is correct.");
		return configurations;
	}

可以看出selectImports() 方法最终是通过调用SpringCore 包里 SpringFactoriesLoader 类的 loadFactoryNames()方法,读取了 ClassPath 下面的 META-INF/spring.factories 文件来获取所有导出类。而spring.factories 文件里关于 EnableAutoConfiguration 的配置其实就是一个键值对结构,我们看下对应的spring.factories文件内容

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
//.......省略

最后,我们概括下,@EnableAutoConfiguration注解实现了从 ClassPath下扫描所有的 META-INF/spring.factories 配置文件,并将spring.factories 文件中的 EnableAutoConfiguration 对应的配置项通过反射机制实例化为对应标注了 @Configuration 的形式的IoC容器配置类,然后注入IoC容器。

@ComponentScan

最后我们看下@ComponentScan注解
@ComponentScan 对应于XML配置形式中的 context:component-scan,用于将一些标注了特定注解的bean定义批量采集注册到Spring的IoC容器之中,这些特定的注解大致包括:
@Controller
@Entity
@Component
@Service
@Repository
等等

对于该注解,还可以通过 basePackages 属性来更细粒度的控制该注解的自动扫描范围,比如:

@ComponentScan(basePackages = {"com.mrcoder.controller","com.mrcoder.entity"})

SpringApplication实例初始化过程分析

追踪入口类中的run方法

public static ConfigurableApplicationContext run(Class<?> primarySource,
        String... args) {
    return run(new Class<?>[] { primarySource }, args);
}

/**
  * 第一个参数 primarySource:加载的主要资源类
  * 第二个参数 args:传递给应用的应用参数
  */
public static ConfigurableApplicationContext run(Class<?>[] primarySources,
        String[] args) {
    return new SpringApplication(primarySources).run(args);
}

可以看出,run方法先用主要资源类primarySources 来实例化一个 SpringApplication 对象,再调用这个SpringApplication对象的 run 方法。
进入SpringApplication()构造方法

public SpringApplication(Class<?>... primarySources) {
    this(null, primarySources);
}

然后进入SpringApplication构造函数

@SuppressWarnings({ "unchecked", "rawtypes" })
public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
    //1.资源初始化资源加载器为 null
    this.resourceLoader = resourceLoader;
    //2.断言主要加载资源类不能为 null,否则报错
    Assert.notNull(primarySources, "PrimarySources must not be null");
    //3.初始化主要加载资源类集合并去重
    this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
    //4.推断当前 WEB 应用类型
    this.webApplicationType = WebApplicationType.deduceFromClasspath();
    //5.设置应用上线文初始化器
    setInitializers((Collection) getSpringFactoriesInstances(
            ApplicationContextInitializer.class));
    //6.设置监听器            
    setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
    //7.推断主入口应用类
    this.mainApplicationClass = deduceMainApplicationClass();
}

对于1-3没有什么好讲的,大家都能看懂,
我们看看后几步。
第4步
这个就是根据类路径下是否有对应项目类型的类推断出不同的应用类型,进入该类可以看到

package org.springframework.boot;
import org.springframework.util.ClassUtils;
public enum WebApplicationType {
    //非 WEB 项目
	NONE,
	//SERVLET WEB 项目
	SERVLET,
	//响应式 WEB 项目
	REACTIVE;
	
    //省略......

第5步

setInitializers((Collection) getSpringFactoriesInstances(
        ApplicationContextInitializer.class));

ApplicationContextInitializer该类是干啥的呢?进入该类可以看到如下定义

package org.springframework.context;
public interface ApplicationContextInitializer<C extends ConfigurableApplicationContext> {
	void initialize(C applicationContext);
}

用来初始化指定的 Spring 应用上下文,如注册属性资源、激活 Profiles 等。
接下来我们来分析下第5步使用的setInitializers()方法

public void setInitializers(
        Collection<? extends ApplicationContextInitializer<?>> initializers) {
    this.initializers = new ArrayList<>();
    this.initializers.addAll(initializers);
}

分析实现源码,可以看出,其实就是初始化一个 ApplicationContextInitializer 应用上下文初始化器实例的集合。

接下来看下getSpringFactoriesInstances()的方法实现

private <T> Collection<T> getSpringFactoriesInstances(Class<T> type) {
    return getSpringFactoriesInstances(type, new Class<?>[] {});
}

private <T> Collection<T> getSpringFactoriesInstances(Class<T> type,
        Class<?>[] parameterTypes, Object... args) {
    //1.获取当前线程上下文类加载器
    ClassLoader classLoader = getClassLoader();
    //2.获取 ApplicationContextInitializer 的实例名称集合并去重
    Set<String> names = new LinkedHashSet<>(
            //3.loadFactoryNames根据类路径下的 META-INF/spring.factories 文件解析并获取 ApplicationContextInitializer 接口的所有配置的类路径名称。
            SpringFactoriesLoader.loadFactoryNames(type, classLoader));
            //4.根据以上类路径创建初始化器实例列表
    List<T> instances = createSpringFactoriesInstances(type, parameterTypes,
            classLoader, args, names);
    //5.初始化器实例列表排序
    AnnotationAwareOrderComparator.sort(instances);
    //6.返回初始化器实例列表
    return instances;
}

在看第6步,设置监听器,可以看到使用了ApplicationListener这个类,

package org.springframework.context;
import java.util.EventListener;
@FunctionalInterface
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {
	void onApplicationEvent(E event);
}

以上代码可知,这个接口继承了 JDK 的 java.util.EventListener 接口,实现了观察者模式,它一般用来定义感兴趣的事件类型,事件类型限定于 ApplicationEvent 的子类,这同样继承了 JDK 的 java.util.EventObject 接口。

设置监听器和设置初始化器调用的方法是一样的,只是传入的类型不一样,设置监听器的接口类型为getSpringFactoriesInstances,对应的spring-boot-autoconfigure-2.1.4.RELEASE.jar!/META-INF/spring.factories 文件配置内容请见下方

# Application Listeners
org.springframework.context.ApplicationListener=\
org.springframework.boot.autoconfigure.BackgroundPreinitializer

可以看出目前只有一个 BackgroundPreinitializer 监听器。

第7步推断主入口应用类

private Class<?> deduceMainApplicationClass() {
    try {
        StackTraceElement[] stackTrace = new RuntimeException().getStackTrace();
        for (StackTraceElement stackTraceElement : stackTrace) {
            if ("main".equals(stackTraceElement.getMethodName())) {
                return Class.forName(stackTraceElement.getClassName());
            }
        }
    }
    catch (ClassNotFoundException ex) {
        // Swallow and continue
    }
    return null;
}

这个推断入口应用类的方式有点特别,通过构造一个运行时异常,再遍历异常栈中的方法名,获取方法名为 main 的栈帧,从来得到入口类的名字再返回该类。

请关注我的订阅号

订阅号.png

D:\AndroidStudioProjects\MyApplication>gradlew.bat clean BUILD SUCCESSFUL in 1s 2 actionable tasks: 2 up-to-date D:\AndroidStudioProjects\MyApplication> D:\AndroidStudioProjects\MyApplication> D:\AndroidStudioProjects\MyApplication>%ANDROID_SDK_ROOT%\build-tools\35.0.0\ '%ANDROID_SDK_ROOT%\build-tools\35.0.0\' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 D:\AndroidStudioProjects\MyApplication>rd /s /q "%USERPROFILE%\.gradle\caches" C:\Users\Administrator\.gradle\caches\6.5\executionHistory\executionHistory.lock - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\6.5\fileContent\fileContent.lock - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\6.5\fileHashes\fileHashes.bin - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\6.5\fileHashes\fileHashes.lock - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\6.5\fileHashes\resourceHashesCache.bin - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\jars-8\0ddd9547f96fe3f0682309b172763374\cp_proj.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\jars-8\565dbc7d5187aee4976d1bb041b2e8c1\proj.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\jars-8\987b4a563883aa10b85fe6f359314f4b\proj.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\jars-8\9c522d8f36ae46506e5d913c43d1b9ea\cp_proj.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\jars-8\d7225c5d31554bfdfbefadcc993a2aa4\settings.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\jars-8\jars-8.lock - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\journal-1\file-access.bin - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\journal-1\journal-1.lock - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\androidx.databinding\databinding-common\4.1.2\c0c244ac411c918b83a9dc54adad33493a1bc52c\databinding-com mon-4.1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\androidx.databinding\databinding-compiler-common\4.1.2\9fff694ffcfcce37638642f4e519a508a85191cd\databi nding-compiler-common-4.1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android\signflinger\4.1.2\394654886c76c2f428352c677163aef7777cf636\signflinger-4.1.2.jar - 另一个 程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android\zipflinger\4.1.2\3d91e3c852227643882b70726b7e0de9ecc2972e\zipflinger-4.1.2.jar - 另一个程 序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.databinding\baseLibrary\4.1.2\9d1ddffaeeb01ca05973c774b0c4771d3e80c011\baseLibrary-4.1.2.j ar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools\annotations\27.1.2\38fee9cdd1e800721224dfebd41141de8fb43afa\annotations-27.1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools\common\27.1.2\9cc41e6644c8d37143373de102f21194416d3872\common-27.1.2.jar - 另一个程 序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools\dvlib\27.1.2\6c1afd898edc923c409ba66eb6d32a1cf0595907\dvlib-27.1.2.jar - 另一个程序 正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools\repository\27.1.2\957831c43dfe01bcdf756d81500afed8f608c627\repository-27.1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools\sdk-common\27.1.2\b3aeea1c4d2a329ceb56582be26e33b679d5ea60\sdk-common-27.1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools\sdklib\27.1.2\681a16ea34f8113ba1e491b2abfcf612f8840ee3\sdklib-27.1.2.jar - 另一个程 序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.analytics-library\crash\27.1.2\7654ab27a539856eaaf729d73f8ea4e8a02f6450\crash-27.1.2 .jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.analytics-library\protos\27.1.2\d3e34cee5cd028105870d5802d86b67dc58615e3\protos-27.1 .2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.analytics-library\shared\27.1.2\2c0ca03a8992e8730d150a853bc2a86502a6c1db\shared-27.1 .2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.analytics-library\tracker\27.1.2\e81d885db07d7bd271574b773a4f66de4483a284\tracker-27 .1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\aapt2-proto\4.1.2-6503028\9af46dd51d7e3d70e8f4fce6a9cafe4e46e25650\aapt2-proto -4.1.2-6503028.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\aaptcompiler\4.1.2\7e2e62b769b1abd9bebd1403a790a85b6bb44dd5\aaptcompiler-4.1.2 .jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\apksig\4.1.2\1b9b7535ff23063cf517ec51d3793b6bf2bc3df0\apksig-4.1.2.jar - 另一 个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\apkzlib\4.1.2\892617d74f42de313ad8912f16e610ed06decad6\apkzlib-4.1.2.jar - 另 一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\builder\4.1.2\a3d11213e0843d39de9b79f3a31f51c079fd3ffe\builder-4.1.2.jar - 另 一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\builder-model\4.1.2\230168d0621c0207c486e932ccaf773b46f1374e\builder-model-4.1 .2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\builder-test-api\4.1.2\88541c05768d98c4661d84829da7417be1eaee14\builder-test-a pi-4.1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\bundletool\0.14.0\e7ecfb48a6d43f4ec23475c9d04b96c97ecc101b\bundletool-0.14.0.j ar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\gradle\4.1.2\d56e2eaa0cd496e8e0a2fc833be09fe7b9f1e0e6\gradle-4.1.2.jar - 另一 个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\gradle-api\4.1.2\f67ab4948f013866e7f494c2d92711b902da47d3\gradle-api-4.1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\manifest-merger\27.1.2\be1200a2283b876d081689fed1cbebcaf1970f0f\manifest-merge r-27.1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\transform-api\2.0.0-deprecated-use-gradle-api\47f6c56527c42425742fa9b56ffd3fd8 0763fe03\transform-api-2.0.0-deprecated-use-gradle-api.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build.jetifier\jetifier-core\1.0.0-beta09\c98ee0e5579aed97e17f605a89b101115a2f5a61\j etifier-core-1.0.0-beta09.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build.jetifier\jetifier-processor\1.0.0-beta09\fb2a015ff56e24939a88593ac73b84e627864 476\jetifier-processor-1.0.0-beta09.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.ddms\ddmlib\27.1.2\29aaa89feccafc6012c8b7f91548ec6866a55e52\ddmlib-27.1.2.jar - 另一 个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.layoutlib\layoutlib-api\27.1.2\c15c507501f3cd4f7ea079c102746f7f62dac039\layoutlib-ap i-27.1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.lint\lint-gradle-api\27.1.2\f6beef41aa320d2f74b80cf224155db10fe3b545\lint-gradle-api -27.1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.lint\lint-model\27.1.2\46f49b331bd25833c0d005089bfc7e2eeb5b85cc\lint-model-27.1.2.ja r - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.auto.value\auto-value-annotations\1.6.2\ed193d86e0af90cc2342aedbe73c5d86b03fa09b\auto-value -annotations-1.6.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.code.findbugs\jsr305\3.0.2\25ea2e8b0c338a877313bd4672d3fe056ea78f0d\jsr305-3.0.2.jar - 另一 个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.code.gson\gson\2.8.5\f645ed69d595b24d4cf8b3fbb64cc505bede8829\gson-2.8.5.jar - 另一个程序正 在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.crypto.tink\tink\1.3.0-rc2\c7efb1ecc3b667b8a0789a1b019b06269037e19b\tink-1.3.0-rc2.jar - 另 一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.errorprone\error_prone_annotations\2.3.2\d1a0c5032570e0f64be6b4d9c90cdeb103129029\error_pro ne_annotations-2.3.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.flatbuffers\flatbuffers-java\1.12.0\8201cc7b511177a37071249e891f2f2fea4b32e9\flatbuffers-ja va-1.12.0.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.guava\failureaccess\1.0.1\1dcf1de382a0bf95a3d8b0849546c88bac1292c9\failureaccess-1.0.1.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.guava\guava\28.1-jre\b0e91dcb6a44ffb6221b5027e12a5cb34b841145\guava-28.1-jre.jar - 另一个程 序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\b421526c5f297295adef1c886e 5246c39d4ac629\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.j2objc\j2objc-annotations\1.3\ba035118bc8bac37d7eff77700720999acd9986d\j2objc-annotations-1 .3.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.jimfs\jimfs\1.1\8fbd0579dc68aba6186935cc1bee21d2f3e7ec1c\jimfs-1.1.jar - 另一个程序正在使用 此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.protobuf\protobuf-java\3.10.0\410b61dd0088aab4caa05739558d43df248958c9\protobuf-java-3.10.0 .jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.protobuf\protobuf-java-util\3.10.0\a68c906db83e93babbb4024ce91e7441bb7598dd\protobuf-java-u til-3.10.0.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.test.platform\core-proto\0.0.2-dev\56452fc5ddd0dc8e0e2f56b86910d97373a4b75c\core-proto-0.0. 2-dev.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.googlecode.json-simple\json-simple\1.1\5e303a03d04e6788dddfa3655272580ae0fc13bb\json-simple-1.1.ja r - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.googlecode.juniversalchardet\juniversalchardet\1.0.3\cd49678784c46aa8789c060538e0154013bb421b\juni versalchardet-1.0.3.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.squareup\javapoet\1.10.0\712c178d35185d8261295913c9f2a7d6867a6007\javapoet-1.10.0.jar - 另一个程序 正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.squareup\javawriter\2.5.0\81241ff7078ef14f42ea2a8995fa09c096256e6b\javawriter-2.5.0.jar - 另一个程 序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.sun.activation\javax.activation\1.2.0\bf744c1e2776ed1de3c55c8dac1057ec331ef744\javax.activation-1. 2.0.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.sun.istack\istack-commons-runtime\3.0.7\c197c86ceec7318b1284bffb49b54226ca774003\istack-commons-ru ntime-3.0.7.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.sun.xml.fastinfoset\FastInfoset\1.2.15\bb7b7ec0379982b97c62cd17465cb6d9155f68e8\FastInfoset-1.2.15 .jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\commons-codec\commons-codec\1.10\4b95f4897fa13f2cd904aee711aeafc0c5295cd8\commons-codec-1.10.jar - 另 一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\commons-io\commons-io\2.4\b1b6ea3b7e4aa4f492509a4952029cd8e48019ad\commons-io-2.4.jar - 另一个程序正在 使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\commons-logging\commons-logging\1.2\4bfc12adfe4842bf07b657f0369c4cb522955686\commons-logging-1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\it.unimi.dsi\fastutil\7.2.0\5ad3a2bb04143f70aa0765fc29fc29571a7d6b34\fastutil-7.2.0.jar - 另一个程序正 在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\javax.activation\javax.activation-api\1.2.0\85262acf3ca9816f9537ca47d5adeabaead7cb16\javax.activation- api-1.2.0.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\javax.inject\javax.inject\1\6975da39a7040257bd51d21a231b76c915872d38\javax.inject-1.jar - 另一个程序正 在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\javax.xml.bind\jaxb-api\2.3.1\8531ad5ac454cc2deb9d4d32c40c4d7451939b5d\jaxb-api-2.3.1.jar - 另一个程序 正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\net.sf.jopt-simple\jopt-simple\4.9\ee9e9eaa0a35360dcfeac129ff4923215fd65904\jopt-simple-4.9.jar - 另一 个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\net.sf.kxml\kxml2\2.3.0\ccbc77a5fd907ef863c29f3596c6f54ffa4e9442\kxml2-2.3.0.jar - 另一个程序正在使用 此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\net.sf.proguard\proguard-base\6.0.3\7135739d2d3834964c543ed21e2936ce34747aca\proguard-base-6.0.3.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\net.sf.proguard\proguard-gradle\6.0.3\e5becf2356695a396b788110e386c38bad523bfc\proguard-gradle-6.0.3.j ar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.antlr\antlr4\4.5.3\f35db7e4b2446e4174ba6a73db7bd6b3e6bb5da1\antlr4-4.5.3.jar - 另一个程序正在使用 此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.apache.commons\commons-compress\1.12\84caa68576e345eb5e7ae61a0e5a9229eb100d7b\commons-compress-1.1 2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.apache.httpcomponents\httpclient\4.5.6\1afe5621985efe90a92d0fbc9be86271efbe796f\httpclient-4.5.6.j ar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.apache.httpcomponents\httpcore\4.4.10\acc54d9b28bdffe4bbde89ed2e4a1e86b5285e2b\httpcore-4.4.10.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.apache.httpcomponents\httpmime\4.5.6\164343da11db817e81e24e0d9869527e069850c9\httpmime-4.5.6.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.bouncycastle\bcpkix-jdk15on\1.56\4648af70268b6fdb24674fb1fd7c1fcc73db1231\bcpkix-jdk15on-1.56.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.bouncycastle\bcprov-jdk15on\1.56\a153c6f9744a3e9dd6feab5e210e1c9861362ec7\bcprov-jdk15on-1.56.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.checkerframework\checker-qual\2.8.1\eb2e8ab75598548cc8acf9a1ca227e480e01881e\checker-qual-2.8.1.ja r - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.codehaus.mojo\animal-sniffer-annotations\1.18\f7aa683ea79dc6681ee9fb95756c999acbb62f5d\animal-snif fer-annotations-1.18.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\jaxb-runtime\2.3.1\dd6dda9da676a54c5b36ca2806ff95ee017d8738\jaxb-runtime-2.3.1.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\txw2\2.3.1\a09d2c48d3285f206fafbffe0e50619284e92126\txw2-2.3.1.jar - 另一个程序正在 使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.jdom\jdom2\2.0.6\6f14738ec2e9dd0011e343717fa624a10f8aab64\jdom2-2.0.6.jar - 另一个程序正在使用此文 件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.jetbrains\annotations\13.0\919f0dfe192fb4e063e7dacadee7f8bb9a2672a9\annotations-13.0.jar - 另一个 程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-reflect\1.3.72\86613e1a669a701b0c660bfd2af4f82a7ae11fca\kotlin-reflect-1.3 .72.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib\1.3.72\8032138f12c0180bc4e51fe139d4c52b46db6109\kotlin-stdlib-1.3.7 2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib-common\1.3.72\6ca8bee3d88957eaaaef077c41c908c9940492d8\kotlin-stdli b-common-1.3.72.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib-jdk7\1.3.72\3adfc2f4ea4243e01204be8081fe63bde6b12815\kotlin-stdlib- jdk7-1.3.72.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib-jdk8\1.3.72\916d54b9eb6442b615e6f1488978f551c0674720\kotlin-stdlib- jdk8-1.3.72.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.jetbrains.trove4j\trove4j\20160824\33c3e174a9c8368d93761d3d12712db18e903959\trove4j-20160824.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.json\json\20180813\8566b2b0391d9d4479ea225645c6ed47ef17fe41\json-20180813.jar - 另一个程序正在使用 此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.jvnet.staxex\stax-ex\1.8\8cc35f73da321c29973191f2cf143d29d26a1df7\stax-ex-1.8.jar - 另一个程序正在 使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.ow2.asm\asm\7.0\d74d4ba0dee443f68fb2dcb7fcdb945a2cd89912\asm-7.0.jar - 另一个程序正在使用此文件, 进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.ow2.asm\asm-analysis\7.0\4b310d20d6f1c6b7197a75f1b5d69f169bc8ac1f\asm-analysis-7.0.jar - 另一个程 序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.ow2.asm\asm-commons\7.0\478006d07b7c561ae3a92ddc1829bca81ae0cdd1\asm-commons-7.0.jar - 另一个程序 正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.ow2.asm\asm-tree\7.0\29bc62dcb85573af6e62e5b2d735ef65966c4180\asm-tree-7.0.jar - 另一个程序正在使 用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.ow2.asm\asm-util\7.0\18d4d07010c24405129a6dbb0e92057f8779fb9d\asm-util-7.0.jar - 另一个程序正在使 用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.tensorflow\tensorflow-lite-metadata\0.1.0-rc1\f6e561e9053f2e9a2779d2ce1dffd45ce4dc3c74\tensorflow- lite-metadata-0.1.0-rc1.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\metadata-2.96\module-artifact.bin - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\metadata-2.96\module-metadata.bin - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\modules-2.lock - 另一个程序正在使用此文件,进程无法访问。 D:\AndroidStudioProjects\MyApplication>cd /d D:\AndroidStudioProjects\MyApplication D:\AndroidStudioProjects\MyApplication>rd /s /q build .gradle 系统找不到指定的文件。 D:\AndroidStudioProjects\MyApplication>rd /s /q "%USERPROFILE%\.gradle\caches" C:\Users\Administrator\.gradle\caches\6.5\executionHistory\executionHistory.lock - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\6.5\fileContent\fileContent.lock - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\6.5\fileHashes\fileHashes.bin - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\6.5\fileHashes\fileHashes.lock - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\6.5\fileHashes\resourceHashesCache.bin - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\jars-8\0ddd9547f96fe3f0682309b172763374\cp_proj.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\jars-8\565dbc7d5187aee4976d1bb041b2e8c1\proj.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\jars-8\987b4a563883aa10b85fe6f359314f4b\proj.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\jars-8\9c522d8f36ae46506e5d913c43d1b9ea\cp_proj.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\jars-8\d7225c5d31554bfdfbefadcc993a2aa4\settings.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\jars-8\jars-8.lock - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\journal-1\file-access.bin - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\journal-1\journal-1.lock - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\androidx.databinding\databinding-common\4.1.2\c0c244ac411c918b83a9dc54adad33493a1bc52c\databinding-com mon-4.1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\androidx.databinding\databinding-compiler-common\4.1.2\9fff694ffcfcce37638642f4e519a508a85191cd\databi nding-compiler-common-4.1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android\signflinger\4.1.2\394654886c76c2f428352c677163aef7777cf636\signflinger-4.1.2.jar - 另一个 程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android\zipflinger\4.1.2\3d91e3c852227643882b70726b7e0de9ecc2972e\zipflinger-4.1.2.jar - 另一个程 序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.databinding\baseLibrary\4.1.2\9d1ddffaeeb01ca05973c774b0c4771d3e80c011\baseLibrary-4.1.2.j ar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools\annotations\27.1.2\38fee9cdd1e800721224dfebd41141de8fb43afa\annotations-27.1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools\common\27.1.2\9cc41e6644c8d37143373de102f21194416d3872\common-27.1.2.jar - 另一个程 序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools\dvlib\27.1.2\6c1afd898edc923c409ba66eb6d32a1cf0595907\dvlib-27.1.2.jar - 另一个程序 正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools\repository\27.1.2\957831c43dfe01bcdf756d81500afed8f608c627\repository-27.1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools\sdk-common\27.1.2\b3aeea1c4d2a329ceb56582be26e33b679d5ea60\sdk-common-27.1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools\sdklib\27.1.2\681a16ea34f8113ba1e491b2abfcf612f8840ee3\sdklib-27.1.2.jar - 另一个程 序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.analytics-library\crash\27.1.2\7654ab27a539856eaaf729d73f8ea4e8a02f6450\crash-27.1.2 .jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.analytics-library\protos\27.1.2\d3e34cee5cd028105870d5802d86b67dc58615e3\protos-27.1 .2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.analytics-library\shared\27.1.2\2c0ca03a8992e8730d150a853bc2a86502a6c1db\shared-27.1 .2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.analytics-library\tracker\27.1.2\e81d885db07d7bd271574b773a4f66de4483a284\tracker-27 .1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\aapt2-proto\4.1.2-6503028\9af46dd51d7e3d70e8f4fce6a9cafe4e46e25650\aapt2-proto -4.1.2-6503028.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\aaptcompiler\4.1.2\7e2e62b769b1abd9bebd1403a790a85b6bb44dd5\aaptcompiler-4.1.2 .jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\apksig\4.1.2\1b9b7535ff23063cf517ec51d3793b6bf2bc3df0\apksig-4.1.2.jar - 另一 个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\apkzlib\4.1.2\892617d74f42de313ad8912f16e610ed06decad6\apkzlib-4.1.2.jar - 另 一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\builder\4.1.2\a3d11213e0843d39de9b79f3a31f51c079fd3ffe\builder-4.1.2.jar - 另 一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\builder-model\4.1.2\230168d0621c0207c486e932ccaf773b46f1374e\builder-model-4.1 .2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\builder-test-api\4.1.2\88541c05768d98c4661d84829da7417be1eaee14\builder-test-a pi-4.1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\bundletool\0.14.0\e7ecfb48a6d43f4ec23475c9d04b96c97ecc101b\bundletool-0.14.0.j ar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\gradle\4.1.2\d56e2eaa0cd496e8e0a2fc833be09fe7b9f1e0e6\gradle-4.1.2.jar - 另一 个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\gradle-api\4.1.2\f67ab4948f013866e7f494c2d92711b902da47d3\gradle-api-4.1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\manifest-merger\27.1.2\be1200a2283b876d081689fed1cbebcaf1970f0f\manifest-merge r-27.1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build\transform-api\2.0.0-deprecated-use-gradle-api\47f6c56527c42425742fa9b56ffd3fd8 0763fe03\transform-api-2.0.0-deprecated-use-gradle-api.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build.jetifier\jetifier-core\1.0.0-beta09\c98ee0e5579aed97e17f605a89b101115a2f5a61\j etifier-core-1.0.0-beta09.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.build.jetifier\jetifier-processor\1.0.0-beta09\fb2a015ff56e24939a88593ac73b84e627864 476\jetifier-processor-1.0.0-beta09.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.ddms\ddmlib\27.1.2\29aaa89feccafc6012c8b7f91548ec6866a55e52\ddmlib-27.1.2.jar - 另一 个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.layoutlib\layoutlib-api\27.1.2\c15c507501f3cd4f7ea079c102746f7f62dac039\layoutlib-ap i-27.1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.lint\lint-gradle-api\27.1.2\f6beef41aa320d2f74b80cf224155db10fe3b545\lint-gradle-api -27.1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.android.tools.lint\lint-model\27.1.2\46f49b331bd25833c0d005089bfc7e2eeb5b85cc\lint-model-27.1.2.ja r - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.auto.value\auto-value-annotations\1.6.2\ed193d86e0af90cc2342aedbe73c5d86b03fa09b\auto-value -annotations-1.6.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.code.findbugs\jsr305\3.0.2\25ea2e8b0c338a877313bd4672d3fe056ea78f0d\jsr305-3.0.2.jar - 另一 个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.code.gson\gson\2.8.5\f645ed69d595b24d4cf8b3fbb64cc505bede8829\gson-2.8.5.jar - 另一个程序正 在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.crypto.tink\tink\1.3.0-rc2\c7efb1ecc3b667b8a0789a1b019b06269037e19b\tink-1.3.0-rc2.jar - 另 一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.errorprone\error_prone_annotations\2.3.2\d1a0c5032570e0f64be6b4d9c90cdeb103129029\error_pro ne_annotations-2.3.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.flatbuffers\flatbuffers-java\1.12.0\8201cc7b511177a37071249e891f2f2fea4b32e9\flatbuffers-ja va-1.12.0.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.guava\failureaccess\1.0.1\1dcf1de382a0bf95a3d8b0849546c88bac1292c9\failureaccess-1.0.1.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.guava\guava\28.1-jre\b0e91dcb6a44ffb6221b5027e12a5cb34b841145\guava-28.1-jre.jar - 另一个程 序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\b421526c5f297295adef1c886e 5246c39d4ac629\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.j2objc\j2objc-annotations\1.3\ba035118bc8bac37d7eff77700720999acd9986d\j2objc-annotations-1 .3.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.jimfs\jimfs\1.1\8fbd0579dc68aba6186935cc1bee21d2f3e7ec1c\jimfs-1.1.jar - 另一个程序正在使用 此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.protobuf\protobuf-java\3.10.0\410b61dd0088aab4caa05739558d43df248958c9\protobuf-java-3.10.0 .jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.protobuf\protobuf-java-util\3.10.0\a68c906db83e93babbb4024ce91e7441bb7598dd\protobuf-java-u til-3.10.0.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.test.platform\core-proto\0.0.2-dev\56452fc5ddd0dc8e0e2f56b86910d97373a4b75c\core-proto-0.0. 2-dev.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.googlecode.json-simple\json-simple\1.1\5e303a03d04e6788dddfa3655272580ae0fc13bb\json-simple-1.1.ja r - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.googlecode.juniversalchardet\juniversalchardet\1.0.3\cd49678784c46aa8789c060538e0154013bb421b\juni versalchardet-1.0.3.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.squareup\javapoet\1.10.0\712c178d35185d8261295913c9f2a7d6867a6007\javapoet-1.10.0.jar - 另一个程序 正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.squareup\javawriter\2.5.0\81241ff7078ef14f42ea2a8995fa09c096256e6b\javawriter-2.5.0.jar - 另一个程 序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.sun.activation\javax.activation\1.2.0\bf744c1e2776ed1de3c55c8dac1057ec331ef744\javax.activation-1. 2.0.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.sun.istack\istack-commons-runtime\3.0.7\c197c86ceec7318b1284bffb49b54226ca774003\istack-commons-ru ntime-3.0.7.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.sun.xml.fastinfoset\FastInfoset\1.2.15\bb7b7ec0379982b97c62cd17465cb6d9155f68e8\FastInfoset-1.2.15 .jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\commons-codec\commons-codec\1.10\4b95f4897fa13f2cd904aee711aeafc0c5295cd8\commons-codec-1.10.jar - 另 一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\commons-io\commons-io\2.4\b1b6ea3b7e4aa4f492509a4952029cd8e48019ad\commons-io-2.4.jar - 另一个程序正在 使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\commons-logging\commons-logging\1.2\4bfc12adfe4842bf07b657f0369c4cb522955686\commons-logging-1.2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\it.unimi.dsi\fastutil\7.2.0\5ad3a2bb04143f70aa0765fc29fc29571a7d6b34\fastutil-7.2.0.jar - 另一个程序正 在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\javax.activation\javax.activation-api\1.2.0\85262acf3ca9816f9537ca47d5adeabaead7cb16\javax.activation- api-1.2.0.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\javax.inject\javax.inject\1\6975da39a7040257bd51d21a231b76c915872d38\javax.inject-1.jar - 另一个程序正 在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\javax.xml.bind\jaxb-api\2.3.1\8531ad5ac454cc2deb9d4d32c40c4d7451939b5d\jaxb-api-2.3.1.jar - 另一个程序 正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\net.sf.jopt-simple\jopt-simple\4.9\ee9e9eaa0a35360dcfeac129ff4923215fd65904\jopt-simple-4.9.jar - 另一 个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\net.sf.kxml\kxml2\2.3.0\ccbc77a5fd907ef863c29f3596c6f54ffa4e9442\kxml2-2.3.0.jar - 另一个程序正在使用 此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\net.sf.proguard\proguard-base\6.0.3\7135739d2d3834964c543ed21e2936ce34747aca\proguard-base-6.0.3.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\net.sf.proguard\proguard-gradle\6.0.3\e5becf2356695a396b788110e386c38bad523bfc\proguard-gradle-6.0.3.j ar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.antlr\antlr4\4.5.3\f35db7e4b2446e4174ba6a73db7bd6b3e6bb5da1\antlr4-4.5.3.jar - 另一个程序正在使用 此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.apache.commons\commons-compress\1.12\84caa68576e345eb5e7ae61a0e5a9229eb100d7b\commons-compress-1.1 2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.apache.httpcomponents\httpclient\4.5.6\1afe5621985efe90a92d0fbc9be86271efbe796f\httpclient-4.5.6.j ar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.apache.httpcomponents\httpcore\4.4.10\acc54d9b28bdffe4bbde89ed2e4a1e86b5285e2b\httpcore-4.4.10.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.apache.httpcomponents\httpmime\4.5.6\164343da11db817e81e24e0d9869527e069850c9\httpmime-4.5.6.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.bouncycastle\bcpkix-jdk15on\1.56\4648af70268b6fdb24674fb1fd7c1fcc73db1231\bcpkix-jdk15on-1.56.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.bouncycastle\bcprov-jdk15on\1.56\a153c6f9744a3e9dd6feab5e210e1c9861362ec7\bcprov-jdk15on-1.56.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.checkerframework\checker-qual\2.8.1\eb2e8ab75598548cc8acf9a1ca227e480e01881e\checker-qual-2.8.1.ja r - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.codehaus.mojo\animal-sniffer-annotations\1.18\f7aa683ea79dc6681ee9fb95756c999acbb62f5d\animal-snif fer-annotations-1.18.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\jaxb-runtime\2.3.1\dd6dda9da676a54c5b36ca2806ff95ee017d8738\jaxb-runtime-2.3.1.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\txw2\2.3.1\a09d2c48d3285f206fafbffe0e50619284e92126\txw2-2.3.1.jar - 另一个程序正在 使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.jdom\jdom2\2.0.6\6f14738ec2e9dd0011e343717fa624a10f8aab64\jdom2-2.0.6.jar - 另一个程序正在使用此文 件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.jetbrains\annotations\13.0\919f0dfe192fb4e063e7dacadee7f8bb9a2672a9\annotations-13.0.jar - 另一个 程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-reflect\1.3.72\86613e1a669a701b0c660bfd2af4f82a7ae11fca\kotlin-reflect-1.3 .72.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib\1.3.72\8032138f12c0180bc4e51fe139d4c52b46db6109\kotlin-stdlib-1.3.7 2.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib-common\1.3.72\6ca8bee3d88957eaaaef077c41c908c9940492d8\kotlin-stdli b-common-1.3.72.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib-jdk7\1.3.72\3adfc2f4ea4243e01204be8081fe63bde6b12815\kotlin-stdlib- jdk7-1.3.72.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib-jdk8\1.3.72\916d54b9eb6442b615e6f1488978f551c0674720\kotlin-stdlib- jdk8-1.3.72.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.jetbrains.trove4j\trove4j\20160824\33c3e174a9c8368d93761d3d12712db18e903959\trove4j-20160824.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.json\json\20180813\8566b2b0391d9d4479ea225645c6ed47ef17fe41\json-20180813.jar - 另一个程序正在使用 此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.jvnet.staxex\stax-ex\1.8\8cc35f73da321c29973191f2cf143d29d26a1df7\stax-ex-1.8.jar - 另一个程序正在 使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.ow2.asm\asm\7.0\d74d4ba0dee443f68fb2dcb7fcdb945a2cd89912\asm-7.0.jar - 另一个程序正在使用此文件, 进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.ow2.asm\asm-analysis\7.0\4b310d20d6f1c6b7197a75f1b5d69f169bc8ac1f\asm-analysis-7.0.jar - 另一个程 序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.ow2.asm\asm-commons\7.0\478006d07b7c561ae3a92ddc1829bca81ae0cdd1\asm-commons-7.0.jar - 另一个程序 正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.ow2.asm\asm-tree\7.0\29bc62dcb85573af6e62e5b2d735ef65966c4180\asm-tree-7.0.jar - 另一个程序正在使 用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.ow2.asm\asm-util\7.0\18d4d07010c24405129a6dbb0e92057f8779fb9d\asm-util-7.0.jar - 另一个程序正在使 用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\org.tensorflow\tensorflow-lite-metadata\0.1.0-rc1\f6e561e9053f2e9a2779d2ce1dffd45ce4dc3c74\tensorflow- lite-metadata-0.1.0-rc1.jar - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\metadata-2.96\module-artifact.bin - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\metadata-2.96\module-metadata.bin - 另一个程序正在使用此文件,进程无法访问。 C:\Users\Administrator\.gradle\caches\modules-2\modules-2.lock - 另一个程序正在使用此文件,进程无法访问。 D:\AndroidStudioProjects\MyApplication> D:\AndroidStudioProjects\MyApplication># 清理项目本地缓存 '#' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 D:\AndroidStudioProjects\MyApplication>cd /d D:\AndroidStudioProjects\MyApplication D:\AndroidStudioProjects\MyApplication>rd /s /q build .gradle 系统找不到指定的文件。 系统找不到指定的文件。 D:\AndroidStudioProjects\MyApplication>echo %ANDROID_SDK_ROOT% %ANDROID_SDK_ROOT% D:\AndroidStudioProjects\MyApplication> D:\AndroidStudioProjects\MyApplication># 若未设置,手动指定路径(示例) '#' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 D:\AndroidStudioProjects\MyApplication>set ANDROID_SDK_ROOT=C:\Users\YourName\AppData\Local\Android\Sdk D:\AndroidStudioProjects\MyApplication>
最新发布
05-15
<think>好的,我现在需要解决用户提到的Android项目构建中的三个问题:dx.bat路径错误、Gradle缓存被占用以及清理失败的问题。首先,我应该回顾之前的对话,确保这次回答与之前的建议一致,并且结合用户提供的引用内容来优化回答。 用户提到dx.bat路径错误,这可能是因为Android SDK的构建工具未正确安装或路径配置错误。在之前的回答中,我建议检查Build Tools的安装情况,并手动下载缺失的文件。现在需要再次确认这些步骤是否适用,并结合引用中的内容。例如,用户提供的引用[1]提到使用gradlew clean assembleArmDebug来执行多个任务,这可能在清理和构建时相关。可能需要指导用户正确使用gradlew.bat命令,尤其是在Windows环境下。 接下来是Gradle缓存被占用的问题。用户之前可能尝试过清理缓存,但由于文件被占用而失败。在之前的回答中,我建议使用rd命令手动删除缓存目录,或者关闭占用进程。需要再次强调这些步骤,并确保用户了解如何在Windows中处理文件占用问题,比如使用资源监视器查找并结束相关进程。 清理失败的问题可能与权限不足或路径错误有关。用户提到的引用[2]中涉及Android.mk文件的配置,虽然与Gradle清理无直接关系,但可能暗示项目中有NDK模块,需要检查NDK配置是否影响构建路径。此外,用户提供的引用[1]提到Gradle生命周期的清理任务,可能需要结合gradle的生命周期命令来确保正确执行清理步骤。 另外,用户现在的问题可能涉及到多个因素,需要系统性地排查。例如,dx.bat路径错误可能与SDK路径的环境变量设置有关,需要用户检查ANDROID_SDK_ROOT是否正确指向安装目录。同时,Gradle缓存被占用可能需要关闭Android Studio或其他正在使用缓存文件的程序。 还需要考虑Gradle版本与构建工具的兼容性问题。用户可能在项目中使用了较新的Gradle版本,但Build Tools版本过旧或缺失,导致dx.bat无法找到。建议用户检查build.gradle中的buildToolsVersion是否与已安装的版本一致,必要时更新Gradle Wrapper。 此外,用户可能在执行清理任务时遇到权限问题,尤其是在Windows系统中,可能需要以管理员身份运行命令提示符,或者调整项目目录的权限设置。 总结来说,解决这些问题的步骤应包括: 1. 确认并修复dx.bat的路径问题,检查Build Tools安装和环境变量。 2. 处理Gradle缓存被占用,使用命令行工具或手动删除,关闭占用进程。 3. 确保清理命令正确执行,处理权限和路径问题,使用合适的Gradle命令。 在回答时,需要结构清晰,分步骤说明,并参考之前的解决方案,确保用户能够逐步排查和解决问题。同时,结合用户提供的引用内容,强调正确的命令使用和路径配置的重要性,避免因语法错误或环境配置不当导致的问题。</think>--- ### 分步解决方案:修复`dx.bat`路径错误、缓存占用与清理失败 --- #### **1. 修复`dx.bat`路径错误** **原因分析** `dx.bat`是Android构建工具链的核心组件,路径错误通常由以下原因导致: - **未安装或版本不匹配**:项目配置的`buildToolsVersion`与本地安装的版本不一致[^1] - **SDK路径未正确配置**:环境变量`ANDROID_SDK_ROOT`指向错误路径 **操作步骤** 1. **检查Build Tools安装** - 打开Android Studio → **Tools → SDK Manager → SDK Tools** - 确认勾选 **Android SDK Build-Tools** 并安装与项目配置一致的版本(如35.0.0) - 若需强制使用特定版本,手动下载[Build Tools](https://dl.google.com/android/repository/build-tools_r35-windows.zip)并解压至: ``` %ANDROID_SDK_ROOT%\build-tools\35.0.0\ ``` 2. **修正环境变量** ```bash # 查看当前SDK路径(若输出为空需手动设置) echo %ANDROID_SDK_ROOT% # 临时设置环境变量(示例) set ANDROID_SDK_ROOT=C:\Users\YourName\AppData\Local\Android\Sdk ``` 3. **同步项目配置** 修改`app/build.gradle`确保版本一致: ```groovy android { buildToolsVersion "35.0.0" // 必须与本地安装的版本完全匹配 } ``` --- #### **2. 解决Gradle缓存被占用问题** **现象** 执行`gradlew clean`时提示文件被占用(如`Could not delete path...`)。 **解决方案** 1. **强制终止占用进程** - 打开Windows任务管理器 → **详细信息** - 结束所有`Java(TM) Platform SE binary`或`Gradle Daemon`进程 2. **手动清理缓存(绕过文件锁)** ```bash # 清理全局Gradle缓存 rd /s /q "%USERPROFILE%\.gradle\caches" # 清理项目本地缓存 cd /d D:\AndroidStudioProjects\MyApplication rd /s /q build .gradle ``` 3. **关闭IDE后执行** - 退出Android Studio/IntelliJ IDEA后再运行清理命令 --- #### **3. 修复Gradle清理失败问题** **典型错误场景** ```bash # 错误示例:Unix语法在Windows失效 ./gradlew clean # 失败 rm -rf build # 失败 ``` **修正方法** 1. **使用Windows兼容命令** ```bash # 正确清理命令 gradlew.bat clean # 强制删除项目构建目录 rd /s /q build ``` 2. **添加管理员权限** - 右键命令提示符 → **以管理员身份运行** - 重新执行清理命令 3. **多任务组合执行(参考引用[1])** ```bash # 组合执行清理与构建(避免中间状态残留) gradlew.bat clean assembleDebug --stacktrace ``` --- ### **4. 深度排查:NDK与Gradle协作问题(引用[2]扩展)** 若项目包含NDK模块,需检查`Android.mk`配置是否与Gradle路径冲突: 1. **验证NDK路径配置** ```bash # 检查local.properties中NDK路径 ndk.dir=C\:\\Users\\YourName\\AppData\\Local\\Android\\Sdk\\ndk\\25.1.8937393 ``` 2. **清理NDK中间文件** ```bash # 删除obj和libs目录 rd /s /q app\src\main\obj app\src\main\libs ``` --- ### **关键操作验证表** | 问题类型 | 验证方法 | 成功标志 | |------------------------|-----------------------------------|----------------------------| | `dx.bat`路径错误 | 检查`build-tools\35.0.0\dx.bat`存在性 | 文件存在且未被占用 | | Gradle缓存被占用 | 重新运行`gradlew.bat build` | 无`file lock`错误 | | 清理失败 | 观察`build`目录是否被删除 | 目录消失且可手动重建 | --- ### **相关问题** 1. 如何解决`Unresolved reference: dx`编译错误? 2. Android Studio提示`Build Tools corrupted`应如何处理? 3. 如何配置Gradle守护进程以加速构建? 4. NDK编译时出现`No rule to make target 'hello.c'`如何排查? --- ### 引用说明 [^1]: Build Tools版本与项目配置严格绑定,需通过SDK Manager统一管理。 [^2]: NDK构建路径冲突可能导致Gradle清理残留,需同步清理`obj`目录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码哥说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值