当前位置: 首页 > 知识库问答 >
问题:

使用Android Gradle插件3.3.0合并资源时生成失败

傅博容
2023-03-14

我有很多不同的口味为我的构建,有特定的资源,我不希望我的src目录在我的项目与一堆特定口味的目录混乱,所以我添加源集从另一个文件夹在我的项目之前的合并资源任务(合并esources.doFirst)。这一直适用于Android Gradle插件的过去几个版本(3.1.0-3.2.0和一些3.3.0-alpha版本),但是在某个时候,3.3.0-alpha AGP开始在这个合并资源任务中导致构建失败。

现在我不断得到:

BUILD在35s 16个可操作的任务中失败:执行15个,线程“ForkJoinPool.common池工人-6”中有1个最新的异常java.lang.IllegalStateExcture:在com.android.builder.internal.aapt.v2使用守护进程时,AAPT进程管理器无法关闭...Aapt2DaemonManager.shutdown(Aapt2DaemonManager.kt:96)在com.android.build.gradle.internal.res.namespaced.注册AaptService.shutdown(Aapt2DaemonManagerService.kt:61)在com.android.build.gradle.internal.workeractions.WorkerActionService注册$关闭所有注册服务1美元1.run(WorkerActionServiceRegistry.kt:96)在<-ction.exec(ForkJoinTask.java:1402)java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)java.util.concurrent.ForkJoinpool$WorkQueue.run任务(ForkJoinPool.java:1056)在java. util.同时。ForkJoinPool. runWorker(ForkJoinPool. java: 1692)在java. util. con电流。ForkJoinWorkerThread. run(ForkJoinWorkerThread. java: 157)

我的目标是:

任务“:app:mergeMainReleaseResources”的执行失败。JAVAutil。同时发生的ExecutionException:com.Android建设者内部的啊。v2。AAPT2内部异常:AAPT2 AAPT2-3.3.0-alpha13-5013011-windows守护程序#0:编译“C:\Users\Alex\Documents\Work\Android\project\app\productio n\u resources\categories\fitness\res\drawable xxxhdpi\background\u 4”时出现意外错误。正在尝试停止守护进程。这在正常情况下不应发生,如果发生,请提交问题。

