Fixed
Status Update
Comments
vi...@google.com <vi...@google.com> #2
EDIT: Hold on, I think my test is invalid. I'll reply with another comment with attached logs if I can repro it. I'm testing it again. Apologies for the confusion.
ORIGINAL COMMENT:
Hmm I'm not able to reproduce this anymore. I'm not sure what changed. Maybe the old build cache caused some issues. But after doing a clean & build, I am not seeing this.
Feel free to close this issue, if it happens again I'll let you know.
ORIGINAL COMMENT:
Hmm I'm not able to reproduce this anymore. I'm not sure what changed. Maybe the old build cache caused some issues. But after doing a clean & build, I am not seeing this.
Feel free to close this issue, if it happens again I'll let you know.
di...@gmail.com <di...@gmail.com> #3
Yep, I'm still able to reproduce the issue. Sorry for the confusion. Attached are my build logs (with `--info` and `--debug` enabled in compiler options). I also attached the idea logs directory.
di...@gmail.com <di...@gmail.com> #4
These steps don't reproduce the issue for me:
(1) Create new C++ project
(2) Paste snippet from comment #1 into app\build.gradle
(3) Select fullDebug variant and x86 ABI
(3) Delete app\build and app\.cxx folders (to be sure there's no leftovers)
(4) Using x86 emulator...
(5) Run -> Run 'app'
(6) From shell:
macbookpro:MyApplication112 jomof$ find . -name *.o
./app/.cxx/cmake/fullDebug/x86/CMakeFiles/native-lib.dir/native-lib.cpp.o
macbookpro:MyApplication112 jomof$ find . -name *.so
./app/build/intermediates/cmake/fullDebug/obj/x86/libnative-lib.so
./app/build/intermediates/merged_native_libs/fullDebug/out/lib/x86/libnative-lib.so
./app/build/intermediates/stripped_native_libs/fullDebug/out/lib/x86/libnative-lib.so
I do see a couple spurious warnings at step (6) :
Cannot build selected target ABI: x86, no suitable splits configured: armeabi-v7a;
ABIs [x86] set by 'android.injected.build.abi' gradle flag contained 'X86' not targeted by this project.
But I think these are ignorable for this purpose.
(1) Create new C++ project
(2) Paste snippet from
(3) Select fullDebug variant and x86 ABI
(3) Delete app\build and app\.cxx folders (to be sure there's no leftovers)
(4) Using x86 emulator...
(5) Run -> Run 'app'
(6) From shell:
macbookpro:MyApplication112 jomof$ find . -name *.o
./app/.cxx/cmake/fullDebug/x86/CMakeFiles/native-lib.dir/native-lib.cpp.o
macbookpro:MyApplication112 jomof$ find . -name *.so
./app/build/intermediates/cmake/fullDebug/obj/x86/libnative-lib.so
./app/build/intermediates/merged_native_libs/fullDebug/out/lib/x86/libnative-lib.so
./app/build/intermediates/stripped_native_libs/fullDebug/out/lib/x86/libnative-lib.so
I do see a couple spurious warnings at step (6) :
Cannot build selected target ABI: x86, no suitable splits configured: armeabi-v7a;
ABIs [x86] set by 'android.injected.build.abi' gradle flag contained 'X86' not targeted by this project.
But I think these are ignorable for this purpose.
xa...@google.com <xa...@google.com>
ju...@google.com <ju...@google.com>
ju...@google.com <ju...@google.com> #5
I will work on reproducing again tomorrow
ju...@google.com <ju...@google.com> #6
I am still seeing this but oddly on only one of my projects:
```
> Task :ZPayService:externalNativeBuildFullDebug
Build ZPayService_x86
ninja: Entering directory `E:\code\zps\source\ZPayService\.cxx\cmake\fullDebug\x86'
[1/45] Copying third party binaries
[2/45] Linking CXX static library output\lib\libZPayUtilities.a
[3/45] Linking CXX static library output\lib\libWallet.a
[4/45] Building CXX object ZPayService/Interface/CMakeFiles/ZPayServiceInterface.dir/Source/ZPay/Packets/StartTransaction/StartTransactionCommand.cpp.o
...
[33/45] Building CXX object ZPayService/Interface/CMakeFiles/ZPayServiceInterface.dir/Source/ZPay/Protocol/Kizi.cpp.o
```
> Task :ZPayService:externalNativeBuildFullDebug
Build ZPayService_x86
ninja: Entering directory `E:\code\zps\source\ZPayService\.cxx\cmake\fullDebug\x86'
[1/45] Copying third party binaries
[2/45] Linking CXX static library output\lib\libZPayUtilities.a
[3/45] Linking CXX static library output\lib\libWallet.a
[4/45] Building CXX object ZPayService/Interface/CMakeFiles/ZPayServiceInterface.dir/Source/ZPay/Packets/StartTransaction/StartTransactionCommand.cpp.o
...
[33/45] Building CXX object ZPayService/Interface/CMakeFiles/ZPayServiceInterface.dir/Source/ZPay/Protocol/Kizi.cpp.o
> Task :ZPayService:externalNativeBuildFullDebug
[34/45] Building CXX object ZPayService/Interface/CMakeFiles/ZPayServiceInterface.dir/Source/ZPay/Vas/Google/GoogleVasApplication.cpp.o
...
[43/45] Building CXX object ZPayService/Interface/CMakeFiles/ZPayServiceInterface.dir/Source/ZPay/ZPayServer.cpp.o
[44/45] Linking CXX static library output\lib\libZPayServiceInterface.a
[45/45] Linking CXX shared library ..\..\..\..\build\intermediates\cmake\fullDebug\obj\x86\libZPayService.so
Build ZPayService_armeabi-v7a
ninja: Entering directory `E:\code\zps\source\ZPayService\.cxx\cmake\fullDebug\armeabi-v7a'
[0/1] Re-running CMake...
```
Notice how it says `Build ZPayService_x86` then `Build ZPayService_armeabi-v7a`? I have an x86 device selected in the drop down at the top right next to the run configuration selection. I enabled `--info --debug` in compiler options and rebuilt from scratch. Please see attached logs.
di...@gmail.com <di...@gmail.com> #7
I'm attaching an MCVE. This is a stripped down version of the project in question. I'm able to reproduce the issue when I build:
```
> Task :ZPayService:externalNativeBuildFullDebug
Build ZPayService_x86
ninja: Entering directory `E:\code\mcve_building_all_variants3\ZPayService\.cxx\cmake\fullDebug\x86'
[1/6] Building CXX object ZPayService/ZPayUtilities/CMakeFiles/ZPayUtilities.dir/Source/ZPay/BerTlv.cpp.o
[2/6] Building CXX object ZPayService/Interface/CMakeFiles/ZPayServiceInterface.dir/Source/ZPay/ZPayServer.cpp.o
[3/6] Linking CXX static library ZPayService\ZPayUtilities\libZPayUtilities.a
[4/6] Linking CXX static library ZPayService\Interface\libZPayServiceInterface.a
[5/6] Building CXX object ZPayService/CMakeFiles/ZPayService.dir/Source/JniZPayServiceMain.cpp.o
[6/6] Linking CXX shared library ..\..\..\..\build\intermediates\cmake\fullDebug\obj\x86\libZPayService.so
Build ZPayService_armeabi-v7a
ninja: Entering directory `E:\code\mcve_building_all_variants3\ZPayService\.cxx\cmake\fullDebug\armeabi-v7a'
[1/6] Building CXX object ZPayService/ZPayUtilities/CMakeFiles/ZPayUtilities.dir/Source/ZPay/BerTlv.cpp.o
[2/6] Building CXX object ZPayService/Interface/CMakeFiles/ZPayServiceInterface.dir/Source/ZPay/ZPayServer.cpp.o
[3/6] Linking CXX static library ZPayService\ZPayUtilities\libZPayUtilities.a
[4/6] Linking CXX static library ZPayService\Interface\libZPayServiceInterface.a
[5/6] Building CXX object ZPayService/CMakeFiles/ZPayService.dir/Source/JniZPayServiceMain.cpp.o
[6/6] Linking CXX shared library ..\..\..\..\build\intermediates\cmake\fullDebug\obj\armeabi-v7a\libZPayService.so
```
Note that sometimes I also see that `c++_shared.so` is not packaged with the APK. See attached screenshot.
```
> Task :ZPayService:externalNativeBuildFullDebug
Build ZPayService_x86
ninja: Entering directory `E:\code\mcve_building_all_variants3\ZPayService\.cxx\cmake\fullDebug\x86'
[1/6] Building CXX object ZPayService/ZPayUtilities/CMakeFiles/ZPayUtilities.dir/Source/ZPay/BerTlv.cpp.o
[2/6] Building CXX object ZPayService/Interface/CMakeFiles/ZPayServiceInterface.dir/Source/ZPay/ZPayServer.cpp.o
[3/6] Linking CXX static library ZPayService\ZPayUtilities\libZPayUtilities.a
[4/6] Linking CXX static library ZPayService\Interface\libZPayServiceInterface.a
[5/6] Building CXX object ZPayService/CMakeFiles/ZPayService.dir/Source/JniZPayServiceMain.cpp.o
[6/6] Linking CXX shared library ..\..\..\..\build\intermediates\cmake\fullDebug\obj\x86\libZPayService.so
Build ZPayService_armeabi-v7a
ninja: Entering directory `E:\code\mcve_building_all_variants3\ZPayService\.cxx\cmake\fullDebug\armeabi-v7a'
[1/6] Building CXX object ZPayService/ZPayUtilities/CMakeFiles/ZPayUtilities.dir/Source/ZPay/BerTlv.cpp.o
[2/6] Building CXX object ZPayService/Interface/CMakeFiles/ZPayServiceInterface.dir/Source/ZPay/ZPayServer.cpp.o
[3/6] Linking CXX static library ZPayService\ZPayUtilities\libZPayUtilities.a
[4/6] Linking CXX static library ZPayService\Interface\libZPayServiceInterface.a
[5/6] Building CXX object ZPayService/CMakeFiles/ZPayService.dir/Source/JniZPayServiceMain.cpp.o
[6/6] Linking CXX shared library ..\..\..\..\build\intermediates\cmake\fullDebug\obj\armeabi-v7a\libZPayService.so
```
Note that sometimes I also see that `c++_shared.so` is not packaged with the APK. See attached screenshot.
di...@gmail.com <di...@gmail.com> #8
Comparatively, if I run this gradle build I get the correct file structure:
.\gradlew.bat :PaymentService:installx86debug
The files I see:
lib/x86/libc++_shared.so
lib/x86/libZPayService.so
Even if I pick "x86Debug" in the Build Variants panel of Android Studio, I do not see these libs included in the APK. It's only the command line build that inserts them in the APK.
.\gradlew.bat :PaymentService:installx86debug
The files I see:
lib/x86/libc++_shared.so
lib/x86/libZPayService.so
Even if I pick "x86Debug" in the Build Variants panel of Android Studio, I do not see these libs included in the APK. It's only the command line build that inserts them in the APK.
di...@gmail.com <di...@gmail.com> #9
Hey Robert,
For #11, how did you kick off the build? Doesn't the "Full" in :ZPayService:externalNativeBuildFullDebug indicate to build both ABIs in your mcve?
When I set the active build variant to x86Debug and build I get what look like the right .so files:
./ZPayService/build/intermediates/merged_native_libs/x86Debug/out/lib/x86/libc++_shared.so
./ZPayService/build/intermediates/merged_native_libs/x86Debug/out/lib/x86/libZPayService.so
./ZPayService/build/intermediates/stripped_native_libs/x86Debug/out/lib/x86/libc++_shared.so
./ZPayService/build/intermediates/stripped_native_libs/x86Debug/out/lib/x86/libZPayService.so
./ZPayService/build/intermediates/cmake/x86Debug/obj/x86/libc++_shared.so
./ZPayService/build/intermediates/cmake/x86Debug/obj/x86/libZPayService.so
./ZPayService/build/intermediates/intermediate-jars/x86/debug/jni/x86/libc++_shared.so
./ZPayService/build/intermediates/intermediate-jars/x86/debug/jni/x86/libZPayService.so
./PaymentService/build/intermediates/merged_native_libs/x86Debug/out/lib/x86/libc++_shared.so
./PaymentService/build/intermediates/merged_native_libs/x86Debug/out/lib/x86/libZPayService.so
./PaymentService/build/intermediates/stripped_native_libs/x86Debug/out/lib/x86/libc++_shared.so
./PaymentService/build/intermediates/stripped_native_libs/x86Debug/out/lib/x86/libZPayService.so
For #11, how did you kick off the build? Doesn't the "Full" in :ZPayService:externalNativeBuildFullDebug indicate to build both ABIs in your mcve?
When I set the active build variant to x86Debug and build I get what look like the right .so files:
./ZPayService/build/intermediates/merged_native_libs/x86Debug/out/lib/x86/libc++_shared.so
./ZPayService/build/intermediates/merged_native_libs/x86Debug/out/lib/x86/libZPayService.so
./ZPayService/build/intermediates/stripped_native_libs/x86Debug/out/lib/x86/libc++_shared.so
./ZPayService/build/intermediates/stripped_native_libs/x86Debug/out/lib/x86/libZPayService.so
./ZPayService/build/intermediates/cmake/x86Debug/obj/x86/libc++_shared.so
./ZPayService/build/intermediates/cmake/x86Debug/obj/x86/libZPayService.so
./ZPayService/build/intermediates/intermediate-jars/x86/debug/jni/x86/libc++_shared.so
./ZPayService/build/intermediates/intermediate-jars/x86/debug/jni/x86/libZPayService.so
./PaymentService/build/intermediates/merged_native_libs/x86Debug/out/lib/x86/libc++_shared.so
./PaymentService/build/intermediates/merged_native_libs/x86Debug/out/lib/x86/libZPayService.so
./PaymentService/build/intermediates/stripped_native_libs/x86Debug/out/lib/x86/libc++_shared.so
./PaymentService/build/intermediates/stripped_native_libs/x86Debug/out/lib/x86/libZPayService.so
ju...@google.com <ju...@google.com> #10
What is #11? I kicked off the build by doing CTRL+F5 to "Run on device", which is supposed to only build the relevant architectures for the target device, IIRC. At least, that's the behavior I've observed the past few years until now. Yes, my "full" flavor includes x86 and armeabi-v7a architectures. But that's only if I "assembleRelease" on Gradle command line, or run "Make Project" in Android Studio. If I CTRL+F5 to run on device or ALT+F5 to debug on device, it used to only build ARM if I had an ARM device, or x86 if I targeted an x86 device. But it never did both.
di...@gmail.com <di...@gmail.com> #11
Sorry for the shorthand, I was referring to comment #11 in this bug dated September 17.
Is it possible you've mapped CTRL+F5 to something? As far as I can tell that's not a standard keystroke for Android Studio. Neither my Windows, Mac, or Linux machines has that keystroke bound to anything in Android Studio. And I don't see it referenced inhttps://developer.android.com/studio/intro/keyboard-shortcuts (but that list could easily be missing stuff)
If I go by menu I use Run->Run 'PaymentService' (SHIFT+F10) has then I only see x86 built:
jomof@jomof:~/projects/mcve$ find . -name *.so
./ZPayService/build/intermediates/merged_native_libs/fullDebug/out/lib/x86/libc++_shared.so
./ZPayService/build/intermediates/merged_native_libs/fullDebug/out/lib/x86/libZPayService.so
./ZPayService/build/intermediates/stripped_native_libs/fullDebug/out/lib/x86/libc++_shared.so
./ZPayService/build/intermediates/stripped_native_libs/fullDebug/out/lib/x86/libZPayService.so
./ZPayService/build/intermediates/cmake/fullDebug/obj/x86/libc++_shared.so
./ZPayService/build/intermediates/cmake/fullDebug/obj/x86/libZPayService.so
./ZPayService/build/intermediates/intermediate-jars/full/debug/jni/x86/libc++_shared.so
./ZPayService/build/intermediates/intermediate-jars/full/debug/jni/x86/libZPayService.so
./PaymentService/build/intermediates/merged_native_libs/fullDebug/out/lib/x86/libc++_shared.so
./PaymentService/build/intermediates/merged_native_libs/fullDebug/out/lib/x86/libZPayService.so
./PaymentService/build/intermediates/stripped_native_libs/fullDebug/out/lib/x86/libc++_shared.so
./PaymentService/build/intermediates/stripped_native_libs/fullDebug/out/lib/x86/libZPayService.so
Is it possible you've mapped CTRL+F5 to something? As far as I can tell that's not a standard keystroke for Android Studio. Neither my Windows, Mac, or Linux machines has that keystroke bound to anything in Android Studio. And I don't see it referenced in
If I go by menu I use Run->Run 'PaymentService' (SHIFT+F10) has then I only see x86 built:
jomof@jomof:~/projects/mcve$ find . -name *.so
./ZPayService/build/intermediates/merged_native_libs/fullDebug/out/lib/x86/libc++_shared.so
./ZPayService/build/intermediates/merged_native_libs/fullDebug/out/lib/x86/libZPayService.so
./ZPayService/build/intermediates/stripped_native_libs/fullDebug/out/lib/x86/libc++_shared.so
./ZPayService/build/intermediates/stripped_native_libs/fullDebug/out/lib/x86/libZPayService.so
./ZPayService/build/intermediates/cmake/fullDebug/obj/x86/libc++_shared.so
./ZPayService/build/intermediates/cmake/fullDebug/obj/x86/libZPayService.so
./ZPayService/build/intermediates/intermediate-jars/full/debug/jni/x86/libc++_shared.so
./ZPayService/build/intermediates/intermediate-jars/full/debug/jni/x86/libZPayService.so
./PaymentService/build/intermediates/merged_native_libs/fullDebug/out/lib/x86/libc++_shared.so
./PaymentService/build/intermediates/merged_native_libs/fullDebug/out/lib/x86/libZPayService.so
./PaymentService/build/intermediates/stripped_native_libs/fullDebug/out/lib/x86/libc++_shared.so
./PaymentService/build/intermediates/stripped_native_libs/fullDebug/out/lib/x86/libZPayService.so
yo...@gmail.com <yo...@gmail.com> #12
That's why I was confused, I do not see a comment #11 (well, I didn't until your comment just now). See attached screenshot.
Also there's another screenshot showing my keymap. Sorry for the confusion, I did customize my mapping using the VisualStudio template (as a base) that Android Studio provides.
Also there's another screenshot showing my keymap. Sorry for the confusion, I did customize my mapping using the VisualStudio template (as a base) that Android Studio provides.
yo...@gmail.com <yo...@gmail.com> #13
Also can you please test on Windows? That's the platform I'm running all these tests on. Not sure why platform would matter, but for completeness if you try it we can at least rule it out.
ju...@google.com <ju...@google.com> #14
Oh, I assumed you saw the same comments as me. Good to have learned that.
Yeah, I'll check on Windows too
Yeah, I'll check on Windows too
di...@gmail.com <di...@gmail.com> #15
I can repro on Windows with AS 3.5. Now trying 3.6 to determine whether its a Windows-only issue or if it was fixed after 3.5 somehow.
di...@gmail.com <di...@gmail.com> #16
Sorry, I was wrong. I still don't repro even on 3.5 with Windows. I had pressed CTRL+F9 (Make Project) instead of SHIFT+F10 (Run 'Payment Service')
Steps I used:
1) Download and unzip mcve from comment #7
2) Install CMake 3.15 and put it on the path
3) Put ninja.exe on the path
4) Open mcve in Android Studio (I tried 3.5 and 3.6)
5) Change Android Studio's current build variant to 'fullDebug'
6) Set the current emulator to 'Pixel 2 API 29 x86'
7) Press SHIFT+F10 (Run 'Payment Service')
App builds only x86 and runs successfully:
c:\Users\jomof\Downloads\mcve>dir *.so /s/b
c:\Users\jomof\Downloads\mcve\PaymentService\build\intermediates\merged_native_libs\fullDebug\out\lib\x86\libc++_shared.so
c:\Users\jomof\Downloads\mcve\PaymentService\build\intermediates\merged_native_libs\fullDebug\out\lib\x86\libZPayService.so
c:\Users\jomof\Downloads\mcve\PaymentService\build\intermediates\stripped_native_libs\fullDebug\out\lib\x86\libc++_shared.so
c:\Users\jomof\Downloads\mcve\PaymentService\build\intermediates\stripped_native_libs\fullDebug\out\lib\x86\libZPayService.so
c:\Users\jomof\Downloads\mcve\ZPayService\build\intermediates\cmake\fullDebug\obj\x86\libc++_shared.so
c:\Users\jomof\Downloads\mcve\ZPayService\build\intermediates\cmake\fullDebug\obj\x86\libZPayService.so
c:\Users\jomof\Downloads\mcve\ZPayService\build\intermediates\intermediate-jars\full\debug\jni\x86\libc++_shared.so
c:\Users\jomof\Downloads\mcve\ZPayService\build\intermediates\intermediate-jars\full\debug\jni\x86\libZPayService.so
c:\Users\jomof\Downloads\mcve\ZPayService\build\intermediates\merged_native_libs\fullDebug\out\lib\x86\libc++_shared.so
c:\Users\jomof\Downloads\mcve\ZPayService\build\intermediates\merged_native_libs\fullDebug\out\lib\x86\libZPayService.so
c:\Users\jomof\Downloads\mcve\ZPayService\build\intermediates\stripped_native_libs\fullDebug\out\lib\x86\libc++_shared.so
c:\Users\jomof\Downloads\mcve\ZPayService\build\intermediates\stripped_native_libs\fullDebug\out\lib\x86\libZPayService.so
Steps I used:
1) Download and unzip mcve from
2) Install CMake 3.15 and put it on the path
3) Put ninja.exe on the path
4) Open mcve in Android Studio (I tried 3.5 and 3.6)
5) Change Android Studio's current build variant to 'fullDebug'
6) Set the current emulator to 'Pixel 2 API 29 x86'
7) Press SHIFT+F10 (Run 'Payment Service')
App builds only x86 and runs successfully:
c:\Users\jomof\Downloads\mcve>dir *.so /s/b
c:\Users\jomof\Downloads\mcve\PaymentService\build\intermediates\merged_native_libs\fullDebug\out\lib\x86\libc++_shared.so
c:\Users\jomof\Downloads\mcve\PaymentService\build\intermediates\merged_native_libs\fullDebug\out\lib\x86\libZPayService.so
c:\Users\jomof\Downloads\mcve\PaymentService\build\intermediates\stripped_native_libs\fullDebug\out\lib\x86\libc++_shared.so
c:\Users\jomof\Downloads\mcve\PaymentService\build\intermediates\stripped_native_libs\fullDebug\out\lib\x86\libZPayService.so
c:\Users\jomof\Downloads\mcve\ZPayService\build\intermediates\cmake\fullDebug\obj\x86\libc++_shared.so
c:\Users\jomof\Downloads\mcve\ZPayService\build\intermediates\cmake\fullDebug\obj\x86\libZPayService.so
c:\Users\jomof\Downloads\mcve\ZPayService\build\intermediates\intermediate-jars\full\debug\jni\x86\libc++_shared.so
c:\Users\jomof\Downloads\mcve\ZPayService\build\intermediates\intermediate-jars\full\debug\jni\x86\libZPayService.so
c:\Users\jomof\Downloads\mcve\ZPayService\build\intermediates\merged_native_libs\fullDebug\out\lib\x86\libc++_shared.so
c:\Users\jomof\Downloads\mcve\ZPayService\build\intermediates\merged_native_libs\fullDebug\out\lib\x86\libZPayService.so
c:\Users\jomof\Downloads\mcve\ZPayService\build\intermediates\stripped_native_libs\fullDebug\out\lib\x86\libc++_shared.so
c:\Users\jomof\Downloads\mcve\ZPayService\build\intermediates\stripped_native_libs\fullDebug\out\lib\x86\libZPayService.so
ju...@google.com <ju...@google.com> #17
Just to make sure, I see you are looking at output files, that's not what I was looking at. I was watching the build logs and noticed that both armeabi-v7a and x86 showed up and translation units were being compiled twice. Did you keep an eye on that as well?
Description
`app`, `b`, and `c` all give an error: "no module specified".
`MyApp.app`, `MyApp.b`, and `MyApp.c` don't have that error. `MyApp.app` gives a different error: "Default Activity not found". `MyApp.b` and `MyApp.c` work with no problem.
If I try to manually select the activity in `MyApp.app`'s run configuration, the autocomplete sees my activities, but it still gives an error: "The activity 'SomeActivity' is not declared in AndroidManifest.xml".
I do have some sourceset-specific manifest stuff in `app`.
This issue does not happen when opening the same project with AS 3.5.1 or AS 3.6 beta 1.
Logs attached.
Build: AI-192.6817.14.36.5959023, 201910230206,
AI-192.6817.14.36.5959023, JRE 1.8.0_212-release-1586-b4-5784211x64 JetBrains s.r.o, OS Mac OS X(x86_64) v10.14.6, screens 1440x900; Retina
AS: 4.0 Canary 1; Kotlin plugin: 1.3.60-eap-76-Studio3.6-1; Android Gradle Plugin: 3.5.1; Gradle: 5.6.2; NDK: from local.properties: 21.0.5935234, latest from SDK: 21.0.5935234; LLDB: LLDB 3.1 (revision: 3.1.4508709); CMake: from local.properties: (not specified), latest from SDK: 3.10.2, from PATH: 3.15.3Source: user_sentiment_feedback