只需说话,就能让应用变成你想要的样子
安卓修改大师智改工坊 · Windows 桌面端 · 拖入安装包,用中文写需求

有一类问题,几乎每个第一次改包的人都会遇到:"我把界面改了,装上去之后应用非要我重新登录,是不是我把它改坏了?"答案是:多数情况下你没改坏任何东西 —— 这是改包这个动作本身带来的必然结果。这篇文章就把这条链路从头讲清楚:登录态存在哪、换签名之后为什么会失效、设备指纹会被动到哪一段、团队内部测试账号应该怎么用。工具叫安卓修改大师智改工坊,介绍页在 https://www.apkeditor.cn/ai-version.aspx,官网是 www.apkeditor.cn。

必须先把边界写在最前面,因为它比任何技巧都重要:本文讨论的一切,只适用于自有版权或已获得明确授权的应用。 登录态、账号体系、设备指纹这些话题,天然靠近"身份"和"风控",所以更需要说清楚:我们研究它们,是为了让自家应用的内测、切环境、品牌改版这些正常工程需求能顺利落地;不得用于规避他人应用的风控或授权机制,不得用于破解、盗用他人账号或绕过任何安全校验。下文所有实例,都是自家应用与内部应用。

登录态与账号体系示意
登录态不是一个东西,而是"本地凭据 + 服务端会话 + 设备识别"三件事的组合

一、登录态到底存在哪:三种常见形态

先建立一张地图。"登录态"这个词听起来像一个东西,实际上它是三件事叠在一起:本地存了一份凭据、服务端记着一个会话、双方还各自记着一些"你是谁"的特征。改包会同时碰到这三层,所以必须分开看。

形态一:token(本地凭据)

最常见的一种。登录成功后服务端发一个 token(或者一组 token + 刷新凭据),客户端把它存在本地:可能是应用数据目录里的一个文件、可能是 SharedPreferences、也可能是被加密后存起来。之后每次请求带上它,服务端用它判断"这个请求属于哪个账号、这个会话还有效吗"。

它的关键属性是:token 存在应用自己的数据目录里,而数据目录的归属是"包名 + 签名"共同决定的(在很多系统版本上还有 uid 这一层)。这句话是理解后面一切的钥匙 —— 只要签名换了,这份数据在系统眼里就不再属于"同一个应用",卸载重装会连带把它清干净。

形态二:cookie / WebView 会话

很多应用里嵌着网页(活动页、帮助中心、甚至整个登录流程本身)。这类场景下登录态往往以 cookie 的形式存在 WebView 或网络库的存储里。它的物理位置同样在应用数据目录下,所以命运和 token 一样:应用数据被清掉,会话就没了。区别只在于"丢了之后"的表现:token 丢了通常会明确跳到登录页,cookie 丢了有时是页面里某个模块静默地加载不出来。

形态三:设备指纹(服务端侧的"你是谁")

这是三种里最容易被忽略、也最容易被改包影响到的一种。所谓设备指纹,是客户端采集一组"能标识这台设备/这个客户端"的特征值上报给服务端,服务端拿它做风控、做免登录、做授权绑定。常见的输入包括:系统的匿名设备标识(Android ID 这类)、设备与系统信息、应用的安装标识,以及应用自身的签名摘要。

把签名摘要算进指纹,在自有应用的账号体系里是一个很自然的设计:因为签名是"这个应用是不是它自己"的锚点。但这也意味着一个直接后果 —— 只要改包换了签名,这个指纹就会变。服务端不知道你是在做内测,它看到的只是"同一个账号,突然从一个没见过的客户端上来了",于是要么要求重新验证,要么直接在一次风控里把这个会话按下去。

还有一层常被忘记:与密钥绑定的本地数据

如果自家应用把敏感数据交给了系统的密钥库来加密(或者用它来做请求签名),那么这些密钥往往与"应用身份"绑定。换签名之后,新的包在系统眼里是另一个应用,原来的密钥条目未必还能用,解不开的本地数据只能丢弃。这类问题的表现是"登录页都进不去就报错",比 token 失效更隐蔽 —— 排查时如果发现日志里有解密相关的异常,先想到签名,而不是先怀疑改动。

二、为什么改包之后"要重新登录":三条因果链

现在回答开头那个问题。改包之后要重新登录,不是一种原因,而是三条独立的链路,任何一条成立,结果都是"得重新登录一次"。