例外情况是:组织。格拉德尔。应用程序编程接口。任务。TaskExecutionException:任务的执行失败:应用程序:mergeMainReleaseResources。在org。格拉德尔。应用程序编程接口。内部的任务。处决ExecuteActionsTaskExecuter。org上的executeActions(ExecuteActionsTaskExecuter.java:110)。格拉德尔。应用程序编程接口。内部的任务。处决ExecuteActionsTaskExecuter。在org上执行(ExecuteActionsTaskExecuter.java:77)。格拉德尔。应用程序编程接口。内部的任务。处决OutputDirectoryCreatingTaskExecuter。在org上执行(OutputDirectoryCreatingTaskExecuter.java:51)。格拉德尔。应用程序编程接口。内部的任务。处决SkipUpToDateTaskExecuter。在org上执行(skipptodatetaskexecuter.java:59)。格拉德尔。应用程序编程接口。内部的任务。处决ResolveTaskOutputCachingStateExecuter。在org上执行(ResolveTaskOutputCachingStateExecuter.java:54)。格拉德尔。应用程序编程接口。内部的任务。处决验证任务执行器。在org上执行(ValidatingTaskExecuter.java:59)。格拉德尔。应用程序编程接口。内部的任务。处决Skippemptysourcefilestaskeecuter。在org上执行(SkipEmptySourceFilesTaskExecuter.java:101)。格拉德尔。应用程序编程接口。内部的任务。处决完成InputFilePropertiesTaskExecuter。在org上执行(FinalizeInputFilePropertiesTaskExecuter.java:44)。格拉德尔。应用程序编程接口。内部的任务。处决清洁塔出口安全阀。在org上执行(cleanupstaleoutputsecuter.java:91)。格拉德尔。应用程序编程接口。内部的任务。处决ResolveTaskArtifactStateTaskExecuter。在org上执行(ResolveTaskArtifactStateTaskExecuter.java:62)。格拉德尔。应用程序编程接口。内部的任务。处决无动作安全钳的SkipTask。在org上执行(SkipTaskWithNoActionsExecuter.java:59)。格拉德尔。应用程序编程接口。内部的任务。处决熟练地执行任务。在org上执行(SkipOnlyIfTaskExecuter.java:54)。格拉德尔。应用程序编程接口。内部的任务。处决执行者,执行者。在org上执行(ExecuteAtMostOnceTaskExecuter.java:43)。格拉德尔。应用程序编程接口。内部的任务。处决CatchExceptionTaskExecuter。在org上执行(CatchExceptionTaskExecuter.java:34)。格拉德尔。应用程序编程接口。内部的任务。处决EventFiringTaskExecuter$1。在org上运行(EventFiringTaskExecuter.java:51)。格拉德尔。内部的操作。DefaultBuildOperationExecutor$RunnableBuildOperationWorker。在组织上执行(DefaultBuildOperationExecutor.java:300)。格拉德尔。内部的操作。DefaultBuildOperationExecutor$RunnableBuildOperationWorker。在org上执行(DefaultBuildOperationExecutor.java:292)。格拉德尔。内部的操作。DefaultBuildOperationExecutor。在org上执行(DefaultBuildOperationExecutor.java:174)。格拉德尔。内部的操作。DefaultBuildOperationExecutor。在org上运行(DefaultBuildOperationExecutor.java:90)。格拉德尔。内部的操作。删除构建操作执行器。在组织上运行(DelegatingBuildOperationExecutor.java:31)。格拉德尔。应用程序编程接口。内部的任务。处决EventFiringTaskExecuter。在org上执行(EventFiringTaskExecuter.java:46)。格拉德尔。处决任务图。LocalTaskInfoExecutor。在org上执行(LocalTaskInfoExecutor.java:42)。格拉德尔。处决任务图。DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor。在org上执行(DefaultTaskExecutionGraph.java:277)。格拉德尔。处决任务图。DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor。在组织上执行(DefaultTaskExecutionGraph.java:262)。格拉德尔。处决任务图。DefaultTaskPlanExecutor$ExecutorWorker$1。在组织上执行(DefaultTaskPlanExecutor.java:135)。格拉德尔。处决任务图。DefaultTaskPlanExecutor$ExecutorWorker$1。在org上执行(DefaultTaskPlanExecutor.java:130)。格拉德尔。处决任务图。DefaultTaskPlanExecutor$ExecutorWorker。在组织上执行(DefaultTaskPlanExecutor.java:200)。格拉德尔。处决任务图。DefaultTaskPlanExecutor$ExecutorWorker。在org上执行工作(DefaultTaskPlanExecutor.java:191)。格拉德尔。处决任务图。DefaultTaskPlanExecutor$ExecutorWorker。在org上运行(DefaultTaskPlanExecutor.java:130)。格拉德尔。内部的同时发生的ExecutorPolicy$CatchAndRecordFailures。onExecute(ExecutorPolicy.java:63)位于org。格拉德尔。内部的同时发生的ManagedExecutorImpl$1。在org上运行(ManagedExecutorImpl.java:46)。格拉德尔。内部的同时发生的ThreadFactoryImpl$ManagedThreadRunnable。运行(ThreadFactoryImpl.java:55)

