@blotch/ angular- lynx- 本地化
将AngularLynx应用程序构建为iOS和Android二进制. 你不直接说: ng build --platform ios|android|all (单位:千美元) @blotch/angular-lynx-build:application 建造者)在建造了Lynx捆后加载. 这是依赖 @blotch/angular-lynx-build,哪个 ng add @blotch/angular-lynx 安装.
用户文档 : 发布您的应用设计及其推理: investigations/native-app-builds.md。 。 。 .
它会做什么
- 生成 本地项目来源
templates/ios或者说templates/android输入 Angular 构建缓存中的项目文件夹(.angular/cache/<Angular version>/<project>/lynx-native/<platform>,哪个ng new已经 gi出和ng cache clean),从angular.json输入少数文件的模板标记。 它只有在其输入的散列变化(这个软件包的版本,模板,选项,图标)时再生出,所以Xcode和Gradle保持了它们的增量状态. - 副本
dist/(没有网络捆绑)进入项目. - 构建 带它
xcodebuild或 Gradle 并复制二进制到dist/<platform>/。 。 。 . - 运行 它,与
--run(单位:千美元)src/ios/run.ts, (中文(简体) ),src/android/run.ts: 选择模拟器、模拟器或电话(--device,否则就是运行中的一款,否则就是最新的iPhone模拟器或第一个AVD),并在第3步之前开始,所以它在应用程序编译时会靴子;然后安装应用程序并打开. iOS 用途simctl并显示设备Hub中的模拟器(devices://device/open?id=<UDID>)或,在Xcode 27.1,模拟器应用程序之前. Android 使用 SDK 软件adb财务报告和审定财务报表emulator并按部件打开发射器活动.
弹出的项目( E)ios/ 或者说 android/ 带有 .angular-lynx-ejected 标记,由 ng generate @blotch/angular-lynx:eject)是按原样建造的,永远不会再被再生成.
炮弹
两个都是全屏 LynxView 运行 main.lynx.bundle;角路由器在它内部进行所有导航. 应用程序内部的套装和资产负载,所以RSpeedy默认资产前缀(/static/...无配置的工作。 这个 LynxView 在状态栏和家用指示器下填充屏幕("edgeToEdge": false 在角. json 把它放在安全区域里代替。 林克斯自己的CSS系统 env(safe-area-inset-*) 是0在那里:Android从未设置过它,而iOS外壳生成它的 LynxView 在窗户是钥匙之前 Lynx读它的地方 运行时间给出每个 env(safe-area-inset-*) 贝壳发送的套接字( 见 safe-area-insets.ts 故他们遵循正道。 在Android上,活性仍然会给键盘打出一页,而下方的入位值在打开时为0. 一个 <overlay> 屏幕也填满,所以底页覆盖到屏幕边缘的页面,并用套件将内容贴上:在Android XElement上方的覆盖窗口停止在导航栏上方,所以 shell 注册它自己的 overlay 行为, EdgeToEdgeOverlay.kt,它的窗口 吸引每个酒吧,就像活动.
两者都发送同样的全球道具,运行时间的服务读作: platform, (中文(简体) ), theme (再次当电话在灯光和黑暗之间开关), appLocale (电话语言作为BCP 47标签), appTimeZone (其时区名称为IANA,即: intl 构建选项 Intl.DateTimeFormat 使用), isNotchScreen, (中文(简体) ), edgeToEdge,安全区域设置 safeAreaTop, (中文(简体) ), safeAreaBottom, (中文(简体) ), safeAreaLeft 财务报告和审定财务报表 safeAreaRight (当它们改变时), osVersion (Lynx离开主线的) SystemInfo)和无障碍环境 reduceMotion, (中文(简体) ), reduceTransparency (仅iOS)和 increaseContrast,在用户更改时再次更改。 Android 12号,后来也发送 dynamicColors,壁纸的材料 3 在光和暗中的颜色角色(DynamicColors.kt),再次当用户改变其壁纸或颜色时。 Lynx 浏览器发送 theme 财务报告和审定财务报表 isNotchScreen 也一样,但是没有 appLocale, (中文(简体) ), appTimeZone, (中文(简体) ), osVersion 或无障碍环境。 见 templates/android/README.md 安卓贝壳的细节.
二者都注册运行时间服务调用的地方模块,Lynx Explorer没有: AngularLynxWebAuth (单位:千美元)WebAuthModule.swift, (中文(简体) ), WebAuthModule.kt)打开 LynxWebAuthSession'' 登录页面, in ASWebAuthenticationSession 在iOS和Android上的自定义标签上,返回它重定向的URL. AngularLynxLocalStorage (单位:千美元)LocalStorageModule.swift, (中文(简体) ), LocalStorageModule.kt保留 LynxLocalStorage'在 a 中的值 UserDefaults 套间和一个 SharedPreferences 他们自己的文件. AngularLynxSecureStorage (单位:千美元)SecureStorageModule.swift, (中文(简体) ), SecureStorageModule.kt保留 LynxSecureStorage在iOS上的键链中,在Android上的键链中 SharedPreferences,每个值由 Android Keystore 键用 AES-GCM 加密,文件 Auto 备份退出(res/xml/backup_rules.xml, (中文(简体) ), data_extraction_rules.xml) (中文(简体) ). AngularLynxLinking (单位:千美元)LinkingModule.swift, (中文(简体) ), LinkingModule.kt)打开 LynxLinking'链接 : openURL 与 UIApplication.open 还有一个 ACTION_VIEW 意图, openInApp 内 SFSafariViewController 和一个自定义标签,以及 canOpenURL 与 UIApplication.canOpenURL 财务报告和审定财务报表 resolveActivity,它只回答生成器从角写出来的方案。 强森的 canOpenURLSchemes (与 http, (中文(简体) ), https, (中文(简体) ), mailto, (中文(简体) ), tel 财务报告和审定财务报表 sms)进入Info.plist's LSApplicationQueriesSchemes 和名单 <queries>。 。 。 . AngularLynxImagePicker (单位:千美元)ImagePickerModule.swift, (中文(简体) ), ImagePickerModule.kt)让当事人为 LynxImagePicker,与 PHPickerViewController 在iOS上和Android上的"取相"(Photo Picker)上,两者都不需要授权,并以Base64回电,当应用程序要求一个更小的JPEG或照片是HEIC等格式时,重新编码为直立JPEG. Android 也拥有过 AngularLynxShell后面的按钮.
AngularLynxClipboard (单位:千美元)ClipboardModule.swift, (中文(简体) ), ClipboardModule.kt(续) LynxClipboard文本为 UIPasteboard.general 在iOS和 ClipboardManager 在Android, 并读回来.
两个链接 Lynx 的 XElement 库,它持有 <input>, (中文(简体) ), <textarea>, (中文(简体) ), <overlay>, (中文(简体) ), <svg>, (中文(简体) ), <blur-view>, (中文(简体) ), <viewpager>, (中文(简体) ), <refresh>,则 <scroll-coordinator> 家庭 家庭 家庭, <webview> 财务报告和审定财务报表 <video>. Lynx的核心不包含这些,一个不注册它们的主机使得这些标记(在Android上,在它们之后也没有任何)成为一无所有. XElement的AnimaX和Markdown元素被忽略:运行时间不支持它们. 在iOS上, <blur-view> 是XElement的 更多的UIKit 在里面(App/BlurView.swift(单位:千美元) blur-material uIKit 适应性模糊材料的属性, 玻璃组件在 iOS 26 上之前绘制其设计( Lynx 模糊视图只有 iOS 13 之前的样式); Liquid Glass 中实现、溶解和减轻 a 内部效应之间的作用 glass-container, Lynx 立即设定效果;和 a glass-effect-id 属性,将两个玻璃形状对齐,跨越一个变化,这样一个变形为另一个(App/GlassTransitions.swift) (中文(简体) ).
两者都有 <canvas> 与 WebGL2( 第211期), Lynx 不使用: a canvas 要素(App/AngularLynxWebGL.m是因为 AngularLynxCanvas页:1 CAMetalLayer 视图; CanvasUI.kt页:1 TextureView)和 AngularLynxWebGL 模块,运行时的 WebGL2 上下文发送它的呼叫,在 OpenGL ES 3.0 上运行(App/AngularLynxWebGLContext.m, (中文(简体) ), WebGLContext.kt) (中文(简体) ). 在iOS上,这是 英格兰'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 安格莱的 libEGL 财务报告和审定财务报表 libGLESv2 框架,及其标题,请输入 Lynx 框架zip(下方)。 Android的OpenGL ES是手机的,仿真器已经在Mac的GPU上运行了. 运行时间运行在 Lynx 的主线上,WebGL 需要同步解答,因此两者都打开了主线程模块(enableMTSModule:然后从主线程 JavaScript 调用配置的模块 lynx.module(name)。 。 。 . AngularLynxAssets (单位:千美元)App/AssetsModule.swift, (中文(简体) ), AssetsModule.kt)读取主线程的应用程序捆绑文件 fetch,没有页面 URL 解决 /static/... 反对。 WebGL 模块读取的命令编号(App/AngularLynxWebGLOps.h, (中文(简体) ), WebGLOps.kt)是从运行时生成的 canvas/webgl-ops.ts 与 npm run generate:webgl-ops -w packages/native· ; scripts/webgl-ops.test.ts 当他们被困住时就失败了 UIKit 模块将 Apple 的 OpenGL ES 信头导入到每个文件, 所以 AngularLynxWebGLContext.m 关闭其贬值警告,这些警告以相同名称的ANGLE的功能为依据;明确链接到 libGLESv2 出现在UIKit的自动1到OpenGLES之前,所以这些呼叫绑定在ANGLE上.
| iOS系统 | 机器人 | |
|---|---|---|
| 语言 | 斯威夫特,场景生命周期 | 科特林语Name |
| 林克丝 | 4.1.0,预建的XCF框架(下) | 4.1.0 马文中心AARs |
| 元素 | 链接和登记(App/XElementRegistry.swift(中文(简体) ) | 链接和登记(XElementBehaviors(中文(简体) ) |
| 工具链 | Xcode 27, iOS 15+ (英语) | AGP 9.4、Gradle 9.6、JDK 17+、SDK 36、minSdk 24 |
| 生成配置 | Config/App.xcconfig, (中文(简体) ), App/Info.plist 标记 | angular-lynx.properties, (中文(简体) ), AndroidManifest.xml 标记 |
IOS 的 Lynx 版本
Lynx出版iOS只作为源代码活塞,这需要几分钟来编译和需要CocoaPods(并因此需要Ruby). scripts/build-lynx-ios-frameworks.sh 将它们编译为 XCF 框架( 大约32 MB ziped, 单独 zip 有调试符号): Lynx, PrimJS, Xlement 及其依赖性, 和 ANGLE 的 libEGL 财务报告和审定财务报表 libGLESv2,并带有ANGLE的抬头 ANGLE/include。构建者下载被绑在 src/ios/frameworks.ts (URL和SHA-256)首先使用并缓存到 ~/.cache/angular-lynx/lynx-ios/<version>-<build>。 。 。 .
ANGLE 仅用 Chrimium 的工具构建( depot tools, GN and Ninja), 因此 Lynx 脚本运行 scripts/build-angle-ios-frameworks.sh,它检查ANGLE修订时运出的一个Chrome稳定放行(ANGLE_REVISION),为设备单独构建其金属后端并同时构建模拟器架构,并预建了ANGLE自己的金属遮阳器(否则当一个app第一次做上下文时它会编译它们,这在模拟器的一款新安装上花费了5.7 s),并留下了依赖性ANGLE的DEPS取来进行测试和其他后端. 结账时间大约为5GB,3个建筑共需约1分半钟;单独运行(npm run build:angle-ios-frameworks -w packages/native尝试新的修订。 ANGLE 将大约 6 MB 添加到一个应用程序中(2 MB 压缩到 .ipa),与Lynx的34 MB相对抗,每个应用程序都会链接到它,所以 <canvas> 在每一个建筑中工作.
Lynx 4.1.0的拉链是 lynx-ios-4.1.0-3 释放。构建数字计算一个 Lynx 版本的重建,该版本的框架已经改变(2个添加了XElement, 3 ANGLE),并且是缓存文件夹的一部分,所以拥有更古老的zip下载新版本的机器. 对于新的 Lynx 版本, 在脚本中按下版本并重置 BUILD 改为 1; 更改同一版本的框架, 凸起 BUILD (脚本和 LYNX_IOS) (中文(简体) ). 然后运行 Lynx iOS 框架 工作流程与 publish (或本地脚本),并给新拉链的URL和SHA-256打针. 要在发布前先测试本地创建的文件夹 :
npm run build:lynx-ios-frameworks -w packages/native # needs Xcode, Ruby >= 2.7 with Bundler for CocoaPods, and Python 3 for ANGLE (the script downloads Xcode's Metal toolchain if it's missing)
export ANGULAR_LYNX_IOS_FRAMEWORKS=$PWD/packages/native/.lynx-ios-build/out/LynxFrameworks
更改模板
- iOS: (英语)
App/是一个同步文件夹,所以添加或删除 Swift 文件不需要更改工程 。 对于其他任何东西(构建设置、框架、资源文件夹),编辑APP_PROJECT内scripts/generate-ios-project.ts。 。 。 .App.xcodeproj不在基特语:iosTemplateProject虚拟插件在vite.config.ts让它与@bacons/xcode,只需要节点,每节点npm run build财务报告和审定财务报表npm test,而npm 包运结果。 运行npm run generate:ios-project -w packages/native以不使用 TypeScript 构建来渲染它,例如打开 Xcode 模板. - 两者: 运行
npm run e2e -- --ios --shell(Android的第6层,见 E2E 读取通过每个平台的一款新软件来建设和开发.