Repository navigation
Conversation
把 Windows 专属实现下沉到 Platform/ 与 TFM 条件编译,业务层零分叉: - TraeTools.csproj 改为双目标 net10.0-windows;net10.0-android。Windows 侧的 AOT / 裁剪 / 单文件 / RuntimeIdentifier 全部保留在 windows 条件组内,现有 Windows 发布流程零改动(release.yml 仅追加 -f net10.0-windows 消除多目标歧义) - 新增 Platform/:Secrets(DPAPI ↔ Keystore+AES-GCM 双实现)、DataPaths、 CrashLog、CrashReportActivity、BrowserLauncher、PlatformLog、MainActivity - 弹窗一律由 Window 改为 UserControl:Android 走 ISingleViewApplicationLifetime 时 new Window() 会抛 NotSupportedException;新增 OverlayDialog 双模宿主 (桌面端包 DialogHostWindow,Android 端挂全屏覆盖层并用 TCS 模拟模态) - 新增 MainView 单视图外壳(品牌头 + 胶囊导航 + 全屏弹窗层);MainWindow 精简为 桌面壳,仅保留托盘、原生菜单与最小化到托盘 - Android 侧降级:开机自启→无操作;内嵌浏览器登录→手动粘贴 Token; 应用内更新→引导至 Release 页下载 APK 覆盖安装 - android TFM 显式关闭 AOT / 裁剪 / 链接器:.NET for Android 在 Release 下默认 开启 LLVM AOT,会因 SQLitePCLRaw 等反射路径抛 MissingRuntimeArtifactException - version.json 的读取从 Target 上移到求值期 PropertyGroup,否则 AndroidManifest 的 versionName 会停在静态兜底值,与 App 内「关于」显示的版本互相矛盾 - ci.yml 拆分为 build-windows / build-android 两个作业,并新增 workflow_dispatch - README 补充 Android 章节(功能差异表 / 构建方式 / 实现要点) Windows Debug/Release 编译 0 警告 0 错误。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
给 TraeTools 加上 Android 端:新增
Android/独立工程,仓库根目录下的文件一个都没有改动,Windows 版的构建与发布流程完全不受影响。33 files changed, +2240(全为新增)。更新内容
Android/TraeTools.Android.csproj——net10.0-android独立工程。共享代码用<Compile Include="..\...">链接复用(Models/Services/ViewModels/Views/六个页面 /Styles//Assets//ViewLocator),单一真源仍在根目录,不存在第二份拷贝。Android/Platform/——AndroidVault(Keystore RSA-2048 包裹 AES-256-GCM 数据密钥)、DpapiCompat、BrowserLauncher、CrashLog+CrashReportActivity、MainActivity、PlatformLog。Android/Views/——MainView(品牌顶栏 + 横向标签导航 + 覆盖层对话框宿主)、OverlayDialog、5 个对话框(PromptWindow/InputWindow/PatInputWindow/LoginWindow/EulaWindow)。Android/Services/+Android/ViewModels/UiHost.cs——DataPaths/AutoStartManager/UiHost三个 Windows 实现的 Android 版。Android/Properties/Android/Resources/—— 清单、自适应图标、主题配色。Android/README.md—— 功能差异、编译方式、已知限制。为什么上游代码一行都不用改
new Window()会抛NotSupportedException,故全部改写为UserControl,由OverlayDialog挂到主视图覆盖层并用TaskCompletionSource模拟模态。上游 VM 调用的是Window.ShowDialog<T>(owner)—— Android 的对话框类提供了同名、同参数形态、同返回类型的方法,调用点无需改动。UiHost.MainWindow的返回类型放宽为TopLevel?(Window只是它的子类)。上游 VM 一律用var接收,而它的四种用法 ——ShowDialog(owner)/owner != null守卫 /top?.Clipboard/win.StorageProvider—— 在TopLevel上全部成立。于是 Android 也能拿到非 null 宿主,那些owner != null ? await … : false的确认框照常弹出(若沿用Window?会恒为 null,确认框会被整体跳过)。Android.App/Android.Widget等全局 using,否则会与 Avalonia 类型在共享源码里制造 CS0104(Button/Notification/Application二义性),而共享源码是不允许改的。AppConfig用的ProtectedData(DPAPI)是 Windows 专属包,Android 上没有该类型。新增同名同签名的DpapiCompat,把语义映射到 Keystore + AES-256-GCM,上游加密代码原样通过编译。versionName仍取自根目录version.json(求值期读取),保证 APK 清单与 App 内「关于」显示一致。平台差异
Run验证
ubuntu-latest上dotnet build Android/TraeTools.Android.csproj -c Release编译并产出 APK。Android/之外的仓库文件零改动(git status为空),因此 Windows 版构建与release.yml发布流程不受影响。已知限制
CloudViewModel/SettingsViewModel打开浏览器走Process.Start(...),该调用在 Android 上不可用(失败已被 try/catch 捕获并写日志)。设备码授权流程仍可用 —— 授权码会自动复制到剪贴板,按日志提示手动访问授权页即可。要彻底修好需要给上游 VM 加一个平台跳转抽象(约 7 处调用点),那会改到共享文件,故本次未做。ApplicationId暂定com.traetools.android、ApplicationVersion(versionCode)为 1,正式发布前请自行定夺;Release APK 目前用调试密钥签名。许可
与上游同为 GPL-3.0,改动基于上游
main(4da8bf7)新增,可随时 rebase。