Android Studio Chipmunk | 2021.2.1 Patch 2(2022 年 8 月)
本次要更新包含以下更新和 bug 修复:
Android 平台支持
借助 Android Studio Chipmunk 补丁 2 和 Android Gradle 7.2.2,您可以通过设置 compileSdk=33
针对 Android 13 API 进行编译。支持的最低 SDK 版本最高可为 32。在 Android Gradle 插件 7.3.0-beta05 之前,不支持 minSdk = 33
已修复的问题
C++ 调试程序 |
| |||||||
设计工具 |
| |||||||
Dexer (D8) |
| |||||||
Gradle |
| |||||||
导入/同步 |
| |||||||
缩减器 (R8) |
|
问题 37119428
最初提交:https://github.com/android-ndk/ndk/issues/197#issuecomment-246448343设置。2个项目`app`项目和`libModule`。这个错误有 2 个我认为相关的部分,所以我把这两个部分都放在这里。
**第 1 部分:** 无法调试库项目,设置断点不起作用。并且当发生段错误时,ndk 在“未知函数”中中断并且无法执行任何有用
的操作。解决方法是在主项目中执行此操作:
```
// default config
externalNativeBuild {
cmake {
abiFilters'armeabi-v7a'
arguments "- DANDROID_PLATFORM=android-${platformVersion}",
'-DANDROID_TOOLCHAIN=clang', '
}
}
// 在 android {}
externalNativeBuild {
cmake {
path "../libModule/src/main/cpp/CMakeLists.txt"
}
}
```
**第 2 部分:** 库项目始终在发布文件夹 `.externalNativeBuild` 中编译,无论已指定什么。有趣的是,如果我在 android studio RC2 中执行“Build->build APK”,它会构建调试版本。
一些讨论[这里](https://github.com/googlesamples/android-ndk/issues/238#issuecomment-246367381)
一些版本说明符
```
Android Studio 2.2 RC 2
构建 #AI-145.3253452,构建于 2016 年 9 月 7 日
JRE: 1.8.0_76-release-b03 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains sro
classpath 'com.android.tools.build:gradle:2.2.0-rc2 '
compileSdkVersion 24
buildToolsVersion "24.0.2"
cmake {
abiFilters'armeabi-v7a'
参数 "-DANDROID_PLATFORM=android-19",
'-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=gnustl_shared'
}
```
Studio Build: RC2
版本Gradle 插件:2.2.0-rc2
Gradle 版本:2.14.1
Java 版本:8
操作系统:Mac
重现步骤:使用应用程序和模块制作项目。模块是带有 cmake 的 C++。在 C++ 代码中设置断点或故意让 C++ 代码崩溃。
问题 232045613
Git Commit Review 功能在 Android Studio Chipmunk (2021.2.1) 中无法正常工作
构建:AI-212.5712.43.2112.8512546、202204281627、
AI-212.5712.43.2112.8512546,JRE 11.0.11+9-b1504.12x64 JetBrains sro,操作系统 Windows 10(amd64) v10.0,屏幕 1920.0x1080.0、1920.0x1080.0
AS:花栗鼠 | 2021.2.1;Kotlin 插件:212-1.6.10-release-923-AS5457.46;Android Gradle 插件:4.1.1;梯度:6.7.1;Gradle JDK:版本 11;NDK:来自local.properties:(未指定),最新来自SDK:(未找到);LLDB:未找到固定版本 3.1,来自 SDK 的最新版本:(未找到包);CMake:来自 local.properties:(未指定),最新来自 SDK:(未找到),来自 PATH:(未找到)来源:send_feedback_icon
重要提示:请阅读https://developer.android.com/studio/report-bugs.html仔细并提供所有必需的信息。
问题 235325369
Until now all desugared library versions have worked with all AGP version from 4.0. However from upcoming version 1.2.0 AGP 7.3 will be needed.
This should be documented, and the error message from D8/R8 should include a link to a table showing which compiler version is required for which desugared library version.
问题 188871862
我在整个项目中设置
android.nonTransitiveRClass=true
了很多完全合格的R
参考资料。我通过为不同的类使用大量导入别名解决了这个问题
R
,例如:
import com.myapp.theme.R as ThemeR // use ThemeR.color.some_color somewhere
但是,Lint 将它们标记为未使用。
Android Studio Arctic Fox | 2020.3.1 Beta 2 Build #AI-203.7717.56.2031.7375522, built on May 18, 2021 Runtime version: 11.0.10+0-b96-7249189 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Linux 5.7.1-050701-generic GC: G1 Young Generation, G1 Old Generation Memory: 3072M Cores: 12 Registry: external.system.auto.import.disabled=true, debugger.watches.in.variables=false, debugger.showTypes=false Non-Bundled Plugins: Key Promoter X, org.jetbrains.kotlin, com.developerphil.adbidea, com.squareup.sqldelight Current Desktop: ubuntu:GNOME
问题 234353685
我们有一个长期存在的应用程序,多年生产。更新到最新版本的 Android Studio 后,Gradle 同步失败并出现错误“无法在 :app 中找到匹配构建类型 'debug' 和产品风味 '[genius]' 的变体”,“genius”组件是其中之一口味选择。自上次发布以来,我们没有对此应用程序进行任何更改。
该应用程序有 3 种风格,分别为“flavorDimensions”模型“、”成本“、“市场”。
我们有另一个只有 2 种风格的应用程序,它可以同步并构建好。考虑到这一点,我人为地从失败中删除了一种风格应用程序,因此它读取“flavorDimensions”模型“,”市场“,它现在可以同步了。
内部版本:AI-212.5712.43.2112.8609683、202205181650、
AI-212.5712.43.2112.8609683、JRE 11.0.12+0-b1504.28-7817840x64 JetBrains sro、OS Mac OS X(aarch64) v12.4、屏幕 1920。 0
AS:花栗鼠 | 2021.2.1 补丁 1;Kotlin 插件:212-1.6.21-release-334-AS5457.46;Android Gradle 插件:7.2.1;梯度:7.3.3;Gradle JDK:版本 11.0.12;NDK:来自local.properties:(未指定),最新来自SDK:(未找到);LLDB:未找到固定版本 3.1,来自 SDK 的最新版本:(未找到包);CMake:来自local.properties:(未指定),最新来自SDK:(未找到),来自PATH:(未找到)重要提示:请 仔细
阅读https://developer.android.com/studio/report-bugs.html并提供所有必需的信息。
问题 236875523
Got this failure on R8 versions 3.1.80 (and 3.2.71). The same input works for R8 version 3.0.78.
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, position: Lcom/google/android/gms/internal/meet_coactivities/zzabv;zze(Lcom/google/android/gms/internal/meet_coactivities/zztg;Lcom/google/android/gms/internal/meet_coactivities/zzwi;)V, origin: /Users/user/.gradle/caches/transforms-3/0ca1ff7fabae8f4edc2291feca4721f7/transformed/livesharing-1.0.0-eap05-runtime.jar:com/google/android/gms/internal/meet_coactivities/zzabv.class at Version.fakeStackEntry(Version_3.1.80.java:0) at com.android.tools.r8.utils.ExceptionUtils.failWithFakeEntry(ExceptionUtils.java:139) at com.android.tools.r8.utils.ExceptionUtils.failCompilation(ExceptionUtils.java:89) at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:83) at com.android.tools.r8.utils.ExceptionUtils.withR8CompilationHandler(ExceptionUtils.java:69) at com.android.tools.r8.R8.runForTesting(R8.java:256) at com.android.tools.r8.R8.run(R8.java:194) at com.android.builder.dexing.R8Tool.runR8(r8Tool.kt:301) at com.android.build.gradle.internal.tasks.R8Task$Companion.shrink(R8Task.kt:592) at com.android.build.gradle.internal.tasks.R8Task.doTaskAction(R8Task.kt:443) at com.android.build.gradle.internal.tasks.NonIncrementalTask$taskAction$$inlined$recordTaskAction$1.invoke(BaseTask.kt:66) at com.android.build.gradle.internal.tasks.Blocks.recordSpan(Blocks.java:51) at com.android.build.gradle.internal.tasks.NonIncrementalTask.taskAction(NonIncrementalTask.kt:97) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) Caused by: java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 0 at com.android.tools.r8.ir.code.IntSwitch.numberOfTargetsIfPacked(IntSwitch.java:74) at com.android.tools.r8.ir.code.IntSwitch.canBePacked(IntSwitch.java:79) at com.android.tools.r8.ir.code.IntSwitch.canBePacked(IntSwitch.java:165) at com.android.tools.r8.ir.code.IntSwitch.emitPacked(IntSwitch.java:179) at com.android.tools.r8.ir.code.IntSwitch.buildDex(IntSwitch.java:204) at com.android.tools.r8.ir.code.BasicBlock.buildDex(BasicBlock.java:730) at com.android.tools.r8.ir.conversion.DexBuilder.build(DexBuilder.java:200) at com.android.tools.r8.graph.DexEncodedMethod.setCode(DexEncodedMethod.java:779) at com.android.tools.r8.ir.conversion.IRConverter.finalizeToDex(IRConverter.java:1690) at com.android.tools.r8.ir.conversion.IRConverter.finalizeIR(IRConverter.java:1655) at com.android.tools.r8.ir.conversion.IRConverter.optimize(IRConverter.java:1554) at com.android.tools.r8.ir.conversion.IRConverter.rewriteCodeInternal(IRConverter.java:1114) at com.android.tools.r8.ir.conversion.IRConverter.lambda$rewriteCode$22(IRConverter.java:1054) at com.android.tools.r8.utils.ExceptionUtils.withOriginAndPositionAttachmentHandler(ExceptionUtils.java:246) at com.android.tools.r8.ir.conversion.IRConverter.rewriteCode(IRConverter.java:1050) at com.android.tools.r8.ir.conversion.IRConverter.rewriteDesugaredCode(IRConverter.java:1067) at com.android.tools.r8.ir.conversion.IRConverter.processDesugaredMethod(IRConverter.java:1028) at com.android.tools.r8.ir.conversion.IRConverter.lambda$optimize$10(IRConverter.java:674) at com.android.tools.r8.ir.conversion.PrimaryMethodProcessor.lambda$forEachMethod$1(PrimaryMethodProcessor.java:145) at com.android.tools.r8.utils.ThreadUtils.lambda$processItemsWithResults$0(ThreadUtils.java:30) at com.android.tools.r8.utils.ThreadUtils.lambda$processItemsWithResults$2(ThreadUtils.java:57)
I'm sharing a dump zip privately.
问题 236618700
或者至少我认为这就是正在发生的事情。这是一些感兴趣的代码:
public class RelayObject { public enum WType { CHR, INT, LON, STR, BUF, PTR, TIM, HTB, HDA, INF, INL, ARR, UNKNOWN } } public class Hdata extends RelayObject { protected WType[] type_list = null; }
实例化
Hdata
在运行时失败并出现错误:
java.lang.NoSuchFieldError: No instance field type_list of type [Lcom/ubergeek42/weechat/relay/protocol/RelayObject$WType; in class Lcom/ubergeek42/weechat/relay/protocol/Hdata; or its superclasses (declaration of 'com.ubergeek42.weechat.relay.protocol.Hdata' appears in /data/app/com.ubergeek42.WeechatAndroid.dev-W9d2oGZW3bm4SszrM_QM1Q==/base.apk) at com.ubergeek42.weechat.relay.protocol.Hdata.<init>(Hdata.java:4) at com.ubergeek42.weechat.relay.protocol.Data.getObject$enumunboxing$(Data.java:25) at com.ubergeek42.weechat.relay.RelayMessage.<init>(RelayMessage.java:26) at com.ubergeek42.weechat.relay.connection.RelayConnection$$ExternalSyntheticLambda5.run(R8$$SyntheticClass:6) at com.ubergeek42.weechat.relay.connection.RelayConnection$Protected.run(RelayConnection.java:1) at com.ubergeek42.weechat.relay.connection.Utils$FriendlyThread.run(Utils.java:2)
请注意,
getObject$enumunboxing$
跟踪中有一个调用。反汇编Hdata
类(通过分析 APK → 显示字节码)产生:
.field public type_list:[I # direct methods .method public constructor <init>()V .registers 2 invoke-direct {p0}, Lcom/ubergeek42/weechat/relay/protocol/RelayObject;-><init>()V ... const/4 v0, 0x0 iput-object v0, p0, Lcom/ubergeek42/weechat/relay/protocol/Hdata;->type_list:[Lcom/ubergeek42/weechat/relay/protocol/RelayObject$WType;
我将其视为具有
type_list
整数数组类型字段的类。虽然 init 方法尝试向其写入类型为WType
. 我想 R8 尝试通过将枚举转换为整数来优化枚举,这是明智的,但也忘记了以某种方式更改 init 方法。我们的开发人员报告说,使用 r8 3.1.6-dev 时不会发生此错误,但会在 3.1.7-dev 中发生。它也发生在 3.3.28(当前稳定)和 4.0.12-dev(今天)中。
我附上了两个 APK,一个用 3.3.28 (3487e52) 构建,一个用 3.1.6-dev (f116b93) 构建,以及
Hdata
这两个文件的反编译字节码。这里是两次提交之间的版本更改(代码中的注释已过时)和Hdata的来源. APK 直接来自我们的 CI,即应用程序操作系统开源。PS Android Studio 显示 3487e52 的字节码,内容如下:
.line 16 .line 17 return-void .line 18 .line 19 .line 20 .line 21 .line 22 .line 23 .line 24 (many more lines like that)
总行数为 12.5k,而 f116b93 为 299,没有这些奇怪的行。这是怎么回事?
问题 223424356
我在我的 Android 项目中使用 Scala 2.11 库。使用 Proguard,收缩效果很好。切换到 R8 时,我在使用 Scala 集合类调用某些方法时遇到了一个 VerifyError:
java.lang.VerifyError: Rejecting class scala.collection.immutable.HashMap$HashTrieMap$$anon$1 that attempt to sub-type error class scala.collection .immutable.TrieIterator ('scala.collection.immutable.HashMap$HashTrieMap$$anon$1' 的声明
我有
-keep class scala.collection.** { *; }
在我的proguard-rules.pro
任何帮助,因为使用APG 7.x 无法使用 Proguard
问题 232379893
AGPBI: {"kind":"error","text":"java.lang.NullPointerException","sources":[{"file":"/Users/nucruz/.gradle/caches/transforms-3/688fae1a38ed3ed45ae18ecd84cdaf5b/转换/jetified-kotlinx-coroutines-core-jvm-1.6.1.jar"}],"tool":"R8"}
失败:构建失败并出现异常。
* 出了什么问题:
任务 ':app:minifyNdkDevReleaseWithR8' 执行失败。
> com.android.tools.r8.CompilationFailedException: 编译未能完成,位置:Lkotlinx/coroutines/debug/AgentPremain$$InternalSyntheticLambda$0$7895cd395e43c061a299e224a1d3672f97bd4610fe97f0e188c9c199a1620b54/zcru/misVun;) /。
我尝试了不同的协程版本,但问题仍然存在。有罪的部分是 Gradle 7.2.0。对于 v7.1.3,这并没有发生。
____________________________________________________
内部版本:AI-212.5712.43.2112.8512546、202204281627、
AI-212.5712.43.2112.8512546、JRE 11.0.12+0-b1504.28-7817840x64 JetBrains sro、OS Mac OS X(aarch645.6.1)、屏幕 345.6.1 .0, 1920.0x1080.0; 视网膜
AS:花栗鼠 | 2021.2.1;Kotlin 插件:212-1.6.21-release-334-AS5457.46;Android Gradle 插件:7.2.0;梯度:7.3.3;Gradle JDK:版本 11.0.12;NDK:来自local.properties:(未指定),最新来自SDK:22.1.7171670;LLDB:未找到固定版本 3.1,来自 SDK 的最新版本:(未找到包);CMake:来自 local.properties:(未指定),最新来自 SDK:(未找到),来自 PATH:(未找到)来源:send_feedback_icon
重要提示:请阅读https://developer.android.com/studio/report-bugs .html 仔细并提供所有必需的信息。
问题 236615030
When upgrading from R8 version 3.0.78 to 3.2.60, our minification starts failing with the following stack trace. Please let us know how to provide more information, if necessary.
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete at Version.fakeStackEntry(Version_3.2.60.java:0) at com.android.tools.r8.internal.bi.a(R8_3.2.60_61a204e00a4460bee78ec2913234dc5e1a3a501d9754e757835d117b7e302ba3:68) at com.android.tools.r8.internal.bi.a(R8_3.2.60_61a204e00a4460bee78ec2913234dc5e1a3a501d9754e757835d117b7e302ba3:28) at com.android.tools.r8.internal.bi.a(R8_3.2.60_61a204e00a4460bee78ec2913234dc5e1a3a501d9754e757835d117b7e302ba3:27) at com.android.tools.r8.R8.a(R8_3.2.60_61a204e00a4460bee78ec2913234dc5e1a3a501d9754e757835d117b7e302ba3:29) at com.android.tools.r8.R8.run(R8_3.2.60_61a204e00a4460bee78ec2913234dc5e1a3a501d9754e757835d117b7e302ba3:3) at com.android.builder.dexing.R8Tool.runR8(r8Tool.kt:301) at com.android.build.gradle.internal.tasks.R8Task$Companion.shrink(R8Task.kt:592) at com.android.build.gradle.internal.tasks.R8Task.doTaskAction(R8Task.kt:443) at com.android.build.gradle.internal.tasks.NonIncrementalTask$taskAction$$inlined$recordTaskAction$1.invoke(BaseTask.kt:66) at com.android.build.gradle.internal.tasks.Blocks.recordSpan(Blocks.java:51) at com.android.build.gradle.internal.tasks.NonIncrementalTask.taskAction(NonIncrementalTask.kt:97) at jdk.internal.reflect.GeneratedMethodAccessor785.invoke(Unknown Source) ... Caused by: java.lang.NullPointerException: (No message provided) at com.android.tools.r8.internal.jm.a(R8_3.2.60_61a204e00a4460bee78ec2913234dc5e1a3a501d9754e757835d117b7e302ba3:1) at com.android.tools.r8.internal.jm.add(R8_3.2.60_61a204e00a4460bee78ec2913234dc5e1a3a501d9754e757835d117b7e302ba3:1) at com.android.tools.r8.internal.gD.a(R8_3.2.60_61a204e00a4460bee78ec2913234dc5e1a3a501d9754e757835d117b7e302ba3:81) at com.android.tools.r8.internal.gD.b(R8_3.2.60_61a204e00a4460bee78ec2913234dc5e1a3a501d9754e757835d117b7e302ba3:2) at com.android.tools.r8.shaking.y.a(R8_3.2.60_61a204e00a4460bee78ec2913234dc5e1a3a501d9754e757835d117b7e302ba3:8518) at com.android.tools.r8.shaking.y.a(R8_3.2.60_61a204e00a4460bee78ec2913234dc5e1a3a501d9754e757835d117b7e302ba3:8332) at com.android.tools.r8.R8.a(R8_3.2.60_61a204e00a4460bee78ec2913234dc5e1a3a501d9754e757835d117b7e302ba3:2174) at com.android.tools.r8.R8.a(R8_3.2.60_61a204e00a4460bee78ec2913234dc5e1a3a501d9754e757835d117b7e302ba3:1039) at com.android.tools.r8.R8.c(R8_3.2.60_61a204e00a4460bee78ec2913234dc5e1a3a501d9754e757835d117b7e302ba3:1) at com.android.tools.r8.R8.b(R8_3.2.60_61a204e00a4460bee78ec2913234dc5e1a3a501d9754e757835d117b7e302ba3:1) at com.android.tools.r8.internal.bi.a(R8_3.2.60_61a204e00a4460bee78ec2913234dc5e1a3a501d9754e757835d117b7e302ba3:24) at com.android.tools.r8.R8.a(R8_3.2.60_61a204e00a4460bee78ec2913234dc5e1a3a501d9754e757835d117b7e302ba3:29) at com.android.tools.r8.R8.run(R8_3.2.60_61a204e00a4460bee78ec2913234dc5e1a3a501d9754e757835d117b7e302ba3:3) at com.android.builder.dexing.R8Tool.runR8(r8Tool.kt:301) at com.android.build.gradle.internal.tasks.R8Task$Companion.shrink(R8Task.kt:592) at com.android.build.gradle.internal.tasks.R8Task.doTaskAction(R8Task.kt:443) at com.android.build.gradle.internal.tasks.NonIncrementalTask$taskAction$$inlined$recordTaskAction$1.invoke(BaseTask.kt:66) at com.android.build.gradle.internal.tasks.Blocks.recordSpan(Blocks.java:51) at com.android.build.gradle.internal.tasks.NonIncrementalTask.taskAction(NonIncrementalTask.kt:97) at jdk.internal.reflect.GeneratedMethodAccessor785.invoke(Unknown Source) ...
问题 236294139
背景
我们有以下代码:
enum class AnimationType(val interpolator: TimeInterpolator) { LINEAR(LinearInterpolator()), EASE_IN(AccelerateInterpolator()), EASE_OUT(DecelerateInterpolator()), EASE_IN_OUT(AccelerateDecelerateInterpolator()); companion object { val ANIMATION_LOOKUP = mapOf(*AnimationType.values().map { Pair(it.ordinal, it) }.toTypedArray()) } }
这被编译成:
public enum IL { LINEAR(new LinearInterpolator()), EASE_IN(new AccelerateInterpolator()), EASE_OUT(new DecelerateInterpolator()), EASE_IN_OUT(new AccelerateDecelerateInterpolator()); public final TimeInterpolator a; ... // TimeInterpolator changed to BaseInterpolator!! IL(BaseInterpolator baseInterpolator) { this.a = baseInterpolator; } }
请注意,枚举的构造函数现在
BaseInterpolator
不是TimeInterpolator
.BaseInterpolator
在 SDK 22 (5.1) 中引入,因此现在在带有NoClassDefFound
.发送的先前编译转储应该重现此问题。如果你没有那个,我可以发一个新的。
问题 231030461
NullPointerException
使用3.3.35 版本运行时获取。使用 3.1.66 正确编译Agp 版本:7.1.3 r8 版本:3.3.35
at Version.fakeStackEntry(Version_3.3.35.java:0) ••• at com.android.build.gradle.internal.tasks.R8Task$Companion.shrink(R8Task.kt:592) at com.android.build.gradle.internal.tasks.R8Task.doTaskAction(R8Task.kt:443) at com.android.build.gradle.internal.tasks.NonIncrementalTask$taskAction$$inlined$recordTaskAction$1.invoke(BaseTask.kt:66) at com.android.build.gradle.internal.tasks.Blocks.recordSpan(Blocks.java:51) at com.android.build.gradle.internal.tasks.NonIncrementalTask.taskAction(NonIncrementalTask.kt:98) ••• Caused by: java.lang.NullPointerException: (No message provided) at com.android.tools.r8.ir.analysis.fieldaccess.FieldAssignmentTracker.lambda$initializeAbstractInstanceFieldValues$1(FieldAssignmentTracker.java:134) ••• at com.android.build.gradle.internal.tasks.R8Task$Companion.shrink(R8Task.kt:592) at com.android.build.gradle.internal.tasks.R8Task.doTaskAction(R8Task.kt:443) at com.android.build.gradle.internal.tasks.NonIncrementalTask$taskAction$$inlined$recordTaskAction$1.invoke(BaseTask.kt:66) at com.android.build.gradle.internal.tasks.Blocks.recordSpan(Blocks.java:51) at com.android.build.gradle.internal.tasks.NonIncrementalTask.taskAction(NonIncrementalTask.kt:98) •••