3.5.0
Changelog
3.5.0
✨ Features
-
[Feature][Harmony] TemplateBundle support async decoding (28ed738) @pilipala195
On the Harmony platform, ets code runs on the main thread by default.
TemplateBundle.fromTemplatecan block the main thread and causing app_freeze.
This MR introduces theTemplateBundle.fromTemplateAsyncinterface, which allows callers to wait asynchronously using aPromise, thus avoiding blocking other operations on the main thread. -
[Feature][Android] LynxModuleAndroid Authentication (2e32ba6) @OverWatch-Winder
Use LynxMethod verification interface to verify whether the LynxMethod is allowed to be called.
-
[Feature][DevTool] Support getBoxModel and getNodeForLocation for ios clay (c4cd7c1) @yuweizheng
Support getBoxModel and getNodeForLocation for ios clay
🐛 Bug Fixes
-
[BugFix] add
auto-sizefeature in embeddedMode. (b5c2832) @nhspriteadd
auto-sizefeature in embeddedMode.- create shadowNode for imageElement in case auto-size is true;
- triggering requestLayout in justShadowNodeSize method, and mark element layoutNode as dirty;
- invoke LynxUILayoutTick with closure, and take the closure as the trigger layout method in EmbeddedMode.
(cherry picked from commit 1abce1e0c5847f77a56494d6cefa80400c7c75e9)
-
[BugFix][Event] Fix the problem of catch interception failure. (da53e66) @rAY-ooo
description: When a catch-type event listener is set on the target node, the return result should be checked to prevent subsequent event propagation.
-
[BugFix] Report error when evaluateJavaScriptBytecode fails (5f0306b) @lybvinci
Currently, we only log it, but it should be reported.
(cherry picked from commit 04c4d4558340817eae6b6a54429e9a8d3bf8714e)
-
[BugFix] Add preload event reporting for iOS (6139638) @lybvinci
Used to assist in locating iOS JSC crash issues.
-
[BugFix][Event] Provides a client interface for tapSlop on Android. (cbc3c95) @rAY-ooo
description: tapSlop is a front-end switch with a default value of 50px. A client-side interface is provided to set the value of tapSlop, but when both the client and front-end are set, the front-end setting takes precedence.
-
[BugFix][Android][EmbeddedMode] Fix inline view not take effect. (f6145c6) @Randycn
Support inline view on Android when enable embedded mode.
- Propagate inline view sign and impl_id via text props
- Measure inline children recursively and pass metrics to Java
- Align inline views by mapping Java results back to children
-
[BugFix][Harmony] Fix the crash caused by multi-threaded reading and writing of font face. (be6916b) @Randycn
Add read-write locks to
font_faces_. -
[BugFix][iOS][image] LynxUIImage preview hash supports default metaData (55061b8) @liubb0516
LynxUIImage
placeholder-hash-configpreview type hash supports defaultmetaDatam-6788453885
-
[BugFix] Fix compile error in i18nService (57d4cb5) @ykai55
Add the LynxServiceProtocol.h to the Lynx component, which just includes LynxServiceProtocol.h in the LynxServiceAPI component. This change avoids the breaking change of service implementation.
(cherry picked from commit 70007c52ad916d0f37842f2d90589974756eb575)
-
[BugFix] Fix related issues when embeddedMode with jsruntime on (c998236) @nhsprite
- considering the globalProps passed in LynxViewGroup for the embeddedmode rendering
- AirMode is
AIR_MODE_FIBERin embeddedMode, but it's still needed to send onJSPrepared event if logic executor is not set. - introducing LynxViewGroup into EmbedderTestVC, and adapts to the issue that lynxConfig is changed while LynxTemplateRender initialize process.
- fix the crash issues that embeddedmode set but jsruntime is not init.
- merge moduleWarpper with lynxViewGroup & lynxViewBuilder
(cherry picked from commit 6626fc02910f8066f6e471846908c9cbc185bd1f)
-
[BugFix][iOS][EmbeddedMode] Fix line-height not take effect. (57f9df8) @Randycn
1.Fix line-height not take effect.
2.Fix vertical-align not take effect. -
[BugFix][LynxRecorder]Fix crash issues during recording and replay (d0d0c7c) @RovicnowYoyi
- baseInspectorOwner maybe not ready yet.
- add null check for piper_val in ParsePiperValueToJsonValue to prevent crash when parsing JavaScript object properties that may be null, undefined, or when getProperty() returns nullptr.
(cherry picked from commit 00e53c54560d0dbbde8524673b1702d895f4d5da)
-
[BugFix] add trailKey for quickjs thread checker (f79538c) @nhsprite
add TrailKey for quickjs thread checker.
-
[BugFix][Harmony] Use postTask instead of postSyncTask to avoid stuck. (e549be7) @Tamerlx
This MR is to use postTask instead of postSyncTask to avoid stuck.
issue:m-6787511750
(cherry picked from commit e34df2679054d408a5bb2be207a319a1ff107db7)
-
[BugFix][LayoutInElement] fix the text decoration style issue (5a48b48) @linxs0211
support text decoration for LayoutInElement mode
-
[BugFix] merge moduleWarpper with lynxViewGroup & lynxViewBuilder (1567104) @nhsprite
- merge moduleWarpper with lynxViewGroup & lynxViewBuilder
- add EmbedderModule for setData & getData from client.
- DLynxBridge should not be registered in EmbeddedMode.
-
[BugFix] Guard removal of layout node by checking parent and using actual parent (2ea58bb) @zhongyr
In element-mode layout, removing a child's layout node assumed this
element was its parent, which could be false and cause incorrect removals
or crashes. Now we verify the child has a layout node and a parent, then
remove it from its actual parent instead of unconditionally using
this->sl_node_. This prevents invalid parent-child operations and
stabilizes node removal paths.- Add null and parent checks before removal
- Remove child via child->slnode()->parent()->RemoveChild(child->slnode())
- Leave a FIXME to investigate mismatched parent relationships
-
[BugFix] prefers lynxGroup in LynxViewBuilder (e86ca68) @nhsprite
prefers lynxGroup in LynxViewBuilder so that lynxView in the same LynxViewGroup may still
has seperate globalThis in js environment. -
[BugFix][Event] Fix a gesture conflict issue when Lynx cards overlapped. (936ece6) @rAY-ooo
description:
Previously, becauseOH_ArkUI_GestureEvent_GetNodewas not supported, setting aHitTestBehaviorof typeTransparentwould reset theevent_dispatcherto that of the bottom-level Lynx card when multiple Lynx cards overlapped. This caused gesture comparison to fail, resulting in upper-level Lynx cards failing to respond to clicks.Therefore, we set the
EventDispatchertouser_dataon the gesture-bound node, and then retrieved theEventDispatcherfrom the node in the custom gesture determination interface to ensure consistency. -
[BugFix][Memory] Unify MemoryReportTimer to use LynxEventReporter thread. (6803306) @Tamerlx
Refactors
LynxMemoryReportTimeron both iOS and Android to use the sharedLynxEventReporter.delayRunOnReportThread.This change replaces platform-specific timers (
NSTimer,ScheduledExecutorService) with a single, centralized scheduling mechanism.This simplifies the code, unifies threading for all reporting tasks, and improves resource management by eliminating redundant timers and threads.
-
[BugFix] Making sure that TemplateData is released properly (f626001) @nhsprite
It's needed to make sure the templateData is released with the engine thread. In this patch
an asscociated lynxContext is bind to templateData we will post the recycle runnable to
engine thread if lynxContext is valid.thus that we have no need to keep the updateDataList at templateRender as it may cause memory issues
when lynxView is kept alive the whole app lifecycle, the updateDataList will be larger and larger.anding a trail key "enable_data_list_fix" to control the fix with TrailService
NoLanding: release/3.4
-
[BugFix] Fixed the issue where lynxviewclient could not receive InitLynxviewEntry (dbdc080) @Tamerlx
This MR is to fixed the issue where lynxviewclient could not receive InitLynxviewEntry.
Delay the sending of the init event to solve the problem of lynxviewclient registration being later than the event sending. The fix is to delay the init event until after main thread engine and background thread engine are ready.
-
[BugFix][Harmony] Fix shadow node UAF in FontFaceManager (fc0e84b) @zhongyr
- Replace CheckNodeValid() with FindShadowNodeBySign() to properly validate node existence
- Change loading_shadow_nodes_ from storing ShadowNode* to just storing sign
- Use base::InlineLinearFlatSet<int, 4> instead of unordered_map for better memory efficiency
- Fix potential use-after-free by ensuring node validity before marking dirty
This prevents crashes when shadow nodes are deleted while font loading is in progress.
-
[BugFix][Image] revert enableImageRequestOptimize settings as false (6f17691) @linxs0211
set enableImageRequestOptimize as false by default
-
[BugFix] protect for NPE in getModuleWrapper (94dafab) @nhsprite
protect for NPE in getModuleWrapper, in case that config or moduleFactoryPtr is nil.
-
[BugFix][iOS][EmbeddedMode] Apply NSParagraphStyle to entire attributed string to fix line-height. (9d8ff86) @Randycn
When there is inline text, the line-height on the root text may be overridden by child node properties, causing the line-height to become ineffective.
Apply NSParagraphStyle to entire attributed string to prevent line-height from not working.
-
[BugFix][Event] Fix the issue where exposure was still triggered even when the Lynx card was in a hidden state. (995ed36) @rAY-ooo
description: In some scenarios, a Lynx card may be in the view tree but in a hidden state. In this case, Lynx's exposure detection should not be performed, otherwise it will produce unexpected exposure.
-
[BugFix][Event] Fix the issue where exposure was still triggered even when the Lynx card was in a hidden state. (5b3cbc9) @rAY-ooo
description: In some scenarios, a Lynx card may be in the view tree but in a hidden state. In this case, Lynx's exposure detection should not be performed, otherwise it will produce unexpected exposure.
-
[BugFix] Fix Lynx image getUrl crash (8e56eba) @liubb0516
Added null checks for
mCurPlaceholderRequestto preventgetUrlcrashes.m-6791533583
-
[BugFix] Route font-face definitions to platform layout mode and fix map initialization (e80d417) @jianliang00
When layout-in-element mode is enabled, font-face rules were not being
propagated to the platform layout context, causing missing custom fonts.
This change directs SetFontFaces to platform_layout_context_ when the
mode is on, and returns early to avoid duplicate routing.Additionally, fix font-face map initialization in binary readers by
binding to the returned container by reference. Using a value copy could
lead to writing into a temporary and losing decoded entries.Changes:
- ElementManager::SetFontFaces now forwards to platform_layout_context_
under element-mode and falls back to delegate otherwise. - LynxBinaryReader and TemplateBinaryReader initialize font_faces with a
reference (auto&) to ensure decoded data is stored in the bundle.
- ElementManager::SetFontFaces now forwards to platform_layout_context_
-
[BugFix][LynxRecorder]Fix that the result of findViewById maybe null (06cb253) @RovicnowYoyi
Add judgement to prevent NullPointerException crash.
-
[BugFix]Fix NSInvalidArgumentException cause by missing parameter (99b48b4) @RovicnowYoyi
Add back the missing parameter to fix the crash.
-
[BugFix] Make Tasm Check with bytebuffer as template input (bf09e03) @nhsprite
ByteBuffer is a new type that lynx supported to optimze the load & parse period. Supporting
Security Check with bytebuffer in this commit, we have no need to copy byte[] intostd::vector
instead we can initialize aLynxServiceSignBlockBinaryReaderwith the pointer & capacity in bytebuffer now. -
[BugFix][Crash] fix the unthreadsafe init issue (9c56ff9) @linxs0211
fix crash when getLynxTrailExtensionService
-
[BugFix][RadonFiber] when page classes change under Fiber-based Radon diff, mark children dirty before diffing to ensure styles resolve correctly. (f21f7d3) @DragonDragonDDD
Refactor MarkChildStyleDirtyRecursively to use a clearer mark_whole_tree flag and adjust propagation semantics:
- Stop marking at RadonComponent boundaries unless mark_whole_tree is true.
- Pass mark_whole_tree to FiberElement::MarkStyleDirty for accurate propagation.
- Update callers to propagate option.ShouldForceUpdate instead of using a root sentinel.
- Add unit test to ensure component boundaries block non-global marking.
-
[BugFix] Initialize LayoutProxy in JSRuntime Standalone (95ff21a) @ChrisChan0668
Currently, LayoutProxy is only initialized in initPiper, which won't be tiggered in RuntimeStandalone. So we need to initialize LayoutProxy in attachPiper too.
-
[BugFix][Harmony] Propagate detailed error messages for lazy bundle fetch/verify failures (3f5158c) @pilipala195
Improve error handling across Harmony lazy bundle fetching and verification:
- Read error code from callback unconditionally and handle non-success
paths by propagating the provider’s error message via response.err_msg. - Replace hardcoded "verify template bundle failed" with the actual
error string returned from the fetch/verify layer. - Update LynxTemplateResourceFetcher to return a typed BusinessError
including both code and data (message). Populate specific errors for
invalid signature and missing binary. - Refine LynxSecurityService message for empty template to a clearer
verification failure string.
Previously, callers received generic messages and sometimes missed
context on verification or fetch failures. Now they get accurate error
codes and detailed messages to aid debugging and user feedback. - Read error code from callback unconditionally and handle non-success
-
[BugFix][iOS] Avoid mutating collection during enumeration in ForeachArray (ad18d07) @FrendyChen
ForeachArray now iterates over a copied NSArray instance instead of the
original backend_value_. The previous loop used backend_value_ for the
count while enumerating a copy, which risked inconsistencies if the
original array changed during iteration. Using [array count] ensures we
iterate safely over the snapshot. -
[BugFix] Do not create DefaultLogicExecutor by default. (d7b6711) @nhsprite
- Making logicExecutor must be set in LynxViewGroup, if logicExecutor not set, init LynxRuntime instead.
- Making DefaultLogicExecutor as no-param constructor, and it can be init when lynxViewGroup created.
NoLanding: release/3.5
-
[BugFix][Harmony][Font] Fix null pointer crash when calling GetTextInfo. (1d0daac) @Randycn
Null check is required before accessing
font_face_manager. -
[BugFix][Android] Make sure LayoutProxy is initialized in all branches. (41b27e8) @ChrisChan0668
Currently, LayoutProxy might be null in the certain branch, which will cause NPE. This commit make sure LayoutProxy is initialized in all branches.
-
[BugFix][Android] Fixed the issue that text layout was not cached. (9a8ba56) @Randycn
When an inline view is included in an inline-truncation node, if updateMeasure of the inline view is not triggered, it will cause the cached result of the parent text node not to be correctly triggered in the next layout cycle.
The
updateMeasuremethod of all inline views needs to be triggered.
🚀 Optimization
-
[Optimize][iOS][EmbeddedMode] refine LynxViewGroup (3f22ffc) @linxs0211
1.add onLynxEvent
2.refine LynxViewGroup -
[Optimize][Android] Embed keyframe manager in ViewInfo for better animation handling (c1673fd) @zhongyr
- Move KeyframeManager ownership from LynxUI to ViewInfo
- Update animation handling in updateView() method
- Clean up keyframe manager reference during detach
(cherry picked from commit eae6f76f4262c44e6e69d33eedbae9229fa39a85)
-
[Optimize][iOS][EmbeddedMode][Part2] add ParseTemplateData for value_impl_darwin (ee66bcb) @linxs0211
1.add ParseTemplateData for value_impl_darwin
2.fix UT issue -
[Optimize][Harmony] Support multi-ABI builds for Harmony (9549144) @rel-q
Updates the Harmony build script to generate binaries for both arm64-v8a and x86_64 architectures.
-
[Optimize][iOS][EmbeddedMode][Part3] introduce DefaultLogicExecutor (d3422db) @linxs0211
add DefaultLogicExecutor
-
[Optimize][iOS][Image] LynxUIImage supports fetch UIImage from container (1e70585) @liubb0516
Implement
fetchUIImageto support the migration of scenarios such as iOS mini app to LynxImageService.m-6782584583
-
[Optimize][Element]Export image, list, list-item and scroll-view typings (fc63270) @MoonfaceX
Add typings exports for common elements to improve type support in consuming projects
-
[Optimize][Harmony] Optimize image load failure logging (3fc61e5) @rel-q
Adds the node's src attribute to the error log for failed image loads to provide more debugging information.
(cherry picked from commit faaedad2274b201b8bbe6faa1b4f981e67e6a36d)
-
[Optimize][Harmony]Clear keyboardHeightChangeCallback when unmounting (6311377) @MoonfaceX
Prevent potential memory leaks by explicitly setting the callback to undefined when the component unmounts
-
[Optimize] using LynxViewGroup to optimize Image AutoSize (b6d5437) @nhsprite
image with autosize should trigger layout reflow when loadsuccess, which is performance cost.
Using lynxViewGroup to cache bitmapSize, so that image may accquires the bitmapSize before loadSuccess in
cache cases, making the measure inAutoSizeImagereturn the proper size immediately. -
[Optimize] Link async React lifecycle events using flowId (1c1a2ee) @KingAlen
Asynchronous component lifecycle events like
OnReactComponentCreatedandOnReactComponentRenderwere previously disconnected from their triggering sources in traces.
This change introduces aflowIdto connect these background events to their upstream calls, enabling a complete execution flow trace across threads. -
[Optimize][Harmony] Add windowStage storage link and update window handling (58cd821) @MoonfaceX
Add StorageLink for windowStage and modify window retrieval logic to use windowStage if available
(cherry picked from commit 28042d0723e26e10bf5a1ed24114d785991e8920)
🛠️ Infra
-
[Infra] Cache pnpm dependencies (03f498e) @coolkiid
Fix occasionally occurring network issue when installing pnpm dependencies.
other fix: set debugrouter deps attribute enable_lfs to false.
-
[Infra] Import some third party libraries and relative patch files. (80815e7) @zsy-jason
- Update the source of expat to flutter source, and add relative patch file;
- Import harfbuzz and gyp libraries, add relative patch files.
-
[Infra] Change the usage of the pip command (0d123bf) @deanjingshui
Change the usage of the pip command
[3.5.0-rc.0] - 2025-10-31
✨ Features
-
[Feature][iOS] Decoupling LynxService framework and Trail/Log service interface from Lynx framework (dfb1235) @ykai55
The frameworks like Lynx can now also use services without relying on
the Lynx component after this refactoring.(cherry picked from commit 81c91b151169609aee98f303c8ebb2afbf90c3d2)
-
[Feature] The LynxBase component uses ServiceAPI to manage Service implementations on the Android side. (f3ca22e) @yongjieTang
After the Service API was moved to a lower layer with independent dependency capabilities, in order to reduce maintenance costs and code redundancy, LynxBase now uses the Service API to manage Service injection and access.
(cherry picked from commit 5681e6fae467d95aba66d2e0e2894d418ecf9e42)
-
[Feature] LynxBase component uses ServiceAPI to manage Service implementations on the darwin side. (ab77a2c) @yongjieTang
After the Service API was moved to a lower layer with independent dependency capabilities, in order to reduce maintenance costs and code redundancy, LynxBase now uses the Service API to manage Service injection and access.
(cherry picked from commit ce7c94c5c996bbd747b2b0f8d72cf928a2835e55)
🐛 Bug Fixes
-
[BugFix][Event] Fix runWorklet not differ event and eventClosureListener (206fda5) @f0rdream
Currently, there're EventHandler and ClosureEventHandler to handle events, when they call
runWorklet, framework need to distingish these two, to wrap different object in it.(cherry picked from commit 45072d294f9d9bdd9ab7d3e249dab7df8f483d51)
-
[BugFix][Harmony] Refactor overflow clipping implementation in UIBase for Harmony platform (77ff43e) @rel-q
Updated
ApplyOverflowClipPathandApplyOverflowClipRectanglemethods to improve clip handling and overflow behavior(cherry picked from commit a1aa8a3e76ca3ede3cdb51a1328de2e6b0aef6c2)
-
[BugFix][Event] Modify the native-interaction-enabled validation logic. (2a9ee52) @rAY-ooo
description: Since HitTestMode.None only affects the node itself and cannot affect its child nodes, it is necessary to traverse the UI tree before touching so that native-interaction-enabled can affect its child nodes.
(cherry picked from commit 948823949dd849813e137e5b9c8cf04c63adf4e2)
-
[BugFix] fix embedded mode issues (1ab2c57) @nhsprite
Fix some embedded mode issues:
- in engine reuse cases, if data is not changed we need to make sure rebuildViewTree for each LynxView.
- in case lynxView is created without init, we need to protect the case that mKeyboardEvent is null.
(cherry picked from commit 6445c07635be0d037ca39f6c183e7142e80b65a5)
-
[BugFix][Harmony] Fix vertical position error of inline view when setting vertical-align as middle. (f1e9a93) @Randycn
When calculating the offset of the middle property value, the vertical offset of the line was omitted.
(cherry picked from commit 92106461ef9eb4d96d60bc6359e1085e71bdb7b6)
-
[BugFix][Android] Add pixelCopy support and optimize screenshot generation (a32039d) @rel-q
Moves bitmap processing to a background thread and adds a pixelCopy option for better screenshot generation
(cherry picked from commit 3c5e5fcc6bfc3f7aa8fbf9d9c2df16b858476671)
-
[BugFix][List] Fix sticky item not render when list scroll in the next vsync. (23b5942) @DwwWxx
If list's scroll offset is updated in the next vsync callback, we should set sticky item's translate after updating scroll offset.
(cherry picked from commit b305e1698f1f4021c7746b68403c75a542525819)
-
[BugFix][InlineStyle] fix the issue when splitting inline style string (55aadc2) @linxs0211
When there are single quotes, the style string splits incorrectly, failing to skip the closing single quote.
(cherry picked from commit 76b849e5009b92b1ce1d9a61aa3dfcc597839eae)
-
[BugFix][iOS] Fix compilation errors when using LynxServiceRegister in LynxBase (d2f57ac) @ykai55
Using the same guard condition in ServiceLazyLoad.h and LynxLazyLoad.h to avoid redefination of macros. This change fixes compilation errors when using LynxServiceRegister in LynxBase.
(cherry picked from commit 81a557fac596d82059a891c4bcaf3daed4338041)
-
[BugFix] using correct resourcetype when fetchTemplate (d0300cf) @nhsprite
- Update resource type handling in resource loader
- Fix template resource callback parameter usage
- Ensure consistent resource type across platforms
(cherry picked from commit 0754ba9a3ecb91d01215413edcf338819b04cadd)
-
[BugFix][Event] The new event logic adapts to triggerEvent. (b021472) @rAY-ooo
description:
- Added the enableEventHandleRefactor switch to control the new event handling logic.
- Adapted the triggerEvent interface to trigger CustomEvent.
- Fixed an issue where catch interception failed.
- Adjusted the event triggering order.
-
[BugFix] Fix the bytecode generation task handling error that causes task loss (5114025) @lybvinci
Because active and passive generation may execute sequentially, and passive
executiondoes not include all tasks while active generation includes all
tasks, judging only by template key can cause tasks to be overwritten and some
tasks to be lost.(cherry picked from commit 3eb805b5e19992606c9a6c988e81964aaa6e8730)
-
[BugFix][List] Fix list item-snap not work on Harmony platform. (2245672) @DwwWxx
(cherry picked from commit a83703292af36c4547391edc41a24baf08435e17)
-
[BugFix] Fix the issue with incorrect reading of the codecache toggle. (4991868) @lybvinci
Use the remote switch as primary and the local switch as secondary to resolve the issue of remote switch failure.
(cherry picked from commit 187f01b3dfd3431d1f31b320b57d1be71e734c1f)
-
[BugFix][Harmony] Self-Adaptation text height when line-height is the default value. (5568240) @Randycn
When the developer does not set the line-height, no specific line height will be set, and the text height will be expanded using font Self-Adaptation.
(cherry picked from commit d38fa2000c821be1c7883d57630b3085cffec187)
-
[BugFix] There lacks a
debuggablevalue in InitRuntimeStandalone (02560d9) @talisksummary: When use
debuggableto enable instance-level debugging,
we should passdebuggablevia InitRuntimeStandalone.(cherry picked from commit 52ce5bd266702b47ea13a85fdcb72199f0777a41)
-
[BugFix][List] Fix invoking EnqueueComponent() multiple times in the rendering pipeline of a single list item. (7017e1c) @DwwWxx
As the layout is triggered twice in the layout process, and the second layout will use the same PipelineOption, the HandleListOrComponentUpdated may also trigger twice. Therefore we will clear all list-related variables in PipelineOption after the first layout.
(cherry picked from commit a896084c7cfd7ad9ea76c540e9bde02d79e7b82d)
-
[BugFix][iOS] Fix text overlapping in the scenario where text is reused in a list. (c582605) @Randycn
1.When text is reused, the previously drawn text may not be cleared, and the contents of both the view and layer need to be reset.
2.When there are line breaks in the text,boundingRectForGlyphRangereturns the typography width instead of the actual text width. Change it to the maximum value between the maximum font size and the text typography width.(cherry picked from commit b398b8c165a3f4a0d28ee3bf7240c6140c17acf3)
-
[BugFix][Gesture][Harmony] Fix gesture stop fling will trigger bindtap in harmony (0c879a2) @AdrianLCA
Fix gesture stop fling will trigger bindtap in harmony, merge single touch and multi touch gesture processing logic.
(cherry picked from commit b27965e08ced4f54f7f512241c39eab1bfb49919)
-
[BugFix][Clay][Headless] Pick historical fixes in headless mode. (beea3cf) @ChrisChan0668
Details:
Add ENABLE_HEADLESS flag and update platform checks to include headless mode
Integrate harmony platform support for resource loading and task runner
Refactor resource loader service to use common LynxResourceLoader interface
Update text input and mouse handling for headless compatibility(cherry picked from commit cf3f596c91b124224fba909022e1e741015503b8)
-
[BugFix][Devtool]Initialize devtool env before lynx shell reset. (e67d9ea) @benb365
- Initialize the devtool env sufficiently early to make sure all debug switches are prepared before the lynx shell resets
- Enable devtool in lynx example
-
[BugFix][Android]: add ByteBuffer support for TemplateProviderResult initialization (95eff53) @nhsprite
- Add constructor to initialize TemplateProviderResult with ByteBuffer
- Update LynxTemplateRender to handle ByteBuffer-based templates
- Enhance TemplateLoaderHelper and TemplateResourceCallback for ByteBuffer support
- Add comprehensive unit tests for ByteBuffer functionality
- Update native resource loader to support ByteBuffer operations
(cherry picked from commit 4cf1ec83f7b302340fe293103741f5e5028c7766)
-
[BugFix][List] Fix return value with list getVisibileCells (503f08f) @DwwWxx
-
The value of 'id' should be the IdSeclector of list-item.
-
The order of visible cells should be ascending.
(cherry picked from commit 736f26fb5e00578754a73610cf95fb515b124811)
-
-
[BugFix][DevTool] Fix the function name’s initial capitalization error in HarmonySessionHandler (2080099) @yuweizheng
Fix the function name’s initial capitalization error in HarmonySessionHandler, resolving the callback failure issue.
(cherry picked from commit 139fbddb959059fa86e43660054ea47809cf8625)
-
[BugFix][Harmony] Use weak_ptr for Delegate in NativeModuleHarmony (f2f5d3b) @rel-q
Change the Delegate from a shared_ptr to a weak_ptr to prevent potential reference cycles.
(cherry picked from commit 28c6f22a11caa95275d900759ba127e7a1c7ffa6)
-
[BugFix][DevTool] Fix HarmonyOS logbox failing to display error in some scenarios (6a84de6) @yuweizheng
If a logbox error's JS file has an unreachable source map URL, HarmonyOS misses the error catch, so no default response returns. The front end awaits indefinitely, leaving the logbox stuck on "error data is loading". To solve this, a try-catch block was added around the download logic to ensure that any exceptions are caught, allowing fallback logic to execute and return an empty response to the frontend.
(cherry picked from commit b119533fe808032286aa67006c9a825789063db3)
-
[BugFix][Event] Fix the issue where custom events could not be monitored or intercepted. (ee85038) @rAY-ooo
description: For custom events, you need to find the corresponding event target through uiowner so that subsequent client event monitoring or interception can proceed normally.
(cherry picked from commit 650600457423b7b90ec6a7837c18abc9a4955304)
-
[BugFix] Make LynxRuntime Initialization If LogicExecutor is not Provided (c8a5427) @nhsprite
LogicExecutor is a replacement of LynxRuntime in embeddedMode, It's needed to make LynxRuntime
Initiazation if Users has not provide the implementation of LogicExecutor.while, if the EnginePool is enabled, we will provided a DefaultLogicExecutor as default Implementation, but not in Base EmbeddedMode.
(cherry picked from commit e49f911fd7f0f2dfc8df7995495471e990baa527)
-
[BugFix] Handle null nodes and out-of-bounds operations in ShadowNode. (4d16013) @ChrisChan0668
- Add null checks for parent and child nodes in shadow node operations
- Replace assertions with error logging for better error handling
(cherry picked from commit 7b95468a465795ff33c3e22b3b3ca95bd786acfd)
-
[BugFix][Event] Fix exposure accuracy logic and sub-thread operation issues (1a49001) @rAY-ooo
description:
- Consider 100% scenarios when comparing cross-proportions.
- Avoid using strict equality when determining transparency.
- Avoid manipulating UI and exposure data in child threads.
- Avoid adding listeners repeatedly or omitting listeners.
- Add event-related logs.
-
[BugFix][List] list item should have defualt size in main axis. (c991018) @DwwWxx
In c++ list, if list item has no estimated size in main axis, we use 200px as the default size in main axis to avoid rendering all list items.
(cherry picked from commit 42d1dd2a73ac977c90e80fbe78f28932e6a36ee7)
-
[BugFix][List] Fix list trace info (a8a1076) @DwwWxx
(cherry picked from commit 08f4d43d661887701cee56d8bf7e75e1da2d39c1)
-
[BugFix] typo for
scroll-widthandlist-width(a7fb24d) @ci_lynxOops, let's look up the dictionary first next time. We didn't delete the wrong name for not to introduce breaking changes.
(cherry picked from commit 4d9bfdde60a8815c45e9754d339a69b3554014f0)
-
[BugFix][Frame] The LynxView mounted on LynxContext is null (86266ac) @pilipala195
In previous scenarios, the UIBodyView mounted on LynxContext was defaulted to LynxView, so LynxView would never be null when retrieved. The introduction of LynxFrameView has led to the fact that the UIBodyView mounted on LynxContext is not necessarily of type LynxView.
- On Android, when we initialize lynxframeview, we save the uibodyview of lynxcontext in mrootview of lynxframeview, and return this mrootview when lynxcontext.getlynxview is called.
- On iOS,
LynxFrameViewstore therootViewwhich inLynxViewtype, so we just returnrootViewwhenLynxContext.GetLynxViewin frame.
(cherry picked from commit e9d3d7af21149fb331d035029093c54182e99367)
-
[BugFix][Android] Fixed the issue of registering LynxMethod with the same name in Devtool (f9e563d) @OverWatch-Winder
Fixed the issue of registering LynxMethod with the same name in Devtool.LynxModule currently does not allow registering a LynxMethod with the same name, but will be supported in the future.
(cherry picked from commit bedd4c194aebd6a5528fceb395f3e8c31b72a1a5)
-
[BugFix][Part2] suppot lynxViewGroup in Darwin (156cfff) @nhsprite
- Add substantial implementation to LynxViewBuilder.mm, providing custom getters that consider lynxViewGroup first.
- Remove legacy props in LynxBaseConfigurator to LynxViewBuilder, lynxViewGroup should not considering it any more.
- optimize loadTemplate with meta, if bundle is provided with metaData or lynxViewGroup, it should be considered to optimize the performance.
(cherry picked from commit ffd67ca07d31a5e17c44a1688c5daedb7322a8e5)
-
[BugFix][List] Fix list typings. (afa546f) @DwwWxx
Re-define list-type to avoid incompatible error.
-
[BugFix] Fix the issue where the static variable g_looper_class is null. (23fa7f1) @yongjieTang
Sometimes downstream projects call LynxEnv.loadNativeLynxLibrary to load Lynx-related dynamic libraries, but that path does not load the base library. As a result, the message-loop-related variables remain uninitialized and eventually cause a crash.
This change fixes the issue by explicitly initializing LynxBase during the LynxEnv.init flow.(cherry picked from commit 71f15058c212bc66ddf16e8f7bc853251c6f55a4)
-
[BugFix] ChoreographerLayoutTick needs to post layout-related to Layout thread rather than executing it on current thread. (b4febbb) @ChrisChan0668
ChoreographerLayoutTick should never be used in ALL_ON_UI mode, however, we might switch thread mode to ALL_ON_UI and layoutTick cannot be reset to ViewLayoutTick. Using ChoreographerLayoutTick in ALL_ON_UI mode will trigger Layout-related task in a wrong thread. This commit provides a temporary solution to fix it, posting task to Layout thread with LynxContext.
Key changes:
- Add LynxContext member variable to ChoreographerLayoutTick for accessing layout thread
- Modify ChoreographerLayoutTick constructor to accept LynxContext parameter
- In doFrame callback, if layout thread change is detected, post task to layout thread via LynxContext.runOnLayoutThread()
- Add runOnLayoutThread() public method to LynxContext with @RestrictTo annotation to limit access scope
- Add hasLayoutThreadChanged() and setLayoutThreadChanged() methods to LynxContext for tracking layout thread change state
- Pass mLynxContext parameter when creating ChoreographerLayoutTick in LynxTemplateRender
- In LynxTemplateRender.onThreadStrategyUpdated(), mark layout thread as changed when thread strategy is MOST_ON_TASM or ALL_ON_UI
- Add thread safety protection in LynxLayoutProxy using ReadWriteLock to ensure thread safety of native pointer access
- Add corresponding method declarations in API definition files
This fix ensures that layout-related tasks are executed correctly in the layout thread after layout thread has changed, avoiding thread safety issues.
-
[BugFix][Event] HitTest adapts the sticky logic of the list. (941bc2a) @rAY-ooo
description: The sticky logic of the list is different from that of the scroll-view, so they need to be adapted separately.
(cherry picked from commit 1342f4994c91bf22b08523ec8c55de835315c6cd)
-
[BugFix][iOS] Fix image element layout behavior on iOS platform (4c84827) @zhongyr
- Add platform_traits.h to detect OS type at compile time
- Create platform-specific GetImageNodeInfo() method for iOS
- Make iOS always use kCommonBuiltInNodeInfo for image elements
- This fixes layout issues with inline images on iOS platform
-
[BugFix][Event] Fix the multi-threaded operation issue of sendEvent in LynxUIExposure. (08f423c) @rAY-ooo
description: When different threads call sendEvent, it may trigger the problem of multiple threads operating uiSet. Therefore, a copy is needed for traversal.
AudoLand: release/3.5, release/3.4
-
[BugFix][Timing] attach NativeFacadeActor to TimingActor for full functionality. (71621c1) @Tamerlx
Ensure TimingHandler is fully functional by connecting NativeFacadeActor to TimingActor when perf_controller_actor is available.
issue:m-6787554633
(cherry picked from commit ecefa47e4619ecea8250fb56ce2e2b58843676f3)
-
[BugFix][Embedded]fix lineHeight error (970c3f8) @linxs0211
use the wrong lineHeight type for LayoutInElement
(cherry picked from commit c10b99e666d7e9d707226312a5df823e424abfa4)
-
[BugFix][Harmony] Remove spread limit for outset shadow to enable complete display (009a11a) @zhongyr
We should not give a limit with spread to enable outset shadow can be completely displayed.
The previous code limited the spread radius to min(width, height) / 2 for both inset and
outset shadows, but outset shadows should not have this limitation as they extend outward
and need to be fully visible.(cherry picked from commit b687ebb68db335cf37406791aa4b1b06edcfbee3)
-
[BugFix][Android] Fixed ExtensionModule not being initialized in Context Free mode (e832343) @FrendyChen
When the user precreates LynxTemplateRender but does not create LynxView, the initial ExtensionModule will return early because LynxView is nil, causing initialization to fail.
-
[BugFix] fix crash in layout node manager (a36616f) @ci_lynx
fix crash in layout node manager
-
[BugFix][EmbeddedMode] fix keyframes not working issue (e81aac5) @linxs0211
fix the Keyframes not working when enable SimpleStyling
(cherry picked from commit 850bafee2c2060a567e15ddaace338d02a78cfa4)
🚀 Optimization
-
[Optimize][typings] Optimize list and list-item typings. (feb1704) @DwwWxx
-
[Optimize] Refactor gn for clay release (9faa5ff) @rel-q
Initialize clay build environment
(cherry picked from commit b493056c4d19db1ce1f6e9d7f45011b811f4a8e1)
-
[Optimize][Event] Add enableExposureWhenReload to support exposure during reload. (a84492f) @rAY-ooo
description: In the reload scenario, lynxview is reused, the element tree is updated after diff, and if the exposure node does not change, the exposure event will not be triggered. However, for the business, exposure may be required in this case, so we add the enableExposureWhenReload switch to control whether exposure is triggered in this scenario.
-
[Optimize][Clay] devtool use real dpi (3d0f4a5) @ci_lynx
1.devtool use real dpi
-
[Optimize][Android][Input]Ensure text inputs are focusable in touch mode (7484159) @MoonfaceX
Set isFocusableInTouchMode to true for both LynxUITextArea and LynxUIInput to handle cases where the default style may set it to false in application context
(cherry picked from commit 5da2f9261d920218548c43a970201472f1a5dbd3)
-
[Optimize][iOS] Add pre-creation high-priority option to prevent thread deadlocks. (149629e) @Yellow5A5
This commit addresses a potential deadlock issue during thread creation. When a high-priority parent thread creates and waits for a low-priority child thread to initialize, the child may not get scheduled in a busy system, causing the parent thread to block indefinitely.
To resolve this, a "create-with-boost" mechanism is introduced, along with adjusted logic for restoring thread priority after startup:- Adds an enable_preset_thread_priority option to ThreadConfig .
- When enabled, the new thread is temporarily boosted to the highest priority before creation. This ensures it can run its initialization code immediately and unblock the parent.
- After startup, PlatformThreadPriority::Setter restores the thread to its final target priority.
- The HIGH priority level is always restored, while other levels are only restored if the temporary boost was enabled.
(cherry picked from commit d5b678cd3c5113e8f577f499e4cb7a199978bf87)
-
[Optimize] Add detailed logging for lynx extnsion module setup (58240b8) @ci_lynx
Adds more detailed logging to the Lynx extensions module to help diagnose and address setup failures.
(cherry picked from commit c107d0ec6d09c82e004a147112817bb1f204e004)
-
[Optimize] Unify Trace logging across asynchronous tasks (1064455) @KingAlen
During the execution of asynchronous tasks in Trace, there can be two flow lines connecting different async tasks. This update merges and unifies trace points to ensure more comprehensive information is available when viewing the Trace.
-
[Optimize] Add cache for loadScript's result (d35510b) @lybvinci
Files do not need to be read and executed multiple times; increasing caching
improves performance.
app-service.js includes logic to check for initialization, so we need to modify the packaging script simultaneously to officially use this feature. -
[Optimize] Fix RadonFiber :active invalidation (7106d99) @YellowFishWyfCPP
RadonElement checks for touch pseudo tags on the fragment when
GetStyleSheetto update the touch pseudo state, but FiberElement does not have a similar process, so add this check and update step to the GetRelatedCSSFragment.(cherry picked from commit 20f554880febd98a787cf583d795d8274a2c8356)
-
[Optimize][iOS] Support LynxViewGroup to reuse lynx runtime environment (127db95) @nhsprite
Refactor LynxViewBuilder by extracting shared configuration logic into
LynxBaseConfigurator to enable LynxViewGroup to reuse lynx runtime
environments, improving performance and memory efficiency.Changes:
- Extract LynxBaseConfigurator from LynxViewBuilder (~193 lines)
- Move shared configuration logic to base class
- Update LynxViewGroup to leverage runtime environment reuse
- Refactor internal header structure for better modularity
- Update BUILD.gn to include new configurator files
LynxViewGroup supports the same properties as LynxViewBuilder before and has custom properties as follows:
urltemplateBundleglobalProps
(cherry picked from commit 0e39c0070b96acf863536e3901de15a1115dfa66)
-
[Optimize][iOS][Input]Implement customized keyboard hold strategy (a4250e6) @MoonfaceX
Add support for holding keyboard focus when
hold-keyboardis enabled by introducing a new propertyenableHoldKeyboardand modifying the end editing logic. This aligns with Android's behavior and provides better control over keyboard dismissal.(cherry picked from commit 04b9a8ca53457ffc48350becb76c66689f240af2)
-
[Optimize][iOS] Support isTemplateBundleReady/getLynxViewById API in LynxViewGroup (4c426e6) @ykai55
Support the isTemplateBundleReady/getLynxViewById API in LynxViewGroup.
- Support create LynxViewGroup with a URL and a template request will start automatically.
- Support create LynxViewGroup with an existing LynxTemplateBundle.
- Add lynxViewId property to LynxView. Assigns an id for LynxView when created with a LynxViewGroup.
-
[Optimize][iOS] add evaulateTemplateBundle&CallFunction for standalone BackgroundRuntime (5d8d1a4) @linxs0211
1.add evaluateTemplateBundle api
2.add callFunction(cherry picked from commit f888c9ce728f9467f4ea04356dff320f989517ab)
🛠️ Infra
-
[Infra] Export lynx base symbols on the Windows side. (fbcb7c0) @yongjieTang
When building Windows artifacts, it is also necessary to export the relevant public APIs to solve the issue of symbol not found during compilation.
(cherry picked from commit 3d0eb8b5663360711d2e846f31e0af558215aeac)
-
[Infra] Upgrade habitat version to 0.3.143 (5e24f17) @coolkiid
Improve habitat's Windows compatibility, and fix some known issues.
-
[Infra] Update habitat version to avoid network error when fetch external repositories (b4be5f7) @jianliang00
-
[Infra] Disable ios e2e task in ci pipeline (bbcfd85) @Kingatnuaa0528
Disable ios e2e task because the network success rate for Python dependency installation is too low.