链路一:装不上去,只能卸载重装,数据一起没了。 这是最常见、也最朴素的一条。上一篇文章讲过:改包必然重签,而设备上原来那一份是别的签名,覆盖安装会被系统拒绝,唯一的路是卸载再装(卸载会清掉应用数据)。本地那份 token 就在应用数据目录里,它随着卸载一起消失了。于是"重新登录"这件事,本质上不是应用要你登录,而是"你的凭据已经不在了"。 这也是为什么同一台设备上用不同密钥签的内测包互相覆盖时,每次都会掉登录态 —— 不是应用坏了,是数据被重装了。

链路二:服务端侧的指纹变了,旧会话被判为"来路不明"。 第二条链路上,包是装上去了、数据也还在,但请求全部失败。原因在于服务端。如果自家后端把客户端上报的指纹(尤其是含签名摘要的那一类)作为会话的绑定条件之一,那么新包上报的指纹与旧会话记录的不一致,服务端就会让这个会话失效、或者把它拦下来等一次验证。这条链路最迷惑人的地方是:界面上可能还显示着"已登录"(因为有本地缓存的昵称、头像),但每一个请求都在被拒绝。排查时如果只看界面,你会以为登录态还在,于是怀疑是网络问题、接口问题,白白绕远路。

链路三:本地加密数据解不开,等同于没登录。 第三条链路发生在密钥库参与的场景。签名变了,应用在系统眼里的身份就变了,与旧身份绑定的密钥条目可能失效,于是本地那些加密保存的凭据读不出来。这种失败往往发生在非常靠前的阶段,表现为一连串看不懂的异常,而不是一个友好的"请重新登录"。

把三条链路并起来看,会得到一个很实用的结论:"改包之后要不要重新登录"这个问题,答案基本总是"要"。 与其把它当成故障来排查,不如把它当成流程里的一个固定步骤 —— 改包、装包、重新登录、继续验收,这条顺序才是正常的。

重新登录的三条因果链
本地凭据消失、服务端指纹变化、密钥解不开 —— 三条链路任一成立都要重新登录

三条链路长得像,但排查起来完全是三件事,所以再给一张对照表:遇到"改完不能用了",先看现象落在哪一行,能省掉大量试错。

你看到的现象 最可能落在哪条链路 下一步该看什么
安装阶段就被拒绝,提示签名不一样 链路一 先卸载再装,并且把"装完要重新登录"写进这次验收的步骤里
装上了,界面还显示着昵称头像,但每个操作都没反应 / 都失败 链路二 去服务端看会话与指纹校验;确认自家后端是不是把签名摘要算进了绑定条件
一进应用就报错,日志里是解密 / 密钥相关的异常 链路三 检查本地加密数据与密钥条目,先清一次应用数据,确认是不是旧身份遗留的问题
跳回了登录页,提示会话过期 链路一或二 这其实是最"友好"的一种表现 —— 说明应用把失效处理得不错,直接按流程重登即可

这张表还有一个副作用:它会让你意识到"跳回登录页、提示会话过期"其实是最好的结果。因为它意味着自家应用的失效处理是完整的、可预期的;相比之下,链路二那种"看起来还在登录态里、做什么都不成"的安静失败,才是真正消耗时间的那种。所以在自家应用的账号体系设计里,"让失效可见"本身就是一条值得追求的指标。

三、设备指纹:改包到底动了它哪几段

既然指纹是第二条链路的核心,就值得单独拆一段:一个典型的设备指纹里通常有哪几类输入,改包分别会动到哪些。

指纹输入 改包会不会动它 说明
系统级匿名标识(如 Android ID) 通常不变 它属于设备层面,卸载重装一般不影响;换设备才会变
设备与系统信息(机型、系统版本等) 不变 与包本身无关
安装标识(每次安装生成的值) 会变 卸载重装就会重新生成一个,"换了新安装"的意思
应用签名摘要 必变 改包必然重签,指纹里只要含这一项,服务端就会看到"新的客户端"
与密钥绑定的本地数据 可能失效 身份变了之后,旧的加密条目可能读不出来

这张表也回答了一个实操问题:为什么有些自家应用改包之后"什么都没发生",另一些却立刻被踢下线? 因为它俩的指纹设计不同 —— 只用设备级标识的那个,对小改动基本无感;把签名摘要也算进去的那个,一改就变。这不是谁对谁错,而是设计取舍:前者对改包友好、对客户端仿冒更宽松;后者更严,但会把内测流程也一起卡住。

