1. ホーム
  2. アンドロイド

Android Studio 3.1.2 新規プロジェクトのエラー AAPT2エラー:詳細はログを確認してください(Gradle 3.1.2)

2022-02-08 03:29:04

元々良いプロジェクトだったのですが、ある日突然開いてAAPT2 error: check logsfor detailsというエラーを報告するようになりました。

エラーの詳細を展開する

エラーテキスト

ResourceException: Error: java.util.concurrent.ExecutionException:com.android.builder.internal.aapt. v2.Aapt2Exception: AAPT2 error: check logsfor details

エラー全文

ResourceException: Error: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt. v2.Aapt2Exception: AAPT2 error: check logs for details
	at com.android.build.gradle.tasks.MergeResources.doFullTaskAction(MergeResources.java:296)
	at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction(IncrementalTask.java:106)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
	at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:46)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121)
	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:199)
	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
	at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
	at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)
	at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java :54)
	at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java :60)
	at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97)
	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87)
	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:199)
	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
	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:123)
	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79)
	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104)
	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:626)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581)
	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
	at java.util.c

コードの問題点に関するトラブルシューティング

しばらく調べても問題が見つからなかったので、同じコードとIDE(どちらもAndroid Studio 3.1.2、Ubuntuだけ)で別のパソコンに切り替えたら問題なく動いたので、問題はコードにはないはずなので、新しいプロジェクトを作成して試してみようと思いました。そこで、何の設定も変えずに直接新規プロジェクトを作成し、アクティビティすらない状態で

案の定、作成したばかりのプロジェクトは、Build時に同じエラーを出しました。

ドキュメントを確認すると、一部のユーザーは "問題がある場合は、以前のバージョンに戻り、gradle.properties を開いて以下を追加してください" と述べています。

android.enableAapt2=false

しかし、コードを追加することは可能なので、試したのですが、やはりエラーレポートが表示されました。

エラーメッセージが表示されます。

The option 'android.enableAapt2' isdeprecated and should not be used anymore.
Use 'android.enableAapt2=true' to removethis warning.
It will be removed at the end of 2018.

直訳すると、このような意味です。

オプション "android.enableAapt2" は非推奨であり、今後使用するべきではありません。
andquot;android.enableAapt2=true" を使用します。 をクリックすると、この警告が表示されなくなります。
で削除されます。 2018 年末に撤去。

明らかに"を使用しています。 android.enableAapt2=false AAPT2をオフにするには、"を使用します。この方法は時代遅れで、オフにした後、Android Studioはオンにするように指示するので、デッドエンドのループに陥っています。

だから、素直に"を削除すればいいのです。 android.enableAapt2=false "の方法を探し続けることです。

エラーメッセージを表示する

いろいろ調べていたら、Android studioで詳細なエラーメッセージを表示する方法を知りました。

コマンドラインからプロジェクトのルートに移動するか、Android studioのTerminalから直接コマンドを打ち込みます。

gradlew compileDebug --stacktrace

さらに詳細な情報を出力し、コマンドラインで与えられたプロンプトに応じて --info または --debug オプションを追加すると、より詳細な情報を得ることができるので、コマンドは以下のように記述することができます。

gradlew compileDebug --stacktrace -info

または

gradlew compileDebug --stacktrace -debug

まず、最初の行のコードを試してみてください

Android Studioに付属のTerminalに入力します。

gradlew compileDebug --stacktrace

<イグ

キャリッジリターンはあまりヒントになりませんが、サジェストの 1 つに "Task 'compileDebug' is ambiguous in root project" (訳注:ルートプロジェクトではコマンド "'compileDebug " はあいまい)があり、前のエラーレポートを振り返ると、最初の行でリソース例外 "ResourceException" に言及しています。

そこで、コマンドを次のように変更してみました。

gradlew compileDebugSources --stacktrace -info 

表示された情報をもう一度見てみると、何か発見があったようです。

エラーメッセージ

> Task :app:mergeDebugResources FAILED
Exception while processing job : QueuedJob{
title=Compiling abc_ic_menu_copy_mtrl_am_alpha.png,
task={from=C:\Users\郑维一\.gradle\caches\transforms-1\files-1.1\appcompat-v7-26.1.0.aar\a55ab1e075dbd5b5da002f93c40b9cfb\res\ drawable-xhdpi-v4\abc_ic_menu_copy_mtrl_am_alpha.png, to=F:\Projects\AndroidStudioProjects\JinchengNewsAndroid\app\build\ intermediates\res\merged\debug},
future=com.google.common.util.concurrent.SettableFuture@4d8f81a6} : com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details
Exception while processing job : QueuedJob{
title=Compiling abc_btn_radio_to_on_mtrl_000.png,
task={from=C:\Users\Zheng Wei Yi\.gradle\caches\transforms-1\files-1.1\appcompat-v7-26.1.0.aar\a55ab1e075dbd5b5da002f93c40b9cfb\res\ drawable-hdpi-v4\abc_btn_radio_to_on_mtrl_000.png, to=F:\Projects\AndroidStudioProjects\JinchengNewsAndroid\app\build\intermediates \res\merged\debug},
future=com.google.common.util.concurrent.SettableFuture@6d94b091} : com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details
Exception while processing job : QueuedJob{
title=Compiling notify_panel_notification_icon_bg.png,
task={from=C:\Users\ZhengWeiYi\.gradle\caches\transforms-1\files-1.1\support-compat-26.1.0.aar\2efeba8952eb2c0e463a57b63c49f99f\res\ drawable-xhdpi-v4\notify_panel_notification_icon_bg.png, to=F:\Projects\AndroidStudioProjects\JinchengNewsAndroid\app\build\ intermediates\res\merged\debug},
future=com.google.common.util.concurrent.SettableFuture@19e643ef} : com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details
Shutdown finished in 244ms
Error: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details

:app:mergeDebugResources (Thread[Task worker for ':' Thread 3,5,main]) completed. took 5.716 secs.


中国語発見!

何かおかしいぞ!」と敏感に反応。(くだらない、実はお兄ちゃんに相談した)

問題の根源

"この現在の非アスキーIIは確かにAAPT2とGradleプラグインのバグだと誰かが言っていたが、今は修正されている、ただAndroid Studioがこの修正バージョンにアップデートされていないだけだ"(大御所が言ったこと、ソースはまだ確認してない)。

ソリューション

ということで、今、2つの解決策があります。

一つは、gradleのキャッシュディレクトリを修正すること

これは、android studioの設定からgradleを見つけて、中国語ではない別のディレクトリをキャッシュするように設定することで実現できます。

File -> Settings -> Build, Execution,Deployment -> Gradle

このページに移動して、"Service directory path"の項目を見つけて、中のパスを中国語以外のパスに変更します。

ビルドがうまくいきました!

2つ目は、あなたのプロジェクトが新しいgradleプラグインを使用するように指定することです。

build.gradle(Project) の Gradle のバージョンを 3.2.0-alpha11 以降に変更するだけです。

    repositories {
        google()
        ...
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0-alpha11'
    }
}

最後に、開発プログラムには中国語のディレクトリを使用しないよう注意してください。