原因:org。格拉德尔。内部的取消选中dexception:java。util。同时发生的ExecutionException:com.Android建设者内部的啊。v2。AAPT2内部异常:AAPT2 AAPT2-3.3.0-alpha13-5013011-windows守护程序#0:编译“C:\Users\Alex\Documents\Work\Android\project\app\production\U resources\categories\fitness\res\drawable xxxhdpi\background\U 4”时出现意外错误。正在尝试停止守护进程。这在正常情况下不应发生,如果发生,请提交问题。在org。格拉德尔。内部的不勾选的感觉。通过org上的UncheckedException(UncheckedException.java:63)。格拉德尔。内部的不勾选的感觉。通过org上的UncheckedException(UncheckedException.java:40)。格拉德尔。内部的反映JavaMethod。在org上调用(JavaMethod.java:76)。格拉德尔。应用程序编程接口。内部的项目taskfactory。递增AltaskAction。doExecute(IncrementalTaskAction.java:50)位于org。格拉德尔。应用程序编程接口。内部的项目taskfactory。标准任务行动。在org上执行(StandardTaskAction.java:39)。格拉德尔。应用程序编程接口。内部的项目taskfactory。标准任务行动。在org上执行(StandardTaskAction.java:26)。格拉德尔。应用程序编程接口。内部的任务。处决ExecuteActionsTaskExecuter$1。在org上运行(ExecuteActionsTaskExecuter.java:131)。格拉德尔。内部的操作。DefaultBuildOperationExecutor$RunnableBuildOperationWorker。在组织上执行(DefaultBuildOperationExecutor.java:300)。格拉德尔。内部的操作。DefaultBuildOperationExecutor$RunnableBuildOperationWorker。在org上执行(DefaultBuildOperationExecutor.java:292)。格拉德尔。内部的操作。DefaultBuildOperationExecutor。在org上执行(DefaultBuildOperationExecutor.java:174)。格拉德尔。内部的操作。DefaultBuildOperationExecutor。在org上运行(DefaultBuildOperationExecutor.java:90)。格拉德尔。内部的操作。删除构建操作执行器。在组织上运行(DelegatingBuildOperationExecutor.java:31)。格拉德尔。应用程序编程接口。内部的任务。处决ExecuteActionsTaskExecuter。org上的executeAction(ExecuteActionsTaskExecuter.java:120)。格拉德尔。应用程序编程接口。内部的任务。处决ExecuteActionsTaskExecuter。executeActions(ExecuteActionsTaskExecuter.java:99)。。。还有31个原因是:java。util。同时发生的ExecutionException:com.Android建设者内部的啊。v2。AAPT2内部异常:AAPT2 AAPT2-3.3.0-alpha13-5013011-windows守护程序#0:编译“C:\Users\Alex\Documents\Work\Android\project\app\production\U resources\categories\fitness\res\drawable xxxhdpi\background\U 4”时出现意外错误。正在尝试停止守护进程。这在正常情况下不应发生,如果发生,请提交问题。在com.Android石斑鱼类。常见的工人。执行器服务适配器。在com上关闭(ExecutorServiceAdapter.kt:56)。Android建筑格拉德尔。内部的啊。WorkerExecutor资源编译服务。在com上关闭(WorkerExecutorResourceCompilationService.kt:67)。Android建筑格拉德尔。任务。合并资源。com上的doFullTaskAction(MergeResources.java:268)。Android建筑格拉德尔。内部的任务。增量任务。组织上的taskAction(IncrementalTask.java:106)。格拉德尔。内部的反映JavaMethod。调用(JavaMethod.java:73)。。。42多

引起:com.android.builder.internal.aapt.v2.Aapt2InternalExc0019: AAPT2 aapt2-3.3.0-alpha13-5013011-windows守护进程#0:编译过程中出现意外错误'C:\用户\Alex\Documents\Work\Android\project\app\production_resources\类别\健身\res\Draable-xxxhdpi\background_4.png',试图停止守护进程。这在正常情况下不应该发生,如果发生,请提交问题。在com.android.builder.internal.aapt.v2。com.android.builder.internal.aapt.v2的Aapt2Daemon.handle错误(Aapt2Daemon.kt:148)。com.android.builder.internal.aapt.v2的Aapt2Daemon.compile(Aapt2Daemon.kt:88)。Aapt2DaemonManager$LeasedAaptDaemon.compile(Aapt2DaemonManager.kt:170)在com.android.build.gradle.internal.res.Aapt2CompileAnd BlameRunnable$run$1.invoke(Aapt2CompileAnd BlameRunnable.kt:37)在com.android.build.gradle.internal.res.Aapt2CompileAnd BlameRunnable$run$1.invoke(Aapt2CompileAnd BlameRunnable.kt:28)在com.android.build.gradle.internal.res.namespaced.Aapt2DaemonManagerService.useAaptDaemon(Aapt2DaemonManagerService.kt:71)在com. android. build. gradle. interal. res. name。Aapt2DaemonManagerService. useAaptDaemon$默认(Aapt2DaemonManagerService. kt: 69),网址为com. android. build. gradle. interal. res。在com. android. ide.通用. workers.上运行(Aapt2CompileBackBlameRunnable. kt: 34)。提交提交1美元. run(ExecutorServiceAdapter. kt: 39)

原因:java。木卫一。IOException:AAPT2进程意外退出。错误输出:在com.Android建设者内部的啊。v2。AAPT2DEAMONIMPL$WaitForTaskCompletion。com上的err(Aapt2DaemonImpl.kt:309)。Android建设者内部的啊。v2。Aapt2DaemonImpl$processOutput$1。com上的err(Aapt2DaemonImpl.kt:75)。Android乌提尔斯。获取输出$1。运行(GrabProcessOutput.java:104)

我认为PNG文件可能已损坏或标记不正确,但我已经对其进行了一系列转换,并得到了相同的错误。

在测试期间,它可以正常工作,但在发布构建期间,我会遇到此错误。在我的产品构建中,我使用了AS3.2和AGP3.2.0进行构建,效果很好。此外,这仅适用于Windows。它在我的Mac电脑上运行良好。

