Status Update
Comments
lb...@gmail.com <lb...@gmail.com> #2
It seems the print is benign so I'll remove it; Could be worth it to find out how the message carrying information about "cb 0" (0 is not a valid color buffer handle) ever arrives to that line though
uc...@google.com <uc...@google.com>
rp...@google.com <rp...@google.com>
uc...@google.com <uc...@google.com> #3
lb...@gmail.com <lb...@gmail.com> #4
I agree with Sergey -- while I think it's fine to remove some logging messages that aren't necessary, the root problem here is that Studio shows everything emitted as if they are errors, with one notification bubble per message. We don't do that for other tools that Studio launches, and in particular, this isn't specific to the "cb 0" message I showed here; there were earlier (different) error messages during the boot as well.
lb...@gmail.com <lb...@gmail.com> #5
This behavior was requested specifically by the emulator team (vharron@ iirc, so at least 3-4 years ago). Let me see if I have any more details on why this was requested.
uc...@google.com <uc...@google.com>
tn...@google.com <tn...@google.com>
tn...@google.com <tn...@google.com> #6
I couldn't find any relevant threads. IIRC, the main concern at that time was that warnings at startup (e.g. missing acceleration) really needed to be bubbled up to the users. If that is not an issue anymore, and the emulator team only wants errors to be visible, then the proposed change SGTM.
tn...@google.com <tn...@google.com> #7
Yes, I vaguely remember that in some cases, you'd hit run, and then the emulator would fail to start (for example aborting because of some missing thing it needed), so we needed a way to surface these reasons. I don't know if there are any fatal startup errors like this. It seems like there are several things we could do here:
(1) Simplest: just reroute the errors into the log, and if emulator fails to start, that's where people can look. (I think that's what Sergey has already implemented?)
(2) If emulator could update itself to prefix truly fatal error messages in some way (such as error:) and use that for only fatal/exit(-1) reasons, then we could multiplex the output -- errors are shown in notifications as today, everything else is silently dumped to the log
(3) Hold on to the emulator output, and if there's a problem starting the emulator (say if it exits within a few seconds), then show all the emulator output.
lb...@gmail.com <lb...@gmail.com> #8
(2) More discipline in the emulator's messages would definitely help. Right now they don't seem to follow any simple set of rules (the "Emulator: " prefix is added by Studio):
2020-05-06 11:07:04,587 [ 38858] INFO - manager.EmulatorProcessHandler - Emulator: /usr/local/google/home/sprigogin/Android/Sdk/emulator/emulator -netdelay none -netspeed full -avd Nexus_10_API_29 -no-window -gpu auto-no-window -grpc-use-token
2020-05-06 11:07:04,976 [ 39247] INFO - manager.EmulatorProcessHandler - Emulator: pulseaudio: Failed to initialize PA contextaudio: Could not init `pa' audio driver
2020-05-06 11:07:04,985 [ 39256] INFO - manager.EmulatorProcessHandler - Emulator: E0506 11:07:04.983601525 31440 socket_utils_common_posix.cc:201] check for SO_REUSEPORT: {"created":"@1588788424.983585430","description":"SO_REUSEPORT unavailable on compiling system","file":"/mnt/tmpfs/src/android/emu-master-dev/external/grpc/src/core/lib/iomgr/socket_utils_common_posix.cc","file_line":169}
2020-05-06 11:07:05,321 [ 39592] INFO - manager.EmulatorProcessHandler - Emulator: Your emulator is out of date, please update by launching Android Studio:
2020-05-06 11:07:05,321 [ 39592] INFO - manager.EmulatorProcessHandler - Emulator: - Start Android Studio
2020-05-06 11:07:05,321 [ 39592] INFO - manager.EmulatorProcessHandler - Emulator: - Select menu "Tools > Android > SDK Manager"
2020-05-06 11:07:05,321 [ 39592] INFO - manager.EmulatorProcessHandler - Emulator: - Click "SDK Tools" tab
2020-05-06 11:07:05,321 [ 39592] INFO - manager.EmulatorProcessHandler - Emulator: - Check "Android Emulator" checkbox
2020-05-06 11:07:05,321 [ 39592] INFO - manager.EmulatorProcessHandler - Emulator: - Click "OK"
2020-05-06 11:07:05,321 [ 39592] INFO - manager.EmulatorProcessHandler - Emulator:
2020-05-06 11:07:06,475 [ 40746] INFO - manager.EmulatorProcessHandler - Emulator: emulator: INFO: LoggingInterceptor.cpp:70: 1588788426470945, rcvTime: 84, sndTime: 995, UNARY, rcv: 24, snd: 12156, /android.emulation.control.EmulatorController/getStatus() -> [...], OK
2020-05-06 11:07:07,355 [ 41626] INFO - manager.EmulatorProcessHandler - Emulator: emulator: INFO: LoggingInterceptor.cpp:70: 1588788426597819, rcvTime: 34, sndTime: 12945, SERVER_STREAMING, rcv: 48, snd: 1104071, /android.emulation.control.EmulatorController/streamScreenshot(format: RGBA8888 width: 665 height: 1064) -> [...], OK
tn...@google.com <tn...@google.com> #9
Yes, the @SuppressLint of the inflation.
Yes, we use lint, as do most users, and lint has thousands of unit tests, but this bug exposes a specific scenario that went undetected.
The reason this happens is that that annotation is on an expression; that's not a super common scenario (and is not possible in Java). This triggered a bug in UAST; I linked to the bug report above. And the symptom when this happens is that the annotated statement disappears from the parse tree. So it's not like when this happens you get some weird error; instead, the problem is that code in these statements aren't analyzed, so lint wouldn't be able to for example flag a problem on that line. That's not the kind of thing that's easy to spot.
Anyway, I've tried to fix this in the Kotlin source tree and have sent a patch to JetBrains. In the meantime, my patch fixes this bug and passes all existing unit test, so I've applied it to Studio's copy of uast for now, and have cherrypicked it back to the 4.0 branch as well. So this will be fixed in an upcoming 4.0 beta/rc and 4.1 canary by Change-Id: I83a509d73e777bcee281b99934bce086e79a3677.
lb...@gmail.com <lb...@gmail.com> #10
tn...@google.com <tn...@google.com> #11
I confirmed that the sample project you attached to this bug doesn't show any unused resources when running with lint with this fix.
lb...@gmail.com <lb...@gmail.com> #12
tn...@google.com <tn...@google.com> #13
Which comment was that, #5? I don't think lint will flag that as an unused resource.
tn...@google.com <tn...@google.com> #15
One of those two bugs is a duplicate of the other, and neither one is similar to the scenario in #5. I tried to reproduce #5 and it does not remove the resource referenced only within the if (BuildConfig) block.
lb...@gmail.com <lb...@gmail.com> #16
And version of what exactly? The IDE? Or of Kotlin plugin?
Description
Version of Gradle Plugin:
Version of Gradle:
Version of Java:
OS:
Android Studio 3.3.1
Build #AI-182.5107.16.33.5264788, built on January 29, 2019
JRE: 1.8.0_152-release-1248-b01 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0
Steps to Reproduce:
Sadly I can't reproduce it on POC project. Only on huge project.
1. Have many resources in the project, some are used some aren't. In my case only 2 image resources aren't really used, and there are some strings that aren't used, but the rest are used.
2. Run the tool to remove unused resources.
The bug:
You might see resources (in my case 2 drawables, not those that I mentioned) that are written in the results, which are actually used, and that if you remove them, it will cause build error.
Attached video to show issue and IDE log.