还有一个更细的取舍值得说:指纹的用途应该是"识别",而不是"一票否决"。健康的用法是:指纹变了 → 服务端提高一步验证(比如要求重新登录、要求一次短信验证),而不是直接把你当成攻击者封掉。差别在于,前者对正常的内测、换机、改包都留了出路,后者会把自家团队也一起挡在门外 —— 很多"改完包账号就废了"的抱怨,根源都在这里。落地建议是三条:指纹只作为参考维度之一、给测试环境单独一套放宽策略、把版本号与渠道号作为并行的放行条件(内测版本天然应该被识别出来)。

正确的处理方向只有一个:由服务端来配合,而不是在客户端上想办法"骗过"指纹。自家应用的内测流程,标准的做法是:测试环境对指纹做白名单或直接放宽校验、把指纹的作用限定为"识别"而不是"拦截"、必要时按版本号或渠道号放行。这些都在你自己的服务端上,改起来干干净净,也不需要动客户端一行代码。反过来说,任何"伪造设备特征去骗过别人的风控"的念头,都不在本文讨论的范围内,也不该出现在任何一个正当的工程场景里。

四、工具自己也有账号体系:一个可以参考的样本

讲完原理,换个角度看一个现成的例子:智改工坊这款工具自己,就有一套账号与登录态的设计。它的取舍挺值得借鉴,因为改包工作里遇到的那些纠结("哪些动作该要求登录""登录态该存在哪里"),它都做了一次回答。

取舍一:把"要求登录"挂在真正需要身份的动作上。 在这个工具里,导入 APK、编辑项目、充值需要先登录(登录窗口支持微信扫码、QQ 扫码与账号密码,底部还能去注册与找回密码)。但更值得说的是另一半:当大师币不足时,导入 APK 与编辑项目完全不受影响,只有详情页点「立刻修改」和「去打包」才会提示充值。也就是说,限制不是按"你有多少权限"来切的,而是按"你正在做哪件事"来切的。 用户可以先安心地把包拖进来、看看信息、整理需求、翻历史,等到真的要消耗资源那一刻,才需要面对额度问题。

这条经验可以直接搬到自家应用的改包上:如果你要在内测包里做"限制",请把限制加在具体的动作上(比如只在某个导出入口做校验),而不是一进应用就拦一道门。前者的用户体验是"用着用着碰到一堵墙",后者是"这应用坏了"。

取舍二:配置文件分层 —— 给人改的和给程序记的分开。 这个工具的配置是两层:一层放布局、比例、开关、主题这些给人手改的项,每一项都带中文注释;另一层放程序自己记的东西,比如登录状态的缓存、头像地址、机器码、上次用的登录方式。登录态放在"程序自己记"的那一层里,而不是和用户手写的配置混在一起,好处很实在:你手改配置写坏了,顶多布局不好看,不会把登录缓存一起弄丢;程序自己写状态时,也不会顺手覆盖掉你写的注释。这是一个很小的设计,但它对"登录态该存在哪"给出了一个清晰的答案。

取舍三:跨程序也要同步身份。 这个工具由两扇窗口组成,左边是主窗口,右边是被吸附的 AI 改包程序。为了让两边对"当前是谁"有同一个认知,程序在启动被吸附程序之前、以及每次发送需求之前,会把当前登录的用户名同步到被吸附程序目录下的一个身份文件里;如果对方正在运行,还会提示"可能要重开它才会生效"。这段设计的思路很朴素:跨进程协作时,身份必须显式同步,而不能指望两边各自猜。

顺带说一句工具自身与服务端之间的鉴权方式:它用的是"当前登录用户名"作为请求身份凭据。这在你自己的体系里是一个清楚的选择 —— 简单、好排查、不引入额外概念。把它和上面三条放在一起看,你会发现这个工具对账号体系的整体态度是:身份要明确、权限按动作给、状态和配置分层存放、跨程序要同步。 这四句话,同样适用于你在自家应用里设计内测版。

账号分层与权限设计
把限制加在动作上、把状态和配置分层——这两条对内测版本同样有效

五、使用技巧:把"账号相关需求"讲清楚的三层结构

