Antigravity 牛刀小试 —— 改造项目多渠道打包和模块化

公司项目代码结构一直比较老旧,最近有一个汽车厂商提出了更新 SDK 的需求,遂趁此机会,对项目进行一下优化改造,遇到不懂的就尝试用下 AI

项目背景

首先说一下目前的项目现状,我司有一个主要的 App,负责自己的业务。有一些车厂或商家需要在我们的业务基础上面进行魔改,套上他们的外壳。之前的开发人员采用了一个比较简单粗暴的办法,就是直接拉分支去实现不同的 App。这样能够很快解决燃眉之急,但是长久下来分支非常多,而且所有代码各跑各的,主线 App 修复一个 Bug、做了 Android 版本适配,又要在不同的 App 分支上面进行同样的修改。另外这个主线 App 的代码非常老旧,采用一坨式的结构,象征性的划分了 app 模块(UI、表层业务)和 sdk 模块(底层代码、第三方库),实则里面的代码非常混杂,无法很好地区分

然后再说下第三方的需求,上面有提到,我们本来就需要根据不同厂商进行打包,最近还多出了一个 SDK 相关的需求。这个所谓的 SDK 需求就是,要提供给他们一个 AAR 包,他们引入这个 AAR 包后,调用一行代码就可以跳转到我们的界面里面。有点像市面上的套壳 App,初打开时是第三方自己实现的简单界面,点击一个按钮后,就进行我们的业务初始化,然后进入到我们的相关界面进行交互

我们现在就要根据这些背景,进行 App 的改造

我先简单构思了一下,要把 App 分为三层:app、common、platform,然后再多增加一个 sdk 层用来打包 AAR,用 Flavor 多渠道打包满足多产物的需求。在我们的另一个项目里面,已经有实际使用这三层结构和 Flavor,说干就干,切换一下项目,多搞了个 sdk 层,一看,哦豁无法运行,因为 app 层是 com.android.application,sdk 层是无法依赖 app 层的

那怎么搞好,这下触及知识盲区了,想起之前组内成员推荐的 Antigravity,交给它试试

使用 Antigravity 进行整改

我提交给 AI 的提问内容如下:

我有一个 android app,它分为三层,app(业务层,根据 Tab 内容再分模块)、common(共用层,放 UI、共用工具类)、platform(平台层,底层,引入基本库,基本 .so、aar、jar)。然后它采用 flavor 进行多渠道打包,现在我有一个新的需求,我需要在这个基础上,让它具备一个能力:能够打包出一个 aar 包,交给客户,客户依赖我这个 aar 后,调用一行代码跳转进入特定页面,此后页面内都是我的 app 的代码,他可以使用我们 app 的各种逻辑(当然 UI 风格会和我们 app 本来的风格不一样),他也可以退出返回自己的 app 中。这个要如何实现比较优雅,用中文给我回答

Antigravity 对整个项目的代码进行了分析,给出了新的代码结构示意图,并且很快就给出了实施方案和流程攻略(它也把这个叫做架构重构演练文档),这两个文件都是 markdown 格式,并且带版本管理,你继续提问的话它会不断修改这两个 markdown 的文本

代码结构示意图

实施方案和流程攻略

实施方案解释了如何对项目进行改造,而流程攻略就是教你改造后如何验证已经起效了。出于隐私考虑,我就不放出这两个文档的实际内容了

总的来说,它建议我把原来的 app 层改成一个 core 层,然后上面再分两个模块,其中一个是新的 app 层,用于打包原来的 APK,另一个 sdk 层,用于打包 AAR

新的 app 层,Manifest 文件里面直接声明了core 层(原 app 层)中的 Application 和欢迎页面作为入口,保留了一些 Flavor 和 google-services 的配置,就作为一个壳,基本没有其他内容了,这时候在新 app 层直接运行,就能得到和以前旧 app 层一模一样的 apk

sdk 层写了个 Kotlin object 类,用于进行以前 Application 的初始化(把 Application 里面的初始化抽出一个方法,这样 Application 里面可以调用,sdk 层也可以单独调用),初始化完成后再跳转页面。如果要打包 AAR,根据提供的流程攻略,运行 assembleRelease 就可以了,虽然实际上存在依赖传递的问题,无法打包 core 层、common 层和 platform 层

根据实施方案对代码进行整改,然后根据流程攻略进行验证,理论上整个事情就算做完了

如果你允许它进行操作,它还能帮你直接修改项目里的代码,你只需要同步一下并且运行就可以了

实际运行后,会遇到很多问题,比如 Manifest 合并错误、JDK 版本不一致、Compose 依赖错误和 google-services 插件错误等问题,直接提供报错代码给它,就能够得到相应的解答,并且是有效的。不过到最后依赖传递的问题还是没有办法解决,因为 fat-aar 已经不再维护了。Antigravity 给出了一个打包成文件夹的方案,我觉得不够优雅,所以暂时搁置不管了

感悟

之前我对使用 AI 一直都比较存疑,觉得:一来不知道它从哪里信手拈来的方案,不知道是不是切实可行的;二来你只要一直点 Accept 允许它进行操作,它都帮你干完了,也学不到啥东西了

但是今天用下来还是比较改观的,因为是不是可行你可以自己检视一下,运行一下,而你想学到什么东西的话,也是可以直接看它给你做了什么改动,给了你什么解释,然后可以从中去学习的

所以这次使用 Antigravity,更多的应该说是一种感叹,就是它已经可以把你上网 Google 各种方案这个步骤给省略了,还能直接根据你的项目代码作出各种分析,并且直接改你的代码。这种编码方式或许真的会给程序员带来挺大的冲击,学习新技术的门槛和成本似乎又降低了不少,可能以后真的要从面向 Google 编程变为面向 AI 编程了


Antigravity 牛刀小试 —— 改造项目多渠道打包和模块化
https://enderhoshi.github.io/2025/12/18/Antigravity 牛刀小试——改造项目多渠道打包和模块化/
作者
HoshIlIlI
发布于
2025年12月18日
许可协议