我的身材。格雷德尔是:

apply plugin: 'com.android.application'
apply plugin: 'io.fabric'

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion '28.0.3'
    defaultConfig {
        applicationId "com.project.test"
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 37
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }

    dexOptions {
        jumboMode true
        javaMaxHeapSize "4g"
        preDexLibraries = false
    }

    sourceSets {

        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')

        androidTest.setRoot('tests')
    }

    signingConfigs {

        key {
            storeFile file(RELEASE_STORE_FILE)
            storePassword RELEASE_STORE_PASSWORD
            keyAlias RELEASE_KEY_ALIAS
            keyPassword RELEASE_KEY_PASSWORD
        }

    }

    buildTypes {

        debug {
            minifyEnabled false
        }

        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            signingConfig signingConfigs.key
        }
    }

    flavorDimensions "default"

    productFlavors {

        main {
            versionName "0"
            buildConfigField "String", "CATEGORY", "\"fitness\""
            buildConfigField "String", "BUILD_VERSION", "\"$config.buildVersion\""
            dimension "default"
        }

        flavors.each { name, flavor ->
            "$name" {
                applicationId = config.applicationId + "." + "$name"
                versionName = config.versionName
                versionCode = flavor.versionCode
                buildConfigField "String", "CATEGORY", "\"${flavor.category}\""
                buildConfigField "String", "BUILD_VERSION", "\"$config.buildVersion\""
                buildConfigField "String", "APP_ID", "\"$name\""
                resValue "string", "APP_NAME", flavor.appName
                dimension "default"
            }
        }

    }

    packagingOptions {
        exclude 'META-INF/rxjava.properties'
    }

    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.1'
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    androidTestImplementation('com.android.support.test:runner:1.0.1', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    implementation 'com.google.code.findbugs:jsr305:3.0.2'
    implementation "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion"
    implementation "com.android.support:support-v4:$rootProject.supportLibraryVersion"
    implementation "com.android.support:design:$rootProject.supportLibraryVersion"
    implementation "com.android.support:cardview-v7:$rootProject.supportLibraryVersion"
    implementation "com.android.support:customtabs:$rootProject.supportLibraryVersion"
    implementation 'com.android.support:multidex:1.0.3'
    implementation 'com.android.billingclient:billing:1.1'
    implementation "com.squareup.retrofit2:retrofit:$rootProject.retrofitVersion"
    implementation "com.squareup.retrofit2:converter-gson:$rootProject.retrofitVersion"
    implementation "com.squareup.retrofit2:adapter-rxjava2:$rootProject.retrofitVersion"
    implementation 'com.squareup.okhttp3:okhttp:3.11.0'
    implementation 'com.google.code.gson:gson:2.8.5'
    implementation "com.facebook.fresco:fresco:$rootProject.frescoVersion"
    implementation "com.facebook.fresco:animated-gif:$rootProject.frescoVersion"
    implementation "com.google.android.gms:play-services-auth:$rootProject.playServicesVersion"
    implementation "com.google.android.gms:play-services-gcm:$rootProject.playServicesVersion"
    implementation "com.google.android.gms:play-services-base:$rootProject.playServicesVersion"
    implementation "com.google.android.gms:play-services-ads:$rootProject.playServicesVersion"
    implementation('com.crashlytics.sdk.android:crashlytics:2.9.4@aar') {
        transitive = true
    }
    implementation 'com.mixpanel.android:mixpanel-android:5.2.1'
    implementation "com.google.dagger:dagger:$rootProject.daggerVersion"
    implementation "com.google.dagger:dagger-android-support:$rootProject.daggerVersion"
    annotationProcessor "com.google.dagger:dagger-compiler:$rootProject.daggerVersion"
    implementation "com.jakewharton:butterknife:$rootProject.butterknifeVersion"
    annotationProcessor "com.jakewharton:butterknife-compiler:$rootProject.butterknifeVersion"
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.0'
    implementation 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'
    implementation "com.google.android.exoplayer:exoplayer-core:$rootProject.exoPlayerVersion"
    implementation "com.google.android.exoplayer:exoplayer-hls:$rootProject.exoPlayerVersion"
    implementation "com.google.android.exoplayer:exoplayer-ui:$rootProject.exoPlayerVersion"
    testImplementation 'junit:junit:4.12'
}