账号与登录态相关的改动,最怕的不是难改,而是说不清:口径一模糊,AI 只能猜,猜出来的结果就得反复返工。所以这一章讲的是"怎么把这类需求写成一句能执行的话",以及工具在文本组装上替你做了什么。

先说工具这一侧。你在需求框里写的那句话,并不会原样发出去 —— 真正送到 AI 那边的是三层拼起来的一段文本:

  1. 第一层:你的原话。 这是需求的主体,也是唯一会被写进项目修改历史的那一层。工具在项目里为每条需求记一条记录(带序号、时间与完整原文),历史里只留你的原话,不掺别的内容,所以回看历史时不会被无关文字刷屏,点一下「选择」还能把那条需求填回输入框,照着上次再改一遍。
  2. 第二层:附件说明。 如果你用「选择附件」加了文件,工具会把它们拼成"序号 + 文件绝对路径 + 你写的用途"这样一段附在需求后面。界面上的两个校验不是刁难:文件必须现在就能用(存在、不是目录、不是空文件、读得出来),而且每个文件都要写一句不少于 10 个字的用途说明。为什么要卡这 10 个字?因为"拿这个文件干什么"和"这个文件放在哪"是两件事,只给路径不给用途,等于把猜测留给了对方。同样的路径还会自动去掉重复项。
  3. 第三层:固定的环境说明。 这是一段写给 AI 的操作约定:说明工作目录切到哪里(里面会自动替换成当前项目的工作目录)、改完怎么算完成(在项目目录留下一个标志文件,主窗口每 2 秒轮询一次,读到就开始打包)、以及"不需要自动打包"。这段说明不写进历史,因为它对每个项目都一样。

理解这三层之后,"怎么把账号相关需求讲清楚"就变成了一个具体的填空练习。以登录态为例,一条合格的需求应该同时交代四件事:改哪一层(是登录页的界面文案,还是默认的服务器环境,还是版本标识)、不要动什么(例如"不要碰登录流程与校验逻辑")、用什么验证(哪个测试账号、在哪一页看到什么算成功)、影响范围(只影响登录页,还是首页也要跟着变)。这四件事写全了,返工率会立刻降下来。

同一件事,两种写法

差的写法:「把登录改一下,弄成测试的。」

好的写法:「把登录页顶部的 logo 换成附件里的新图;登录按钮文案改成『内测登录』;接口地址从正式环境改成附件里的内测地址;不要改动登录流程、不要改动任何校验逻辑;改完我会用内部测试账号 ×× 在测试机上验证能否登录成功、以及关于页是否显示内测标识。」

两种写法的差别不在礼貌程度,而在可执行性。差的写法里"登录"是一个巨大的范围,"测试的"是一个没有边界的形容词,对方只能猜;好的写法把范围限死在几个具体位置上,还给出了"不动什么"和"怎么算成功"。顺带一提,好的写法还有个副产品:它会成为项目历史里的一条好记录 —— 过两个月你要再出一个同样的内测包,点一下历史里的「选择」把这句话填回来,接着改就行,不用重新回忆当时改了什么。

再说一个经常有人想歪的地方:团队内部测试账号的合规使用方式。 正确的做法是把"测试"这件事交给服务端来承接 —— 用独立的测试环境、白名单测试账号、由服务端下发的开关来决定行为。改包只承担它该承担的那部分:把客户端指向测试环境(如果这个地址原本是写在资源或配置里的)、把界面标识成内测版本。至于"在客户端里硬编码一个测试账号和密码",能不做就不做:客户端里的一切都是可以被翻出来的,账号一旦写进包,就等于写在公告栏上。测试账号还要做到能随时吊销、能让操作留痕,这才是企业内部测试该有的样子。

三个必须避开的坑

  • 把正式环境的账号信息写进需求或附件里。 需求和附件说明都会被当作文本片段记录与传递,别让真实的账号、口令、密钥以这种方式流动。要传地址就传地址,要传标识就传标识。
  • 把"跳过登录"当成一条需求。 这不是技术难度问题,而是方向问题:在自家应用里,"跳过登录"要么应该由服务端的开关来实现(这才是可管理、可关闭的正确做法),要么就根本不该存在。用改包去硬拆登录入口,只会做出一个没人敢发的包。
  • 改完不清理测试配置就往外发。 指向测试环境的包一旦流到公司外面,别人连不上、报错、投诉,最后还得你解释。给内测包起一个一眼能看出来的名字(版本号后面加个标识、应用名标上"内测版"),是成本最低的一道保险。

