Open naslausky opened 4 years ago
This is a side effect of how Flutter locates and caches fallback fonts for characters that are not handled by the fonts listed in the TextStyle
.
The first time that dualCharEmoji
is rendered Flutter sees that the default font does not handle the 2694
character. It then calls Skia's SkFontMgr::matchFamilyStyleCharacter
API to find a font that includes that character. On my test Android device, matchFamilyStyleCharacter
returns the NotoSansSymbols-Regular-Subsetted
font. NotoSansSymbols
can render the basic 2694
crossed swords character but not the 2694 FE0F
emoji. Flutter then adds the NotoSansSymbols
font to a cache.
When singleCharEmoji
is rendered Flutter now includes the NotoSansSymbols
font in the list of fonts given to the HarfBuzz text shaper. However, neither the default font nor NotoSansSymbols
include the singleCharEmoji
character. So Flutter needs to call matchFamilyStyleCharacter
again, and matchFamilyStyleCharacter
returns NotoColorEmoji
. Flutter also adds this font to the cache.
The next time the engine tries to render dualCharEmoji
it provides both cached fonts (NotoSansSymbols
and NotoColorEmoji
) to HarfBuzz. Now that HarfBuzz is aware of the sequences defined in NotoColorEmoji
it can recognize the 2694 FE0F
emoji and return it to Flutter.
As a hack workaround you can force prefetching of the NotoColorEmoji
font with something like https://github.com/flutter/flutter/issues/42586#issuecomment-541870382. However, this relies on implementation details of the current Flutter text engine that may change in the future.
@Rusino This will also affect SkParagraph. For the 2694 FE0F
sequence SkParagraph's OneLineShaper::matchResolvedFonts
will call utf8_next
, see the 2694
codepoint, request a fallback font, and get NotoSansSymbols
. It doesn't look like there is a way to discover that this is part of a multiple codepoint sequence and obtain NotoSansEmoji
.
@Rusino This will also affect SkParagraph. For the
2694 FE0F
sequence SkParagraph'sOneLineShaper::matchResolvedFonts
will callutf8_next
, see the2694
codepoint, request a fallback font, and getNotoSansSymbols
. It doesn't look like there is a way to discover that this is part of a multiple codepoint sequence and obtainNotoSansEmoji
.
Yes, it's a problem. SkParagraph the right thing for the fonts listed in the text style, but the default font fallback does not do that for now. I cannot fix it outside of Skia default font manager (I may never get the right font that covers all codepoints). It will be fixed there... eventually. For now the work around is to list the desired font in the text style and it will be resolved correctly.
I was able to reproduce this on latest master channel.
Hey, I stumbled upon the same issue, Emojis are crucial for my client's project. Ⓜ️
I fixed this with style: TextStyle(fontFamily: 'Apple Color Emoji')
but it needs testing on other platforms and different devices :/
any solution for web?
Hi @naslausky, I am unable to reproduce the issue on stable 3.3 and master 3.7, The emoji renders fine the first time.
Closing as fixed incase you disagree feel free to write in the comments and we will reopen it.
Thank you.
Hello @maheshmnj, 👋 At your screenshot, I believe the top left and the "Redmi" emulators still have the incorrect emoji. That "simple" crossed sword is the first character of the dual character emoji. The iPhone and the Chrome ones are correct though. I'm not sure why would that happen. I haven't tested myself, but I don't think your screenshot shows the bug as completely fixed. Once you press the button twice, does it change the emoji displayed to the more complex crossed swords? Could you please check it again? Maybe I misinterpreted something. My regards, and thank you too.
Thanks for the clarification @naslausky,
Once you press the button twice, does it change the emoji displayed to the more complex crossed swords? Could you please check it again?
Here's how it looks
Can you please share the expected output?
That's strange, @maheshmnj. Yes, the behavior definitely changed. It is not the expected behavior still I guess. I don't understand so much about character encoding (Unicode) to completely assure you. However, the character in your video is the simple crossed sword... In other words: It's the text presentation of the crossed swords emoji. The emoji representation is the more elaborate one, but that one doesn't show up at all in your video, even after switching to a emoji represented character (the single sword emoji). You can see the different variants here: https://unicode.org/emoji/charts/emoji-variants.html The dagger emoji gets displayed correctly, like before, still.
However, running your same code on dart pad gives me the expected output. And even if I choose the text representation, it renders as the same emoji:
Which is still strange, though. The same behavior happens on my Chrome browser: When I paste the text representation, it renders as the emoji representation. Maybe the unicode standard has changed its default presentation to the emoji representation or extinguished the text representation of some emoji's? Different platforms render emoji differently... maybe some of the default fonts from different platforms made different decisions regarding this double representation? I think this specific issue might be left as fixed, but maybe a closer look later by someone better at character encoding might help. Thank you,
Thanks for taking a look, I am unsure at this point if the output is desired. I will live this issue open for the flutter team to decide.
Triage details: https://github.com/flutter/flutter/issues/45947#issuecomment-1376749334
cc: @jason-simmons
Steps to Reproduce
(0. I've attached a minimum reproducible example below)
⚔
)Target Platform: I've tested only on Androids Target OS version/browser: Happened on my Android 8.1 and on my Emulator (api 28) Devices: Tested both on emulator AND physical devices
Minimum reproducible example
See the minimum reproducible example below:
Logs
Logs
``` D:\AndroidStudioProjects\emoji_test_so>flutter run --verbose [ +21 ms] executing: [C:\FlutterSDK\] git log -n 1 --pretty=format:%H [ +45 ms] Exit code 0 from: git log -n 1 --pretty=format:%H [ ] cc949a8e8b9cf394b9290a8e80f87af3e207dce5 [ ] executing: [C:\FlutterSDK\] git describe --match v*.*.* --first-parent --long --tags [ +25 ms] Exit code 0 from: git describe --match v*.*.* --first-parent --long --tags [ ] v1.9.1+hotfix.4-0-gcc949a8e8 [ +6 ms] executing: [C:\FlutterSDK\] git rev-parse --abbrev-ref --symbolic @{u} [ +23 ms] Exit code 0 from: git rev-parse --abbrev-ref --symbolic @{u} [ ] origin/stable [ ] executing: [C:\FlutterSDK\] git ls-remote --get-url origin [ +22 ms] Exit code 0 from: git ls-remote --get-url origin [ ] https://github.com/flutter/flutter.git [ +57 ms] executing: [C:\FlutterSDK\] git rev-parse --abbrev-ref HEAD [ +24 ms] Exit code 0 from: git rev-parse --abbrev-ref HEAD [ ] stable [ +77 ms] executing: C:\Users\Naslausky\AppData\Local\Android\sdk\platform-tools\adb.exe devices -l [ +17 ms] Exit code 0 from: C:\Users\Naslausky\AppData\Local\Android\sdk\platform-tools\adb.exe devices -l [ ] List of devices attached emulator-5554 device product:sdk_gphone_x86 model:Android_SDK_built_for_x86 device:generic_x86 transport_id:1 [ +16 ms] C:\Users\Naslausky\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 shell getprop [ +55 ms] Artifact Instance of 'FlutterWebSdk' is not required, skipping update. [ +4 ms] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update. [ +1 ms] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update. [ +1 ms] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update. [ +1 ms] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update. [ ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update. [ ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update. [ +103 ms] ro.hardware = ranchu [ +35 ms] Using hardware rendering with device Android SDK built for x86. If you get graphics artifacts, consider enabling software rendering with "--enable-software-rendering". [ +15 ms] Launching lib\main.dart on Android SDK built for x86 in debug mode... [ +12 ms] Initializing gradle... [ +2 ms] Using gradle from D:\AndroidStudioProjects\emoji_test_so\android\gradlew.bat. [ +72 ms] executing: D:\AndroidStudioProjects\emoji_test_so\android\gradlew.bat -v [ +610 ms] ------------------------------------------------------------ Gradle 4.10.2 ------------------------------------------------------------ Build time: 2018-09-19 18:10:15 UTC Revision: b4d8d5d170bb4ba516e88d7fe5647e2323d791dd Kotlin DSL: 1.0-rc-6 Kotlin: 1.2.61 Groovy: 2.4.15 Ant: Apache Ant(TM) version 1.9.11 compiled on March 23 2018 JVM: 1.8.0_152-release (JetBrains s.r.o 25.152-b01) OS: Windows 10 10.0 amd64 [ +9 ms] Initializing gradle... (completed in 0,7s) [ +1 ms] Resolving dependencies... [ ] executing: [D:\AndroidStudioProjects\emoji_test_so\android\] D:\AndroidStudioProjects\emoji_test_so\android\gradlew.bat app:properties [ +925 ms] > Task :app:properties ------------------------------------------------------------ Project :app ------------------------------------------------------------ INTERNAL__CHECKED_MINIMUM_PLUGIN_VERSIONS: true allprojects: [project ':app'] android: com.android.build.gradle.internal.dsl.BaseAppModuleExtension_Decorated@79e8722a android.enableJetifier: true android.useAndroidX: true androidDependencies: task ':app:androidDependencies' ant: org.gradle.api.internal.project.DefaultAntBuilder@1e457822 antBuilderFactory: org.gradle.api.internal.project.DefaultAntBuilderFactory@43f42404 archivesBaseName: app artifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler_Decorated@2ea96bc5 asDynamicObject: DynamicObject for project ':app' assemble: task ':app:assemble' assembleAndroidTest: task ':app:assembleAndroidTest' assembleDebug: task ':app:assembleDebug' assembleDebugAndroidTest: task ':app:assembleDebugAndroidTest' assembleDebugUnitTest: task ':app:assembleDebugUnitTest' assembleProfile: task ':app:assembleProfile' assembleProfileUnitTest: task ':app:assembleProfileUnitTest' assembleRelease: task ':app:assembleRelease' assembleReleaseUnitTest: task ':app:assembleReleaseUnitTest' baseClassLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@146a2518 buildDebugPreBundle: task ':app:buildDebugPreBundle' buildDir: D:\AndroidStudioProjects\emoji_test_so\build\app buildFile: D:\AndroidStudioProjects\emoji_test_so\android\app\build.gradle buildOutputs: BaseVariantOutput container buildPath: : buildProfilePreBundle: task ':app:buildProfilePreBundle' buildReleasePreBundle: task ':app:buildReleasePreBundle' buildScriptSource: org.gradle.groovy.scripts.TextResourceScriptSource@215bcbdf buildscript: org.gradle.api.internal.initialization.DefaultScriptHandler@43ed0ff4 bundle: task ':app:bundle' bundleDebug: task ':app:bundleDebug' bundleDebugAndroidTestResources: task ':app:bundleDebugAndroidTestResources' bundleDebugResources: task ':app:bundleDebugResources' bundleProfile: task ':app:bundleProfile' bundleProfileResources: task ':app:bundleProfileResources' bundleRelease: task ':app:bundleRelease' bundleReleaseResources: task ':app:bundleReleaseResources' check: task ':app:check' checkDebugAndroidTestClasspath: task ':app:checkDebugAndroidTestClasspath' checkDebugClasspath: task ':app:checkDebugClasspath' checkDebugLibraries: task ':app:checkDebugLibraries' checkDebugManifest: task ':app:checkDebugManifest' checkProfileClasspath: task ':app:checkProfileClasspath' checkProfileLibraries: task ':app:checkProfileLibraries' checkProfileManifest: task ':app:checkProfileManifest' checkReleaseClasspath: task ':app:checkReleaseClasspath' checkReleaseLibraries: task ':app:checkReleaseLibraries' checkReleaseManifest: task ':app:checkReleaseManifest' childProjects: {} class: class org.gradle.api.internal.project.DefaultProject_Decorated classLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@26ffa30f cleanBuildCache: task ':app:cleanBuildCache' compileDebugAidl: task ':app:compileDebugAidl' compileDebugAndroidTestAidl: task ':app:compileDebugAndroidTestAidl' compileDebugAndroidTestJavaWithJavac: task ':app:compileDebugAndroidTestJavaWithJavac' compileDebugAndroidTestKotlin: task ':app:compileDebugAndroidTestKotlin' compileDebugAndroidTestNdk: task ':app:compileDebugAndroidTestNdk' compileDebugAndroidTestRenderscript: task ':app:compileDebugAndroidTestRenderscript' compileDebugAndroidTestShaders: task ':app:compileDebugAndroidTestShaders' compileDebugAndroidTestSources: task ':app:compileDebugAndroidTestSources' compileDebugJavaWithJavac: task ':app:compileDebugJavaWithJavac' compileDebugKotlin: task ':app:compileDebugKotlin' compileDebugNdk: task ':app:compileDebugNdk' compileDebugRenderscript: task ':app:compileDebugRenderscript' compileDebugShaders: task ':app:compileDebugShaders' compileDebugSources: task ':app:compileDebugSources' compileDebugUnitTestJavaWithJavac: task ':app:compileDebugUnitTestJavaWithJavac' compileDebugUnitTestKotlin: task ':app:compileDebugUnitTestKotlin' compileDebugUnitTestSources: task ':app:compileDebugUnitTestSources' compileFlutterBuildDebugArm: task ':app:compileFlutterBuildDebugArm' compileFlutterBuildDebugArm64: task ':app:compileFlutterBuildDebugArm64' compileFlutterBuildProfileArm: task ':app:compileFlutterBuildProfileArm' compileFlutterBuildProfileArm64: task ':app:compileFlutterBuildProfileArm64' compileFlutterBuildReleaseArm: task ':app:compileFlutterBuildReleaseArm' compileFlutterBuildReleaseArm64: task ':app:compileFlutterBuildReleaseArm64' compileLint: task ':app:compileLint' compileProfileAidl: task ':app:compileProfileAidl' compileProfileJavaWithJavac: task ':app:compileProfileJavaWithJavac' compileProfileKotlin: task ':app:compileProfileKotlin' compileProfileNdk: task ':app:compileProfileNdk' compileProfileRenderscript: task ':app:compileProfileRenderscript' compileProfileShaders: task ':app:compileProfileShaders' compileProfileSources: task ':app:compileProfileSources' compileProfileUnitTestJavaWithJavac: task ':app:compileProfileUnitTestJavaWithJavac' compileProfileUnitTestKotlin: task ':app:compileProfileUnitTestKotlin' compileProfileUnitTestSources: task ':app:compileProfileUnitTestSources' compileReleaseAidl: task ':app:compileReleaseAidl' compileReleaseJavaWithJavac: task ':app:compileReleaseJavaWithJavac' compileReleaseKotlin: task ':app:compileReleaseKotlin' compileReleaseNdk: task ':app:compileReleaseNdk' compileReleaseRenderscript: task ':app:compileReleaseRenderscript' compileReleaseShaders: task ':app:compileReleaseShaders' compileReleaseSources: task ':app:compileReleaseSources' compileReleaseUnitTestJavaWithJavac: task ':app:compileReleaseUnitTestJavaWithJavac' compileReleaseUnitTestKotlin: task ':app:compileReleaseUnitTestKotlin' compileReleaseUnitTestSources: task ':app:compileReleaseUnitTestSources' components: SoftwareComponentInternal set configurationActions: org.gradle.configuration.project.DefaultProjectConfigurationActionContainer@63f8002d configurationTargetIdentifier: org.gradle.configuration.ConfigurationTargetIdentifier$1@1c823abe configurations: configuration container connectedAndroidTest: task ':app:connectedAndroidTest' connectedCheck: task ':app:connectedCheck' connectedDebugAndroidTest: task ':app:connectedDebugAndroidTest' consumeConfigAttr: task ':app:consumeConfigAttr' convention: org.gradle.api.internal.plugins.DefaultConvention@37bb0475 copyFlutterAssetsDebug: task ':app:copyFlutterAssetsDebug' copyFlutterAssetsProfile: task ':app:copyFlutterAssetsProfile' copyFlutterAssetsRelease: task ':app:copyFlutterAssetsRelease' createDebugCompatibleScreenManifests: task ':app:createDebugCompatibleScreenManifests' createMockableJar: task ':app:createMockableJar' createProfileCompatibleScreenManifests: task ':app:createProfileCompatibleScreenManifests' createReleaseCompatibleScreenManifests: task ':app:createReleaseCompatibleScreenManifests' defaultArtifacts: org.gradle.api.internal.plugins.DefaultArtifactPublicationSet_Decorated@6c872e56 defaultTasks: [] deferredProjectConfiguration: org.gradle.api.internal.project.DeferredProjectConfiguration@4fddb283 dependencies: org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler_Decorated@4287360c dependencyLocking: org.gradle.internal.locking.DefaultDependencyLockingHandler_Decorated@2d701a85 depth: 1 description: null deviceAndroidTest: task ':app:deviceAndroidTest' deviceCheck: task ':app:deviceCheck' displayName: project ':app' distsDir: D:\AndroidStudioProjects\emoji_test_so\build\app\distributions distsDirName: distributions docsDir: D:\AndroidStudioProjects\emoji_test_so\build\app\docs docsDirName: docs ext: org.gradle.api.internal.plugins.DefaultExtraPropertiesExtension@78d064e3 extensions: org.gradle.api.internal.plugins.DefaultConvention@37bb0475 extractApksForDebug: task ':app:extractApksForDebug' extractApksForProfile: task ':app:extractApksForProfile' extractApksForRelease: task ':app:extractApksForRelease' extractProguardFiles: task ':app:extractProguardFiles' fileOperations: org.gradle.api.internal.file.DefaultFileOperations@5abb98d0 fileResolver: org.gradle.api.internal.file.BaseDirFileResolver@2177e2dd flutter: FlutterExtension_Decorated@cfe7044 generateDebugAndroidTestAssets: task ':app:generateDebugAndroidTestAssets' generateDebugAndroidTestBuildConfig: task ':app:generateDebugAndroidTestBuildConfig' generateDebugAndroidTestResValues: task ':app:generateDebugAndroidTestResValues' generateDebugAndroidTestResources: task ':app:generateDebugAndroidTestResources' generateDebugAndroidTestSources: task ':app:generateDebugAndroidTestSources' generateDebugAssets: task ':app:generateDebugAssets' generateDebugBuildConfig: task ':app:generateDebugBuildConfig' generateDebugFeatureMetadata: task ':app:generateDebugFeatureMetadata' generateDebugFeatureTransitiveDeps: task ':app:generateDebugFeatureTransitiveDeps' generateDebugResValues: task ':app:generateDebugResValues' generateDebugResources: task ':app:generateDebugResources' generateDebugSources: task ':app:generateDebugSources' generateDebugUnitTestAssets: task ':app:generateDebugUnitTestAssets' generateDebugUnitTestResources: task ':app:generateDebugUnitTestResources' generateDebugUnitTestSources: task ':app:generateDebugUnitTestSources' generateProfileAssets: task ':app:generateProfileAssets' generateProfileBuildConfig: task ':app:generateProfileBuildConfig' generateProfileFeatureMetadata: task ':app:generateProfileFeatureMetadata' generateProfileFeatureTransitiveDeps: task ':app:generateProfileFeatureTransitiveDeps' generateProfileResValues: task ':app:generateProfileResValues' generateProfileResources: task ':app:generateProfileResources' generateProfileSources: task ':app:generateProfileSources' generateProfileUnitTestAssets: task ':app:generateProfileUnitTestAssets' generateProfileUnitTestResources: task ':app:generateProfileUnitTestResources' generateProfileUnitTestSources: task ':app:generateProfileUnitTestSources' generateReleaseAssets: task ':app:generateReleaseAssets' generateReleaseBuildConfig: task ':app:generateReleaseBuildConfig' generateReleaseFeatureMetadata: task ':app:generateReleaseFeatureMetadata' generateReleaseFeatureTransitiveDeps: task ':app:generateReleaseFeatureTransitiveDeps' generateReleaseResValues: task ':app:generateReleaseResValues' generateReleaseResources: task ':app:generateReleaseResources' generateReleaseSources: task ':app:generateReleaseSources' generateReleaseUnitTestAssets: task ':app:generateReleaseUnitTestAssets' generateReleaseUnitTestResources: task ':app:generateReleaseUnitTestResources' generateReleaseUnitTestSources: task ':app:generateReleaseUnitTestSources' gradle: build 'android' group: android identityPath: :app inheritedScope: org.gradle.api.internal.ExtensibleDynamicObject$InheritedDynamicObject@7772fa44 installDebug: task ':app:installDebug' installDebugAndroidTest: task ':app:installDebugAndroidTest' installProfile: task ':app:installProfile' installRelease: task ':app:installRelease' java: org.gradle.api.plugins.internal.DefaultJavaPluginExtension_Decorated@71099162 javaPreCompileDebug: task ':app:javaPreCompileDebug' javaPreCompileDebugAndroidTest: task ':app:javaPreCompileDebugAndroidTest' javaPreCompileDebugUnitTest: task ':app:javaPreCompileDebugUnitTest' javaPreCompileProfile: task ':app:javaPreCompileProfile' javaPreCompileProfileUnitTest: task ':app:javaPreCompileProfileUnitTest' javaPreCompileRelease: task ':app:javaPreCompileRelease' javaPreCompileReleaseUnitTest: task ':app:javaPreCompileReleaseUnitTest' kotlin: org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension_Decorated@6ff6f494 kotlin_version: 1.2.71 layout: org.gradle.api.internal.file.DefaultProjectLayout@1075c57e libsDir: D:\AndroidStudioProjects\emoji_test_so\build\app\libs libsDirName: libs lint: task ':app:lint' lintDebug: task ':app:lintDebug' lintFix: task ':app:lintFix' lintProfile: task ':app:lintProfile' lintRelease: task ':app:lintRelease' lintVitalRelease: task ':app:lintVitalRelease' listenerBuildOperationDecorator: org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator@7035bdee logger: org.gradle.internal.logging.slf4j.OutputEventListenerBackedLogger@7484dc47 logging: org.gradle.internal.logging.services.DefaultLoggingManager@4d8aa00b mainApkListPersistenceDebug: task ':app:mainApkListPersistenceDebug' mainApkListPersistenceDebugAndroidTest: task ':app:mainApkListPersistenceDebugAndroidTest' mainApkListPersistenceProfile: task ':app:mainApkListPersistenceProfile' mainApkListPersistenceRelease: task ':app:mainApkListPersistenceRelease' makeApkFromBundleForDebug: task ':app:makeApkFromBundleForDebug' makeApkFromBundleForProfile: task ':app:makeApkFromBundleForProfile' makeApkFromBundleForRelease: task ':app:makeApkFromBundleForRelease' mergeDebugAndroidTestAssets: task ':app:mergeDebugAndroidTestAssets' mergeDebugAndroidTestJniLibFolders: task ':app:mergeDebugAndroidTestJniLibFolders' mergeDebugAndroidTestResources: task ':app:mergeDebugAndroidTestResources' mergeDebugAndroidTestShaders: task ':app:mergeDebugAndroidTestShaders' mergeDebugAssets: task ':app:mergeDebugAssets' mergeDebugJniLibFolders: task ':app:mergeDebugJniLibFolders' mergeDebugResources: task ':app:mergeDebugResources' mergeDebugShaders: task ':app:mergeDebugShaders' mergeProfileAssets: task ':app:mergeProfileAssets' mergeProfileJniLibFolders: task ':app:mergeProfileJniLibFolders' mergeProfileResources: task ':app:mergeProfileResources' mergeProfileShaders: task ':app:mergeProfileShaders' mergeReleaseAssets: task ':app:mergeReleaseAssets' mergeReleaseJniLibFolders: task ':app:mergeReleaseJniLibFolders' mergeReleaseResources: task ':app:mergeReleaseResources' mergeReleaseShaders: task ':app:mergeReleaseShaders' modelRegistry: org.gradle.model.internal.registry.DefaultModelRegistry@1580bf7a modelSchemaStore: org.gradle.model.internal.manage.schema.extract.DefaultModelSchemaStore@3bbdf1c1 module: org.gradle.api.internal.artifacts.ProjectBackedModule@f2c6ceb name: app normalization: org.gradle.normalization.internal.DefaultInputNormalizationHandler_Decorated@2b60c681 objects: org.gradle.api.internal.model.DefaultObjectFactory@76e7d4ce org.gradle.jvmargs: -Xmx1536M packLibsflutterBuildDebug: task ':app:packLibsflutterBuildDebug' packLibsflutterBuildProfile: task ':app:packLibsflutterBuildProfile' packLibsflutterBuildRelease: task ':app:packLibsflutterBuildRelease' packageAppClassesDebug: task ':app:packageAppClassesDebug' packageAppClassesDebugAndroidTest: task ':app:packageAppClassesDebugAndroidTest' packageAppClassesDebugUnitTest: task ':app:packageAppClassesDebugUnitTest' packageAppClassesProfile: task ':app:packageAppClassesProfile' packageAppClassesProfileUnitTest: task ':app:packageAppClassesProfileUnitTest' packageAppClassesRelease: task ':app:packageAppClassesRelease' packageAppClassesReleaseUnitTest: task ':app:packageAppClassesReleaseUnitTest' packageDebug: task ':app:packageDebug' packageDebugAndroidTest: task ':app:packageDebugAndroidTest' packageDebugBundle: task ':app:packageDebugBundle' packageDebugUniversalApk: task ':app:packageDebugUniversalApk' packageProfile: task ':app:packageProfile' packageProfileBundle: task ':app:packageProfileBundle' packageProfileUniversalApk: task ':app:packageProfileUniversalApk' packageRelease: task ':app:packageRelease' packageReleaseBundle: task ':app:packageReleaseBundle' packageReleaseUniversalApk: task ':app:packageReleaseUniversalApk' parent: root project 'android' parentIdentifier: root project 'android' path: :app pluginManager: org.gradle.api.internal.plugins.DefaultPluginManager_Decorated@6ef5a8e1 plugins: [org.gradle.api.plugins.HelpTasksPlugin@7e1ea12a, com.android.build.gradle.api.AndroidBasePlugin@536734a6, org.gradle.language.base.plugins.LifecycleBasePlugin@1b6edba0, org.gradle.api.plugins.BasePlugin@589fca8c, org.gradle.api.plugins.ReportingBasePlugin@53032744, org.gradle.api.plugins.JavaBasePlugin@39abfb86, com.android.build.gradle.AppPlugin@547584c8, org.jetbrains.kotlin.gradle.plugin.KotlinAndroidPluginWrapper@7218ff60, FlutterPlugin@38ebcf60] preBuild: task ':app:preBuild' preDebugAndroidTestBuild: task ':app:preDebugAndroidTestBuild' preDebugBuild: task ':app:preDebugBuild' preDebugUnitTestBuild: task ':app:preDebugUnitTestBuild' preProfileBuild: task ':app:preProfileBuild' preProfileUnitTestBuild: task ':app:preProfileUnitTestBuild' preReleaseBuild: task ':app:preReleaseBuild' preReleaseUnitTestBuild: task ':app:preReleaseUnitTestBuild' prepareLintJar: task ':app:prepareLintJar' processDebugAndroidTestJavaRes: task ':app:processDebugAndroidTestJavaRes' processDebugAndroidTestManifest: task ':app:processDebugAndroidTestManifest' processDebugAndroidTestResources: task ':app:processDebugAndroidTestResources' processDebugJavaRes: task ':app:processDebugJavaRes' processDebugManifest: task ':app:processDebugManifest' processDebugResources: task ':app:processDebugResources' processDebugUnitTestJavaRes: task ':app:processDebugUnitTestJavaRes' processOperations: org.gradle.api.internal.file.DefaultFileOperations@5abb98d0 processProfileJavaRes: task ':app:processProfileJavaRes' processProfileManifest: task ':app:processProfileManifest' processProfileResources: task ':app:processProfileResources' processProfileUnitTestJavaRes: task ':app:processProfileUnitTestJavaRes' processReleaseJavaRes: task ':app:processReleaseJavaRes' processReleaseManifest: task ':app:processReleaseManifest' processReleaseResources: task ':app:processReleaseResources' processReleaseUnitTestJavaRes: task ':app:processReleaseUnitTestJavaRes' project: project ':app' projectConfigurator: org.gradle.api.internal.project.BuildOperationCrossProjectConfigurator@5e7a6430 projectDir: D:\AndroidStudioProjects\emoji_test_so\android\app projectEvaluationBroadcaster: ProjectEvaluationListener broadcast projectEvaluator: org.gradle.configuration.project.LifecycleProjectEvaluator@2651f8f3 projectPath: :app projectRegistry: org.gradle.api.internal.project.DefaultProjectRegistry@1307e0a6 properties: {...} providers: org.gradle.api.internal.provider.DefaultProviderFactory@69cbdbf5 reportBuildArtifactsDebug: task ':app:reportBuildArtifactsDebug' reportBuildArtifactsProfile: task ':app:reportBuildArtifactsProfile' reportBuildArtifactsRelease: task ':app:reportBuildArtifactsRelease' reportSourceSetTransformAndroidTest: task ':app:reportSourceSetTransformAndroidTest' reportSourceSetTransformAndroidTestDebug: task ':app:reportSourceSetTransformAndroidTestDebug' reportSourceSetTransformDebug: task ':app:reportSourceSetTransformDebug' reportSourceSetTransformMain: task ':app:reportSourceSetTransformMain' reportSourceSetTransformProfile: task ':app:reportSourceSetTransformProfile' reportSourceSetTransformRelease: task ':app:reportSourceSetTransformRelease' reportSourceSetTransformTest: task ':app:reportSourceSetTransformTest' reportSourceSetTransformTestDebug: task ':app:reportSourceSetTransformTestDebug' reportSourceSetTransformTestProfile: task ':app:reportSourceSetTransformTestProfile' reportSourceSetTransformTestRelease: task ':app:reportSourceSetTransformTestRelease' reporting: org.gradle.api.reporting.ReportingExtension_Decorated@7571ad69 reportsDir: D:\AndroidStudioProjects\emoji_test_so\build\app\reports repositories: repository container resolveConfigAttr: task ':app:resolveConfigAttr' resourceLoader: org.gradle.internal.resource.transfer.DefaultUriTextResourceLoader@78a71c13 resources: org.gradle.api.internal.resources.DefaultResourceHandler@5198f594 rootDir: D:\AndroidStudioProjects\emoji_test_so\android rootProject: root project 'android' script: false scriptHandlerFactory: org.gradle.api.internal.initialization.DefaultScriptHandlerFactory@7d362dd1 scriptPluginFactory: org.gradle.configuration.ScriptPluginFactorySelector@5d4cdfb serviceRegistryFactory: org.gradle.internal.service.scopes.ProjectScopeServices$4@45530ed6 services: ProjectScopeServices signingReport: task ':app:signingReport' sourceCompatibility: 1.8 sourceSets: SourceSet container splitsDiscoveryTaskDebug: task ':app:splitsDiscoveryTaskDebug' splitsDiscoveryTaskProfile: task ':app:splitsDiscoveryTaskProfile' splitsDiscoveryTaskRelease: task ':app:splitsDiscoveryTaskRelease' standardOutputCapture: org.gradle.internal.logging.services.DefaultLoggingManager@4d8aa00b state: project state 'EXECUTED' status: integration subprojects: [] targetCompatibility: 1.8 tasks: task set test: task ':app:test' testDebugUnitTest: task ':app:testDebugUnitTest' testProfileUnitTest: task ':app:testProfileUnitTest' testReleaseUnitTest: task ':app:testReleaseUnitTest' testReportDir: D:\AndroidStudioProjects\emoji_test_so\build\app\reports\tests testReportDirName: tests testResultsDir: D:\AndroidStudioProjects\emoji_test_so\build\app\test-results testResultsDirName: test-results transformClassesWithDexBuilderForDebug: task ':app:transformClassesWithDexBuilderForDebug' transformClassesWithDexBuilderForDebugAndroidTest: task ':app:transformClassesWithDexBuilderForDebugAndroidTest' transformClassesWithDexBuilderForProfile: task ':app:transformClassesWithDexBuilderForProfile' transformClassesWithDexBuilderForRelease: task ':app:transformClassesWithDexBuilderForRelease' transformDexArchiveWithDexMergerForDebug: task ':app:transformDexArchiveWithDexMergerForDebug' transformDexArchiveWithDexMergerForDebugAndroidTest: task ':app:transformDexArchiveWithDexMergerForDebugAndroidTest' transformDexArchiveWithDexMergerForProfile: task ':app:transformDexArchiveWithDexMergerForProfile' transformDexArchiveWithDexMergerForRelease: task ':app:transformDexArchiveWithDexMergerForRelease' transformDexArchiveWithExternalLibsDexMergerForDebug: task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug' transformDexArchiveWithExternalLibsDexMergerForDebugAndroidTest: task ':app:transformDexArchiveWithExternalLibsDexMergerForDebugAndroidTest' transformDexArchiveWithExternalLibsDexMergerForProfile: task ':app:transformDexArchiveWithExternalLibsDexMergerForProfile' transformDexArchiveWithExternalLibsDexMergerForRelease: task ':app:transformDexArchiveWithExternalLibsDexMergerForRelease' transformNativeLibsWithMergeJniLibsForDebug: task ':app:transformNativeLibsWithMergeJniLibsForDebug' transformNativeLibsWithMergeJniLibsForDebugAndroidTest: task ':app:transformNativeLibsWithMergeJniLibsForDebugAndroidTest' transformNativeLibsWithMergeJniLibsForProfile: task ':app:transformNativeLibsWithMergeJniLibsForProfile' transformNativeLibsWithMergeJniLibsForRelease: task ':app:transformNativeLibsWithMergeJniLibsForRelease' transformResourcesWithMergeJavaResForDebug: task ':app:transformResourcesWithMergeJavaResForDebug' transformResourcesWithMergeJavaResForDebugAndroidTest: task ':app:transformResourcesWithMergeJavaResForDebugAndroidTest' transformResourcesWithMergeJavaResForDebugUnitTest: task ':app:transformResourcesWithMergeJavaResForDebugUnitTest' transformResourcesWithMergeJavaResForProfile: task ':app:transformResourcesWithMergeJavaResForProfile' transformResourcesWithMergeJavaResForProfileUnitTest: task ':app:transformResourcesWithMergeJavaResForProfileUnitTest' transformResourcesWithMergeJavaResForRelease: task ':app:transformResourcesWithMergeJavaResForRelease' transformResourcesWithMergeJavaResForReleaseUnitTest: task ':app:transformResourcesWithMergeJavaResForReleaseUnitTest' uninstallAll: task ':app:uninstallAll' uninstallDebug: task ':app:uninstallDebug' uninstallDebugAndroidTest: task ':app:uninstallDebugAndroidTest' uninstallProfile: task ':app:uninstallProfile' uninstallRelease: task ':app:uninstallRelease' validateSigningDebug: task ':app:validateSigningDebug' validateSigningDebugAndroidTest: task ':app:validateSigningDebugAndroidTest' validateSigningProfile: task ':app:validateSigningProfile' validateSigningRelease: task ':app:validateSigningRelease' version: unspecified writeDebugApplicationId: task ':app:writeDebugApplicationId' writeProfileApplicationId: task ':app:writeProfileApplicationId' writeReleaseApplicationId: task ':app:writeReleaseApplicationId' 1 actionable task: 1 executed [ +12 ms] executing: [D:\AndroidStudioProjects\emoji_test_so\android\] D:\AndroidStudioProjects\emoji_test_so\android\gradlew.bat app:tasks --all --console=auto [ +952 ms] > Task :app:tasks ------------------------------------------------------------ All tasks runnable from project :app ------------------------------------------------------------ Android tasks ------------- androidDependencies - Displays the Android dependencies of the project. signingReport - Displays the signing info for each variant. sourceSets - Prints out all the source sets defined in this project. Build tasks ----------- assemble - Assembles all variants of all applications and secondary packages. assembleAndroidTest - Assembles all the Test applications. assembleDebug - Assembles all Debug builds. assembleProfile - Assembles all Profile builds. assembleRelease - Assembles all Release builds. build - Assembles and tests this project. buildDependents - Assembles and tests this project and all projects that depend on it. buildNeeded - Assembles and tests this project and all projects it depends on. bundleDebug - Creates all Debug bundles. bundleProfile - Creates all Profile bundles. bundleRelease - Creates all Release bundles. clean - Deletes the build directory. cleanBuildCache - Deletes the build cache directory. compileDebugAndroidTestSources compileDebugSources compileDebugUnitTestSources compileProfileSources compileProfileUnitTestSources compileReleaseSources compileReleaseUnitTestSources Cleanup tasks ------------- lintFix - Runs lint on all variants and applies any safe suggestions to the source code. Help tasks ---------- buildEnvironment - Displays all buildscript dependencies declared in project ':app'. components - Displays the components produced by project ':app'. [incubating] dependencies - Displays all dependencies declared in project ':app'. dependencyInsight - Displays the insight into a specific dependency in project ':app'. dependentComponents - Displays the dependent components of components in project ':app'. [incubating] help - Displays a help message. model - Displays the configuration model of project ':app'. [incubating] projects - Displays the sub-projects of project ':app'. properties - Displays the properties of project ':app'. tasks - Displays the tasks runnable from project ':app'. Install tasks ------------- installDebug - Installs the Debug build. installDebugAndroidTest - Installs the android (on device) tests for the Debug build. installProfile - Installs the Profile build. installRelease - Installs the Release build. uninstallAll - Uninstall all applications. uninstallDebug - Uninstalls the Debug build. uninstallDebugAndroidTest - Uninstalls the android (on device) tests for the Debug build. uninstallProfile - Uninstalls the Profile build. uninstallRelease - Uninstalls the Release build. Verification tasks ------------------ check - Runs all checks. connectedAndroidTest - Installs and runs instrumentation tests for all flavors on connected devices. connectedCheck - Runs all device checks on currently connected devices. connectedDebugAndroidTest - Installs and runs the tests for debug on connected devices. deviceAndroidTest - Installs and runs instrumentation tests using all Device Providers. deviceCheck - Runs all device checks using Device Providers and Test Servers. lint - Runs lint on all variants. lintDebug - Runs lint on the Debug build. lintProfile - Runs lint on the Profile build. lintRelease - Runs lint on the Release build. lintVitalRelease - Runs lint on just the fatal issues in the release build. test - Run unit tests for all variants. testDebugUnitTest - Run unit tests for the debug build. testProfileUnitTest - Run unit tests for the profile build. testReleaseUnitTest - Run unit tests for the release build. Other tasks ----------- assembleDebugAndroidTest assembleDebugUnitTest assembleProfileUnitTest assembleReleaseUnitTest buildDebugPreBundle buildProfilePreBundle buildReleasePreBundle bundle bundleDebugAndroidTestResources bundleDebugResources bundleProfileResources bundleReleaseResources checkDebugAndroidTestClasspath checkDebugClasspath checkDebugLibraries checkDebugManifest checkProfileClasspath checkProfileLibraries checkProfileManifest checkReleaseClasspath checkReleaseLibraries checkReleaseManifest compileDebugAidl compileDebugAndroidTestAidl compileDebugAndroidTestJavaWithJavac compileDebugAndroidTestKotlin - Compiles the debugAndroidTest kotlin. compileDebugAndroidTestNdk compileDebugAndroidTestRenderscript compileDebugAndroidTestShaders compileDebugJavaWithJavac compileDebugKotlin - Compiles the debug kotlin. compileDebugNdk compileDebugRenderscript compileDebugShaders compileDebugUnitTestJavaWithJavac compileDebugUnitTestKotlin - Compiles the debugUnitTest kotlin. compileFlutterBuildDebugArm compileFlutterBuildDebugArm64 compileFlutterBuildProfileArm compileFlutterBuildProfileArm64 compileFlutterBuildReleaseArm compileFlutterBuildReleaseArm64 compileLint compileProfileAidl compileProfileJavaWithJavac compileProfileKotlin - Compiles the profile kotlin. compileProfileNdk compileProfileRenderscript compileProfileShaders compileProfileUnitTestJavaWithJavac compileProfileUnitTestKotlin - Compiles the profileUnitTest kotlin. compileReleaseAidl compileReleaseJavaWithJavac compileReleaseKotlin - Compiles the release kotlin. compileReleaseNdk compileReleaseRenderscript compileReleaseShaders compileReleaseUnitTestJavaWithJavac compileReleaseUnitTestKotlin - Compiles the releaseUnitTest kotlin. consumeConfigAttr copyFlutterAssetsDebug copyFlutterAssetsProfile copyFlutterAssetsRelease createDebugCompatibleScreenManifests createMockableJar createProfileCompatibleScreenManifests createReleaseCompatibleScreenManifests extractApksForDebug extractApksForProfile extractApksForRelease extractProguardFiles generateDebugAndroidTestAssets generateDebugAndroidTestBuildConfig generateDebugAndroidTestResources generateDebugAndroidTestResValues generateDebugAndroidTestSources generateDebugAssets generateDebugBuildConfig generateDebugFeatureMetadata generateDebugFeatureTransitiveDeps generateDebugResources generateDebugResValues generateDebugSources generateDebugUnitTestAssets generateDebugUnitTestResources generateDebugUnitTestSources generateProfileAssets generateProfileBuildConfig generateProfileFeatureMetadata generateProfileFeatureTransitiveDeps generateProfileResources generateProfileResValues generateProfileSources generateProfileUnitTestAssets generateProfileUnitTestResources generateProfileUnitTestSources generateReleaseAssets generateReleaseBuildConfig generateReleaseFeatureMetadata generateReleaseFeatureTransitiveDeps generateReleaseResources generateReleaseResValues generateReleaseSources generateReleaseUnitTestAssets generateReleaseUnitTestResources generateReleaseUnitTestSources javaPreCompileDebug javaPreCompileDebugAndroidTest javaPreCompileDebugUnitTest javaPreCompileProfile javaPreCompileProfileUnitTest javaPreCompileRelease javaPreCompileReleaseUnitTest mainApkListPersistenceDebug mainApkListPersistenceDebugAndroidTest mainApkListPersistenceProfile mainApkListPersistenceRelease makeApkFromBundleForDebug makeApkFromBundleForProfile makeApkFromBundleForRelease mergeDebugAndroidTestAssets mergeDebugAndroidTestJniLibFolders mergeDebugAndroidTestResources mergeDebugAndroidTestShaders mergeDebugAssets mergeDebugJniLibFolders mergeDebugResources mergeDebugShaders mergeProfileAssets mergeProfileJniLibFolders mergeProfileResources mergeProfileShaders mergeReleaseAssets mergeReleaseJniLibFolders mergeReleaseResources mergeReleaseShaders packageAppClassesDebug packageAppClassesDebugAndroidTest packageAppClassesDebugUnitTest packageAppClassesProfile packageAppClassesProfileUnitTest packageAppClassesRelease packageAppClassesReleaseUnitTest packageDebug packageDebugAndroidTest packageDebugBundle packageDebugUniversalApk packageProfile packageProfileBundle packageProfileUniversalApk packageRelease packageReleaseBundle packageReleaseUniversalApk packLibsflutterBuildDebug packLibsflutterBuildProfile packLibsflutterBuildRelease preBuild preDebugAndroidTestBuild preDebugBuild preDebugUnitTestBuild prepareLintJar preProfileBuild preProfileUnitTestBuild preReleaseBuild preReleaseUnitTestBuild processDebugAndroidTestJavaRes processDebugAndroidTestManifest processDebugAndroidTestResources processDebugJavaRes processDebugManifest processDebugResources processDebugUnitTestJavaRes processProfileJavaRes processProfileManifest processProfileResources processProfileUnitTestJavaRes processReleaseJavaRes processReleaseManifest processReleaseResources processReleaseUnitTestJavaRes reportBuildArtifactsDebug reportBuildArtifactsProfile reportBuildArtifactsRelease reportSourceSetTransformAndroidTest reportSourceSetTransformAndroidTestDebug reportSourceSetTransformDebug reportSourceSetTransformMain reportSourceSetTransformProfile reportSourceSetTransformRelease reportSourceSetTransformTest reportSourceSetTransformTestDebug reportSourceSetTransformTestProfile reportSourceSetTransformTestRelease resolveConfigAttr splitsDiscoveryTaskDebug splitsDiscoveryTaskProfile splitsDiscoveryTaskRelease transformClassesWithDexBuilderForDebug transformClassesWithDexBuilderForDebugAndroidTest transformClassesWithDexBuilderForProfile transformClassesWithDexBuilderForRelease transformDexArchiveWithDexMergerForDebug transformDexArchiveWithDexMergerForDebugAndroidTest transformDexArchiveWithDexMergerForProfile transformDexArchiveWithDexMergerForRelease transformDexArchiveWithExternalLibsDexMergerForDebug transformDexArchiveWithExternalLibsDexMergerForDebugAndroidTest transformDexArchiveWithExternalLibsDexMergerForProfile transformDexArchiveWithExternalLibsDexMergerForRelease transformNativeLibsWithMergeJniLibsForDebug transformNativeLibsWithMergeJniLibsForDebugAndroidTest transformNativeLibsWithMergeJniLibsForProfile transformNativeLibsWithMergeJniLibsForRelease transformResourcesWithMergeJavaResForDebug transformResourcesWithMergeJavaResForDebugAndroidTest transformResourcesWithMergeJavaResForDebugUnitTest transformResourcesWithMergeJavaResForProfile transformResourcesWithMergeJavaResForProfileUnitTest transformResourcesWithMergeJavaResForRelease transformResourcesWithMergeJavaResForReleaseUnitTest validateSigningDebug validateSigningDebugAndroidTest validateSigningProfile validateSigningRelease writeDebugApplicationId writeProfileApplicationId writeReleaseApplicationId Rules ----- Pattern: cleanFlutter analyzer & doctor