运行Android项目时,有时候会看到报一大片的警告信息,如下:
bash
AGPBI: {"kind":"warning","text":"An error occurred when parsing kotlin metadata. This normally happens when using a newer version of kotlin than the kotlin version released when this version of R8 was created. To find compatible kotlin versions, please see: https://developer.android.com/studio/build/kotlin-d8-r8-versions","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Unexpected error during rewriting of Kotlin metadata for class 'cn.android666.sip.activity.settings.IdentityActivity':\r\ncom.android.tools.r8.internal.xb4: Should never be called\r\n\tat com.android.tools.r8.kotlin.z0.a(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:2)\r\n\tat com.android.tools.r8.kotlin.x0.a(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:308)\r\n\tat com.android.tools.r8.kotlin.x0.b(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:17)\r\n\tat com.android.tools.r8.kotlin.x0.a(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:269)\r\n\tat com.android.tools.r8.internal.q34.a(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:23)\r\n\tat com.android.tools.r8.internal.q34.a(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:34)\r\n\tat com.android.tools.r8.internal.q34.a(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:17)\r\n\tat com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:131)\r\n\tat com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:76)\r\n\tat com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:82)\r\n\tat com.google.common.util.concurrent.DirectExecutorService.execute(DirectExecutorService.java:51)\r\n\tat java.base/java.util.concurrent.AbstractExecutorService.submit(Unknown Source)\r\n\tat com.google.common.util.concurrent.AbstractListeningExecutorService.submit(AbstractListeningExecutorService.java:79)\r\n\tat com.google.common.util.concurrent.AbstractListeningExecutorService.submit(AbstractListeningExecutorService.java:37)\r\n\tat com.android.tools.r8.internal.r34.submit(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:1)\r\n\tat com.android.tools.r8.internal.d34.a(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:15)\r\n\tat com.android.tools.r8.internal.q34.a(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:19)\r\n\tat com.android.tools.r8.internal.wx0.a(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:3)\r\n\tat java.base/java.util.ArrayList.forEach(Unknown Source)\r\n\tat com.android.tools.r8.internal.wx0.a(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:2)\r\n\tat com.android.tools.r8.internal.q34.a(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:10)\r\n\tat com.android.tools.r8.internal.q34.a(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:33)\r\n\tat com.android.tools.r8.internal.q34.a(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:25)\r\n\tat com.android.tools.r8.internal.q34.a(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:22)\r\n\tat com.android.tools.r8.i0.a(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:3)\r\n\tat com.android.tools.r8.kotlin.x0.a(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:98)\r\n\tat com.android.tools.r8.D8.b(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:29)\r\n\tat com.android.tools.r8.internal.o44.a(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:2)\r\n\tat com.android.tools.r8.D8.a(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:126)\r\n\tat com.android.tools.r8.D8.d(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:136)\r\n\tat com.android.tools.r8.D8.b(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:1)\r\n\tat com.android.tools.r8.internal.is0.a(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:28)\r\n\tat com.android.tools.r8.internal.is0.b(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:2)\r\n\tat com.android.tools.r8.D8.run(R8_8.13.17_97db08832ecbd4beb6016980e73b2386bedfe714d44a914167fcb89e61b9b5c1:11)\r\n\tat com.android.builder.dexing.D8DexArchiveBuilder.convert(D8DexArchiveBuilder.java:129)\r\n\tat com.android.build.gradle.internal.dexing.DexWorkActionKt.process(DexWorkAction.kt:178)\r\n\tat com.android.build.gradle.internal.dexing.DexWorkActionKt.processNonIncrementally(DexWorkAction.kt:146)\r\n\tat com.android.build.gradle.internal.dexing.DexWorkActionKt.launchProcessing(DexWorkAction.kt:73)\r\n\tat com.android.build.gradle.internal.dexing.DexWorkAction.run(DexWorkAction.kt:45)\r\n\tat com.android.build.gradle.internal.profile.ProfileAwareWorkAction.execute(ProfileAwareWorkAction.kt:74)\r\n\tat org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)\r\n\tat org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66)\r\n\tat org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62)\r\n\tat org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100)\r\n\tat org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62)\r\n\tat org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)\r\n\tat org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:210)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:205)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:67)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:60)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:167)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:60)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:54)\r\n\tat org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)\r\n\tat org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59)\r\n\tat org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:174)\r\n\tat java.base/java.util.concurrent.FutureTask.run(Unknown Source)\r\n\tat org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)\r\n\tat org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)\r\n\tat org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)\r\n\tat org.gradle.internal.Factories$1.create(Factories.java:31)\r\n\tat org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:263)\r\n\tat org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)\r\n\tat org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)\r\n\tat org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)\r\n\tat org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)\r\n\tat java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)\r\n\tat java.base/java.util.concurrent.FutureTask.run(Unknown Source)\r\n\tat org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)\r\n\tat org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48)\r\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\r\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\r\n\tat java.base/java.lang.Thread.run(Unknown Source)\r\n","sources":[{}],"tool":"D8"}
其实这个警告信息里面已经说明了问题,如下:
An error occurred when parsing kotlin metadata
This normally happens when using a newer version of kotlin
than the kotlin version released when this version of R8 was created
翻译为:
你用的 Kotlin 版本太新了
当前 AGP 内置的 R8/D8 还不完全支持
👉 在解析 Kotlin metadata 时出问题
解决方案:
方案1:升级AGP,我当前使用的kotlin版本是 2.3,Android官方中对应的是AGP 8.13.2,而我当前的AGP是8.13.1,所以升级一下AGP版本即可。官方表格:https://developer.android.com/build/kotlin-support?hl=zh-cn,如下:
| Kotlin 版本 | 所需的 AGP 版本 | 所需的 R8 版本 |
|---|---|---|
| 1.3 | 4.1 | 2.1.86 |
| 1.4 | 7.0 | 3.0.76 |
| 1.5 | 7.0 | 3.0.77 |
| 1.6 | 7.1 | 3.1.51 |
| 1.7 | 7.2 | 3.2.47 |
| 1.8 | 7.4 | 4.0.48 |
| 1.9 | 8.0 | 8.0.27 |
| 2.0 | 8.5 | 8.5.10 |
| 2.1 | 8.6 | 8.6.17 |
| 2.2 | 8.10 | 8.10.21 |
| 2.3 | 8.13.2 | 8.13.191 |
| 2.4 | 9.1.0 | 9.1.29 |
从这个表格可以看到,不同版本的kotlin需要的AGP和R8的版本。
方案2:降低Kotlin版本。