[{"data":1,"prerenderedAt":290},["ShallowReactive",2],{"content:\u002Ffiddling\u002Fone-month-using-android":3,"surround:\u002Ffiddling\u002Fone-month-using-android":204,"github:getsurfboard\u002Fsurfboard":215},{"id":4,"title":5,"body":6,"categories":178,"date":180,"description":181,"draft":182,"extension":183,"image":184,"meta":185,"navigation":187,"path":188,"permalink":184,"published":184,"readingTime":189,"recommend":184,"references":184,"seo":194,"sitemap":195,"stem":196,"tags":197,"type":202,"__hash__":203},"content\u002Fposts\u002Ffiddling\u002Fone-month-using-android.md","迁移安卓一月谈",{"type":7,"value":8,"toc":165},"minimark",[9,13,17,20,23,26,32,46,54,57,60,65,68,71,74,77,80,84,87,97,100,107,110,114,117,120,123,133,136,140,143,146,149,153,156,159,162],[10,11,12],"h3",{"id":12},"前言",[14,15,16],"p",{},"我是一个换机很频繁的人，尤其是工作有了一些积蓄后，更是养成了一点“喜新厌旧”的坏毛病，一部手机在我手上很难待过一年。一旦有新机发售，就开始盘算着买一部做主力机如何如何，现有的软件\u002F工具链如何迁移过去，想着想着就开始手痒，于是下单换机，旧机或是退给家人使用，或是卖二手，或是留在身边当备用机，然后被慢慢遗忘。",[14,18,19],{},"毕业后这四年起，仅仅主力机就有这些：一加 8T、一加 9Pro、Pixel 5、Oppo Find X6 Pro、Vivo X Fold3 Pro、iPhone 14 Pro、iPhone 16 Pro，另外还有一部一加 7Pro 作为备用机。",[14,21,22],{},"从换机历程，大概能看出我玩机心态的变化 —— 最初的一加系、pixel，早年刚毕业的时候喜欢折腾，类原生、root、解 bootloader，怎么自由怎么来；到 oppo、vivo，逐渐放弃了折腾，但还是保留了一些玩机的心态，如 vivo 的折叠屏；再到 iPhone，彻底投入 Apple 阵营，和 Apple 生态的深度融合。",[14,24,25],{},"正沉溺 Apple 构筑的生态链中不愿自拔时，npy 给了我当头一棒：“你这拍照也太垃圾了”。也是，早年玩机，主要关注跑分性能之类的纸面参数，摄像头嘛，能扫码就行。现在，我要向她证明：",[27,28,29],"blockquote",{},[14,30,31],{},"一切手法上的不足，都可以通过软硬件不足！",[14,33,34,35,40,41,45],{},"当然这又是我换机的一个借口罢了，事实是，在上次 ",[36,37,39],"a",{"href":38},"\u002Ftravels\u002Fkansai-202504","关西行"," 中，K 君的相机确实引起了我很大的兴趣，尤其是那大长焦。但我天生惫懒，不愿后期修图，那就不如买一部镜头和调色稍微好些的",[42,43,44],"mark",{},"手机","，来满足一下我的拍照瘾吧。",[14,47,48,49,53],{},"恰好上半年御三家都发布了各自的 Ultra 超大杯：Vivo X200 Ultra、Oppo Find X8 Ultra、小米 15 Ultra。首先排除小米（",[50,51,52],"del",{},"雷军！金凡！","），vivo 的长焦增距确实很吸引我，简直演唱会神器，但鉴于我抢不到演唱会的门票，最终还是入手了主摄有一英寸大底的 Oppo Find X8 Ultra。截止目前已经换机有一个月了，迁移最主要的麻烦就是从 Apple 生态链中迁移过来，尤其是很多 App 开发者只开发 iOS 版，Android 版的 App 生态又是良莠不齐，寻找平替花了不少时间。由于无法解锁 BootLoader，root 就成了奢望，很多功能只能委屈一下了。",[10,55,56],{"id":56},"去广告",[14,58,59],{},"更换到国产安卓生态的最大问题，就是无处不在的广告。上手第一步，去广告：",[61,62],"video-embed",{"id":63,"type":64},"BV18c6JYLEmw","bilibili",[14,66,67],{},"完成后，就只剩下天气应用的二级页面下方的推荐广告去不掉了，和牛皮癣一样。",[10,69,70],{"id":70},"照片备份",[14,72,73],{},"此前由于使用的完整的苹果生态，所有的照片都在 iCloud 上，为此也开了 iCloud 200G 扩容，专用于存储照片，目前使用了 50G，包含了从本科开始的所有照片。前些日子把 NAS 更换为了飞牛系统，这些照片又同步备份了一份到飞牛自带的相册。",[14,75,76],{},"这次切换到安卓，品牌方自带的云肯定是不用的（说的就是你，欢太云），更换到 Google 相册的话，有比较麻烦。去年花了不少时间把相册从 Google Photos 导出到 iCloud，现在又导回去算个什么事情？另外 Google 云空间不开会员只有 15GB，虽然用校友邮箱薅了 Google AI Pro 的 2T 羊毛，但心里总是不踏实。",[14,78,79],{},"由于我的其他设备还是苹果，最终决定还是继续使用 iCloud 存储。Mac 上安装一个 O+ 互联，每天打开电脑是自动连接，就是需要手动导出再导入到 Apple 相册。说实话 O+ 互联的体验比 V 家的办公套件要差很多，不仅 Bug 多，功能还不完善：剪贴板无法同步、不支持 Mac 控制手机、无法自动同步照片，看 Oppo 那边也摆烂了，更新也不怎么勤快，凑活着用吧。",[10,81,83],{"id":82},"代理回家","代理\u002F回家",[14,85,86],{},"我的手机和电脑上都安装了代理软件，主要就是用于回家，即访问家里的网络环境，原因有二：",[88,89,90,94],"ol",{},[91,92,93],"li",{},"访问家里部署的服务，比如上面提到的相册和笔记服务",[91,95,96],{},"家中部署了 DNS 去广告和基于规则的透明代理，只要能连接回家，就无须再配置复杂的规则，享受和在家里一样的网络环境",[14,98,99],{},"之前使用 iPhone 时，Surge 我是 24 小时挂在后台的，全局回家。但如果人在家中时，还挂着全局连接家中的代理，会导致上不了网 Surge 有个很重要的功能，叫子网覆盖，可以根据当前连接的 WIFI SSID，执行一些动作，比如 SUSPEND 全局绕过代理。这样就完美解决了家中挂代理无法上网的问题，Surge 可以全程保持在后台了。",[14,101,102,103,106],{},"切换到安卓阵营，首先面临的问题就是选择太多，不同于 iOS 大部分都是自己实现的代理核心，安卓大都是直接复用开源的核心，如 mihomo（clash）、v2ray、xray 或比较新的 singbox，基于这些核心封装 UI 界面进而封装客户端，因此",[50,104,105],{},"大部分","几乎所有客户端都无法在 UI 上直接调整规则配置，只能通过上传或订阅配置文件。这倒是件小事，基于我的需求，配置文件一旦写成便几乎不会再变动。比较麻烦的是，很难找到一个客户端支持类似于 Surge 的子网覆盖功能，我可不想离家回家都得手动开关一次代理。",[14,108,109],{},"最终找到了一个比较小众的 SurfBoard，支持 SSID 规则，直接在规则最顶端增加一条 SSID 规则走 DIRECT，也算曲线救国实现了功能。更神奇的是，这个 App 兼容 Surge 格式的配置文件。",[111,112],"github",{"repo":113},"getsurfboard\u002Fsurfboard",[14,115,116],{},"虽然 SurfBoard 默认是 FakeIP 无法修改，即使走 SSID 规则请求也会首先解析成 FakeIP，不如全局绕过来得更加彻底，但是聊胜于无吧。",[10,118,119],{"id":119},"记账",[14,121,122],{},"换机之前恰好养成了记账的习惯，至今记账也两月有余了，除了日常用钱时的记账之外，还会每天对账记录理财收益。iOS 上有个记账软件很推荐，叫 iCost，界面简洁但功能丰富，支持将快捷记账添加为系统捷径，可以通过敲击两下背板或者 iPhone 16 的快捷按钮唤醒，自动 AI 识屏并填写主要信息，全程只需要填一个分类即可。iCost 也有开发安卓端的规划，但是规划了两年多，进度缓慢。",[14,124,125,126,132],{},"小红书上搞记账软件的也很多，国人独立开发三大件：笔记、TODO 和记账。最终找到了一个比较老牌的记账软件：钱迹，开发时间似乎比 iCost 还长，并且支持多平台同步：iOS、MacOS、Android 甚至 Windows、鸿蒙 Next 都有支持，历史账单也可以很快捷地从 iCost 导入。该有的功能也一个不拉：资产管理、信用卡还款、退款、、多币种、多账本（虽然这个我用不到）。放个 ",[36,127,131],{"href":128,"rel":129},"https:\u002F\u002Fqianjiapp.com",[130],"nofollow","主页","。",[14,134,135],{},"钱迹的自动记账感觉比 iCost 要好，不过或许是平台不同带来的差异。钱迹的自动记账基于的是系统的无障碍功能，在识别到当前打开的窗口是账单页面（支付宝或者微信）时，就会自动识别并弹出小窗快速记账。不过界面识别的准确度有待提升，有时从其他软件跳转支付宝付款完成的界面识别会失败，只能手动打开支付宝的支付记录中再识别一次，不过小瑕疵，能接受。",[10,137,139],{"id":138},"日历todo","日历\u002FTODO",[14,141,142],{},"iOS 18 最大的更新，就是打通了日历和提醒事项，在日历上可以直观查看和操作所有提醒事项，得益于 iOS 优秀的通知推送能力，提醒也十分及时，几乎算得上是 iOS 上最提升生产力的小工具了，比不少付费软件做的都好。切换到安卓后，首先排除的就是系统自带日历，完全不具备可迁移性，下一次换机一旦换一个品牌，数据就要全丢失了。",[14,144,145],{},"找来找去，中途微软的 Outlook 比较符合要求。作为一个邮件 app，日历功能做的出奇得好用。就是无法显示农历，只能通过订阅一些农历日历来展示，这样每天都会显示一些日程，由于 Outlook 本地化做的也不咋的，传统节日、节假日调休一概没有，又得多订阅一些日程，再加上农历生日、纪念日，整个日历一眼望去满满当当，眼花缭乱，哪一天真的有事情要做都没法直观看到。另外 Todo 功能薄弱，只能达到凑活用的水平。",[14,147,148],{},"无意中想到一个老牌的 Todo 软件：滴答清单，于是下载下来体验了一番，没想到就给我找到了 iOS 日历 + Todo 的最佳平替。上面提到的所有功能都直接支持：农历显示、农历日程、节假日调休、倒数日\u002F纪念日、Todo 展示。不仅如此，我在 iOS Todo 上还得手动划分列表支持的四象限法，滴答清单直接原生支持，意外之喜啊。就是 139 元一年的会员价格有些不美了，不过这是我的问题。",[10,150,152],{"id":151},"watch","Watch",[14,154,155],{},"切换到安卓生态后，终于摆脱了美丽废物 —— Apple Watch，终于不用一天充一次电了。用了 Oppo 的手机，自然要用 Oppo 的手表。购入了 Oppo Watch X2，几乎和一部全新的 Apple Watch 差不多贵了。",[14,157,158],{},"Oppo Watch X2 采用了现在智能手表比较少的圆形表盘，表盘样式也多是拟物主题，令人眼前一亮。我对手表的要求很低，能看时间、同步手机通知、同步手机闹钟、记录睡眠数据和其他健康数据即可。这款手表都能完美地解决，另外比较惊喜的是 HRV，这个在 Apple Watch 上基本被忽略掉、大部分情况下只能通过第三方 app 来展示提示的数据，在 Oppo 上得到了空前的重视，有一个专门的身心状态页面，还请来了孙颖莎代言。",[10,160,161],{"id":161},"尾声",[14,163,164],{},"折腾了那么多，终于是有一部用着舒服的手机了，拍照也得到了 npy 的认可，完美~",{"title":166,"searchDepth":167,"depth":167,"links":168},"",4,[169,171,172,173,174,175,176,177],{"id":12,"depth":170,"text":12},3,{"id":56,"depth":170,"text":56},{"id":70,"depth":170,"text":70},{"id":82,"depth":170,"text":83},{"id":119,"depth":170,"text":119},{"id":138,"depth":170,"text":139},{"id":151,"depth":170,"text":152},{"id":161,"depth":170,"text":161},[179],"折腾","2025-06-05 23:26:00","换机频繁的我，经历了从一加到 iPhone 的转变，逐渐从折腾的乐趣转向了对生态的依赖。最近在 npy 的建议下，入手了 Oppo Find X8 Ultra，主要是为了提升拍照体验。尽管沉浸在 Apple 的生态中，但 App 的迁移问题让我意识到，Android 的应用生态依然参差不齐，寻找替代品的过程颇具挑战。这个月的迁移经历让我感受到不同平台之间的摩擦与适应。",false,"md",null,{"slots":186},{},true,"\u002Ffiddling\u002Fone-month-using-android",{"text":190,"minutes":191,"time":192,"words":193},"14 min read",13.68,820800,2736,{"title":5,"description":181},{"loc":188},"posts\u002Ffiddling\u002Fone-month-using-android",[179,198,199,200,201,44],"Android","Oppo","苹果","Apple","tech","QsXmG0EmlKXAaf2CfNg3IqLagRQFMoEuTAvcODndB6A",[205,210],{"title":206,"path":207,"stem":208,"date":209,"type":202,"children":-1},"Astro 接入 Google Analytics (Tag Manager)","\u002Ffiddling\u002Fastro-google-tag-manager","posts\u002Ffiddling\u002Fastro-google-tag-manager","2025-05-28 22:09:00",{"title":211,"path":212,"stem":213,"date":214,"type":202,"children":-1},"macOS 26 \u002F iPadOS 26 尝鲜","\u002Ffiddling\u002Fmacos-26-trial","posts\u002Ffiddling\u002Fmacos-26-trial","2025-06-10 20:18:00",{"id":216,"node_id":217,"name":218,"full_name":113,"private":182,"owner":219,"html_url":237,"description":238,"fork":182,"url":239,"forks_url":240,"keys_url":241,"collaborators_url":242,"teams_url":243,"hooks_url":244,"issue_events_url":245,"events_url":246,"assignees_url":247,"branches_url":248,"tags_url":249,"blobs_url":250,"git_tags_url":251,"git_refs_url":252,"trees_url":253,"statuses_url":254,"languages_url":255,"stargazers_url":256,"contributors_url":257,"subscribers_url":258,"subscription_url":259,"commits_url":260,"git_commits_url":261,"comments_url":262,"issue_comment_url":263,"contents_url":264,"compare_url":265,"merges_url":266,"archive_url":267,"downloads_url":268,"issues_url":269,"pulls_url":270,"milestones_url":271,"notifications_url":272,"labels_url":273,"releases_url":274,"deployments_url":275,"created_at":276,"updated_at":277,"pushed_at":278,"git_url":279,"ssh_url":280,"clone_url":281,"svn_url":237,"homepage":184,"size":282,"stargazers_count":283,"watchers_count":283,"language":184,"has_issues":187,"has_projects":187,"has_downloads":182,"has_wiki":187,"has_pages":187,"has_discussions":182,"forks_count":284,"mirror_url":184,"archived":182,"disabled":182,"open_issues_count":285,"license":184,"allow_forking":187,"is_template":182,"web_commit_signoff_required":182,"has_pull_requests":187,"pull_request_creation_policy":286,"topics":287,"visibility":236,"forks":284,"open_issues":285,"watchers":283,"default_branch":288,"temp_clone_token":184,"network_count":284,"subscribers_count":289},205685154,"MDEwOlJlcG9zaXRvcnkyMDU2ODUxNTQ=","surfboard",{"login":220,"id":221,"node_id":222,"avatar_url":223,"gravatar_id":166,"url":224,"html_url":225,"followers_url":226,"following_url":227,"gists_url":228,"starred_url":229,"subscriptions_url":230,"organizations_url":231,"repos_url":232,"events_url":233,"received_events_url":234,"type":235,"user_view_type":236,"site_admin":182},"getsurfboard",54771602,"MDQ6VXNlcjU0NzcxNjAy","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F54771602?v=4","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fgetsurfboard","https:\u002F\u002Fgithub.com\u002Fgetsurfboard","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fgetsurfboard\u002Ffollowers","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fgetsurfboard\u002Ffollowing{\u002Fother_user}","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fgetsurfboard\u002Fgists{\u002Fgist_id}","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fgetsurfboard\u002Fstarred{\u002Fowner}{\u002Frepo}","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fgetsurfboard\u002Fsubscriptions","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fgetsurfboard\u002Forgs","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fgetsurfboard\u002Frepos","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fgetsurfboard\u002Fevents{\u002Fprivacy}","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fgetsurfboard\u002Freceived_events","User","public","https:\u002F\u002Fgithub.com\u002Fgetsurfboard\u002Fsurfboard","https:\u002F\u002Fgetsurfboard.com","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fforks","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fkeys{\u002Fkey_id}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fcollaborators{\u002Fcollaborator}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fteams","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fhooks","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fissues\u002Fevents{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fevents","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fassignees{\u002Fuser}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fbranches{\u002Fbranch}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Ftags","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fgit\u002Fblobs{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fgit\u002Ftags{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fgit\u002Frefs{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fgit\u002Ftrees{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fstatuses\u002F{sha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Flanguages","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fstargazers","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fcontributors","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fsubscribers","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fsubscription","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fcommits{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fgit\u002Fcommits{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fcomments{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fissues\u002Fcomments{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fcontents\u002F{+path}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fcompare\u002F{base}...{head}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fmerges","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002F{archive_format}{\u002Fref}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fdownloads","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fissues{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fpulls{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fmilestones{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fnotifications{?since,all,participating}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Flabels{\u002Fname}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Freleases{\u002Fid}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fgetsurfboard\u002Fsurfboard\u002Fdeployments","2019-09-01T14:07:43Z","2026-08-24T05:12:21Z","2026-08-23T16:00:46Z","git:\u002F\u002Fgithub.com\u002Fgetsurfboard\u002Fsurfboard.git","git@github.com:getsurfboard\u002Fsurfboard.git","https:\u002F\u002Fgithub.com\u002Fgetsurfboard\u002Fsurfboard.git",5976,8593,263,139,"all",[],"master",63,1787554444046]