六、两个自家实例:从"手改地址"到"一句话 + 附件"

下面两个例子都发生在自家应用与内部应用里,都是与账号体系直接相关的改动。照例看三件事:以前怎么做、现在一句话怎么做、改完怎么验证。

实例一:自家「记账助手」的内测包指向测试环境

背景:这支应用的接口地址原本指向正式环境,我们需要一个能连测试环境的内测包,用来配合服务端同事联调新的账目同步逻辑。

以前怎么做: 两条路都很别扭。一条是改代码重新编译一个变体 —— 但我们拿到的往往不是最新的开发环境,编译一次要等,遇到对不上的版本还得先同步代码。另一条是手改 smali 里的字符串常量:这个应用里跟服务器相关的地址不止一处(接口、文件上传、还有一个用来做环境探测的),漏掉任何一处,表现都是"能登录,但某个功能一直失败",排查起来非常费劲。更糟的是,有人为了图省事,顺手去动与校验相关的逻辑,这就踩线了 —— 那种包既没人敢用,也没人敢发。

现在一句话怎么做: 把自家安装包拖进安卓修改大师智改工坊,先把测试环境的地址写进一个纯文本附件里;然后在需求框里写:"把应用内的接口地址从正式环境改为附件里这个内测环境地址,只改地址,不要改动登录流程、不要改动任何校验逻辑;另外把版本号显示成 2.0.0-内测"。加附件时写清用途(比如"内测环境地址,替换应用里指向正式环境的那一处"),点「立刻修改」。

这里可以顺便看看需求发出去之后发生了什么:工具把你的这句话、附件说明、以及那段固定的环境说明拼在一起送进右侧被吸附的窗口;AI 改完在项目目录留下标志文件,主窗口的等待机制读到它就开始打包。你在等的时候,左侧界面上的项目历史里已经记下了你写的那句原话 —— 下次要再出一个内测包,点一下「选择」把这条需求填回来就行。

改完怎么验证: 分三步,而且第三步是关键。第一步看打包:四步跑完、签名校验通过,产物在项目目录里。第二步装机:这里会遇到"签名不一样"的提示,工具会说明需要卸载重装,并提醒卸载会清数据 —— 注意,这一步的"重新登录"是预期之内的:旧 token 随着旧数据一起没了,不是包坏了。第三步做登录验收:用内部的测试账号登录一次,确认三件事 —— 登录能成功;进到"关于"页能看到环境与版本标识(也就是那句 2.0.0-内测 生效了);再用一个只属于正式环境的账号试一下,确认它在测试环境上被正常拒绝。这三件事都对上,才说明"切环境"这件事真的做成了,而不是"界面显示成了内测版"。

实例二:内部「巡检打卡」应用的内测标识与登录页品牌

背景:这是我们内部给巡检同事用的应用,登录页上用的是两年前的旧品牌图,而且版本号没有任何渠道标识,现场同事经常分不清自己装的是哪个版本。

以前怎么做: 登录页的 logo 是一张资源图,按钮文案和版本号却写在别的地方,改一次要在资源和代码之间来回找;更要命的是改完还要记着手动回编、对齐、签名,中间少一步就得重来。做完之后发给同事,同事的第一句话往往是"我这个是新版吗" —— 因为界面上没有任何渠道标记。

现在一句话怎么做: 拖入自家包,把新版品牌图作为附件传进去,需求写成:"把登录页顶部的 logo 换成附件里的新品牌图,登录按钮文案改成『内测登录』,应用名后面加『内测版』,版本号显示为原版本号加 -neice;不要改动登录流程本身"。附件说明写清"新版登录页品牌图,替换登录页顶部那张"。点「立刻修改」。

改完怎么验证: 装机拉起之后,这次验收的重点恰好落在账号体系上 —— 走一遍完整的登录流程:看登录页是不是新图、按钮文案对不对;输入一个内部测试账号,看能不能登录成功、失败时的提示是否友好(这一步能顺带验证"我们只是改了文案,没有碰到校验");登录进去之后确认首页顶部的版本标识带着内测后缀。这里要特别提醒一件事:如果你们的服务端对客户端签名做了白名单,记得先把新包的签名加进去 —— 否则验证会卡在"登录请求被拒"上,而你会误以为是自己改坏了登录页。这个白名单应该放在服务端,由人来维护,改包这一侧只负责把改动做出来。