android.applicationVariants.all { variant ->
    def category
    variant.productFlavors.each { flavor ->
        flavor.buildConfigFields.each { key, value ->
            if (key == "CATEGORY") {
                category = value.value.substring(1, value.value.length() - 1)
            }
        }
    }
    variant.mergeResources.doFirst {
        android.sourceSets."${variant.productFlavors.get(0).name}".res.srcDirs =
                ["production_resources/flavors/${variant.productFlavors.get(0).name}/res",
                 "production_resources/categories/${category}/res"]
    }
}

afterEvaluate {
    tasks.matching {
        it.name.startsWith('dex')
    }.each { dx ->
        if (dx.additionalParameters == null) {
            dx.additionalParameters = []
        }
        dx.additionalParameters += '--multi-dex'
        dx.additionalParameters += "--main-dex-list=$projectDir/<filename>".toString()
    }
}

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

共有3个答案

别永年
2023-03-14

仔细检查布局xml文件,在我的例子中,问题是重复的xml

<?xml version="1.0" encoding="utf-8"?>
骆利
2023-03-14

我也有同样的问题。构建将中断并提及不同的png文件,如您的背景文件4。png,但仅在Windows PC上。在Mac上构建没有问题。

在我的例子中,图像大小是个问题。只有大于2MB的图像被缝合以破坏构建。在将每个图像压缩到小于2MB的大小后,构建再次开始工作。

后凯捷
2023-03-14

2019年4月19日更新

此问题已在Android Gradle Plugin 3.4.0中修复。

升级到Android Studio 3.4.0后,可以删除原始答案中建议的临时修复。万岁!

起初的

这是Android Gradle Plugin 3.3.0中AAPT2的一个错误,当构建一个包含较大png(大约2-3MB及以上)的项目时。

@akong9759在谷歌问题跟踪器上为此创建了一个问题,并已修复。

https://issuetracker.google.com/issues/117900475

这个问题已经在Android Gradle插件3.5.0-alpha03中修复,并计划在版本3.4.0中发布。

Android Gradle Plugin 3.3.0的临时修复已就此问题提出建议。将以下内容添加到项目build.gradle

allprojects {
    // Workaround for https://issuetracker.google.com/117900475
    // Remove when upgrading to AGP 3.4 or higher.
    configurations.matching { it.name == '_internal_aapt2_binary' }.all { config ->
        config.resolutionStrategy.eachDependency { details ->
            details.useVersion("3.5.0-alpha03-5252756")
        }
    }
}
 类似资料:
  • 以下 是对开发kibana 插件有用的资源 IRC channel kibana 官方为大家注册了一个类似聊天室的通道,在这里大家可以获取有用咨询和交流 Freenode Web Client. 文章 contributing guide kibana-plugin-notes(强烈推荐阅读) 视频 Contributors Guide to the Kibana Galaxy Kibana Pl

  • 我试图使用thymeleaf生成pdf,但问题是在生成pdf时,没有加载css和js等静态资源。如果我将html呈现为网页,则资源会完全加载,但每当我生成pdf时,都不会应用资源。有人知道有没有办法解决这个问题吗? 提前谢谢。

  • 资源合并(打包) 关于资源合并,在 fis3 中有多种方式来实现。为了搞清楚他们都有些什么特点,适用于什么场合,我觉得有必要聚集在一起一一说明下。 packTo 命中目标文件,设置 packTo 即能完成简单的合并操作。 fis.match('/static/folderA/**.js', { packTo: '/static/pkg/folderA.js' }); fis.match('/

  • 22.10.资源 Java 插件使用 Copy 任务处理资源. 它为项目每个 source set 都增加了一个实例. 可以参考Section 15.6, “Copying files” 获取关于copy任务的信息. 表22.12.java 插件- ProcessResources 的属性 任务属性 类型 默认值 srcDirs Object.可以在Section 15.5, “Specifyin

  • 你可以通过 sourceSets 属性来使用资源设置. 它其实是一个项目资源设置的容器, 它的类型是 SourceSetContainer. 同时也有 sourceSets { } 脚本模块, 在这个模块里, 你可以通过闭包配置资源设置容器. 资源设置容器的工作方式和其余容器几乎一模一样, 比如 tasks. 例 22.3. 进入资源设置 build.gradle // Various ways

  • 我想用外部资源(jpg、css)从html创建pdf。 这是用于生成pdf File对象的代码,带有Flie Saucer和itext: 不幸的是,所有与https链接的资源都被忽略,而超文本传输协议资源运行良好。 编辑: 我扩展了iTextureAgent以拦截https调用资源,但出现了以下错误: 太阳安全供应商。证书路径。SunCertPathBuilderException:无法找到请求目