内测包验收流程
改包只负责把改动做出来,登录验收与服务端白名单由人来把关

两个例子做完,可以提炼出一点共性的东西:凡是碰到账号体系,人要在两个位置出现 —— 一次是在写下需求的那一刻(把"改哪一层、不动什么、怎么验证"说清楚),一次是在验证的那一步(用哪个账号、看到什么算成功)。工具把中间的搬运工作(拼文本、等改完、回编对齐签名、装机拉起)都接了过去,但它不会替你在服务端加白名单,也不会替你判断"这个改动会不会碰到不该碰的地方"。

七、用户评价:他们在账号这条线上踩过的坑

「第一次改完自家应用,装上去提示重新登录,我以为把什么东西改崩了,紧张了半天。看完原理才知道这是必然的,卸载重装把本地凭据一起清了。」

—— 阿凯 · 企业 IT 运维

「我们后端把签名摘要算进了客户端指纹,改包之后旧会话直接失效。后来改成内测环境放宽校验,问题就没了 —— 结论是所有这类事都得后端配合,客户端瞎折腾没用。」

—— 老陈 · 小型工作室安卓开发

「需求里我固定会写两句:不要动登录流程、不要动校验。写完这两句之后,返工次数明显少了,AI 不会乱伸手指。」

—— 小林 · 高校实验室助研

「附件的用途说明要写满十个字这一条,我一开始嫌麻烦。后来发现写清楚用途之后,改出来的结果一次就对了,反而省时间。」

—— 周舟 · 个人开发者

「我们出内测包一定会把版本号带上标识,应用名也标出来。同事一眼就知道自己装的是哪个版本,售后问题少了一大半。」

—— 王工 · 自动化设备厂商软件组

内部试用反馈汇总(来自技术交流群的问卷整理)

  • 约 四分之三 的试用者第一次改包后都遇到过"需要重新登录",其中超过一半的人第一反应是"是不是改坏了";
  • 在"账号相关改动最容易出问题的地方"这一项里,选"需求没说清楚"的人最多,接近 七成;
  • 用过附件功能的人里,超过 八成 认为"给每个文件写一句用途"是让结果一次到位的关键动作;
  • 被提到最多的一条经验是"给内测包起一个一眼能认出来的名字",所以我们在两个实例里都写了这一点。

合规提醒:本工具面向自有版权或已获授权的应用,用于学习研究、企业内测、自有应用迭代等合法场景。请勿用于破解他人付费应用、绕过安全机制或未获授权的分发;也不要去除他人应用的授权校验。尤其不得用于规避他人应用的风控或授权机制、伪造设备特征、盗用他人账号或会话。 文中所有实例均基于自有应用与内部应用,所有登录态相关的调整都在自有服务端配合下完成。

八、结语:登录态是设计出来的,不是碰运气碰出来的

把这篇收成三句话:登录态由本地凭据、服务端会话、设备指纹三部分组成;改包会同时动到它们(本地凭据随卸载重装消失、指纹里的签名摘要必变、与身份绑定的密钥可能失效);所以"改完要重新登录"是流程的一部分,而不是故障。 理解了这条链,你下次看到登录页时就不会慌,而是顺手把它当成一次验收机会。

工具在这条链里的角色也很清楚:它把需求文本按三层组装好、替你等 AI 改完、把回编对齐签名校验跑完、再把包装上设备拉起来;而"用哪个账号验证""服务端要不要放行""这个改动会不会碰到不该碰的地方"这些判断,始终留在人手里。安卓修改大师智改工坊希望做到的是那句话说的样子 —— 只需说话,就能让应用变成你想要的样子;同时它也留出了足够多的位置,让这些判断由你来下。

产品介绍页与下载入口:https://www.apkeditor.cn/ai-version.aspx(官网 www.apkeditor.cn)。

改包与登录验收流程
把"重新登录"当成验收步骤,账号相关的改动就有了固定的收尾动作

只需说话,就能让应用变成你想要的样子

Windows 桌面端 · 拖入 APK · 中文写需求 · 自动回编 / 对齐 / 签名 / 校验 · 一键装机看效果

立即下载智改工坊(AI 版)

环境要求:Windows 桌面系统;首次使用建议在「参数设置」里做一次工具链体检