我的AI搭档:从“年久失修”的AGP 3.4到平稳着陆AGP 8.0时代

背景

作为一个好几年没接触过 Android 项目的前开发人员,最近收到重新维护老项目的通知。但是离开 Android 一线开发好几年,现在的 Android 版本、AGP、Android Studio 变得是那么的陌生,而且项目在新的Android Studio Narwhal 4 Feature Drop上已经无法运行。

而且现在也没有完整开发时间来进行升级,于是在一边正常工作的同时,借助 AI 编程来实现老项目的一次升级,中途坎坷但平稳落地

项目结构

先说一下项目结构,项目是 19 年构建的组件化项目,大大小小有十几个不同的组件,而且中间因为公司方向变更,其间没有进行过太大的升级,从最早的 AGP3.2 变成了 AGP3.4,这大概就是其间最大的变化。

现在重新接手后,用新的 Studio 直接无法构建。而且无法直接对线上项目升级,只能找一个老的分支在本地尝试升级

升级伊始

开发工具

这里用的开发工具为这个版本的 Studio + 通义灵码插件

另一个独立的编辑器就是 TRAE CN。两个编辑器同时打开。这里吐槽一下,16G 内存现在开发真的不够用,当然之前的时候 TRAE CN 的版本还没有这么新

这两个工具分工主要是:Android Studio 负责运行和修改轻微问题,TRAE CN 负责自动处理和修改:

  • TRAE CN 目前无法直接运行 Android 项目,我没找到类似于 VS 里面配置的可直接运行的插件(有知道的可以在评论区说一下
  • TRAE CN 因为本地是 Java 8 环境,直接运行会报 Java 相关问题
  • Android Studio 里面的插件修改问题,单一修改可以自己处理,但复杂的多模块多文件修改无法自动处理,太麻烦。

Java 配置

新版的 Studio 要求 Java 版本为 JRE 17,但本地是 Java 8 环境用于开发后台项目。这里需要通过

为了 TRAE CN 也能直接使用,需要在gradle.properties中进行如下配置:

ini 复制代码
org.gradle.java.home=D:\\develop\\Android Studio Narwhal\\jbr

你需要将这个路径替换为自己的路径

调整 Maven

这里调整 Maven,实际上还是网络问题导致的 ------ 网络无法连接 VPN,只能通过国内镜像下载最新的 Gradle 和 AGP

这里主要是配置阿里云的镜像,在buildscript里面的repositoriesallprojects里面的repositories进行如下配置

这是我的配置:

rust 复制代码
buildscript {
    
    repositories {
        // 阿里云 Google 仓库(优先,Android 核心库依赖)
        maven { url 'https://maven.aliyun.com/repository/google' }
        // 阿里云 MavenCentral 仓库(替代 jcenter,Gradle 7+ 主推)
        maven { url 'https://maven.aliyun.com/repository/maven-central' }
        // 阿里云公共仓库(补充其他第三方库)
        maven { url 'https://maven.aliyun.com/repository/public' }
        // 阿里云 JCenter 仓库(若项目依赖旧版 jcenter 库,需保留)
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
        // 官方仓库(备选)
        google()
        mavenCentral()
        maven {url "https://jitpack.io"}
        maven {url 'https://developer.huawei.com/repo/'}
    }
    dependencies {
        //noinspection GradleDependency
        classpath 'com.android.tools.build:gradle:8.5.0'
        classpath 'com.huawei.agconnect:agcp:1.9.4.300'
    }
}

allprojects {
    repositories {
        // 与 buildscript 保持完全一致,确保所有模块都优先走阿里云
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/maven-central' }
        maven { url 'https://maven.aliyun.com/repository/public' }
        maven { url 'https://maven.aliyun.com/repository/jcenter' }

        google()
        mavenCentral()

        maven {url "https://jitpack.io"}
        maven {url 'https://developer.huawei.com/repo/'}
    }
}

调整依赖

这一步就是调整公共 Gradle 里面的依赖了,包括但不限于compileSdkVersion、minSdkVersion、targetSdkVersion这几个,以及其他 AndroidX 的包。

这里调整相关版本,通过 TRAE CN 的 Builder 模型自动进行。但有一点,AI 配置的版本有时候是不存在的,运行报错时,即使在对话中添加 "版本需存在" 等要求,也无法很好控制。

当然也尝试了切换 Builder 模式为 Android 智能体,对话过程整体感觉不如 Builder,应该是自己的智能体提示词写得不是很好,没有再深入研究~~

构建

实际上经过上述三步,项目已经可以尝试构建了。通过 Studio 构建过程中报错,然后将错误放到 TRAE CN 上,有时候也会直接在插件里查看,这里需要经过多轮对话,实际上工作间隙看一眼 AI 修改的内容,调整一下方向就行。

第一次构建后

这里主要是修改构建脚本中不再支持或需调整的属性:

  • 移除 buildToolsVersion 设置
  • 修改 Java 版本配置,确保使用 JavaVersion.VERSION_17 或更高
  • 移除 extension.project.tasks.whenTaskAdded 中的 mockableAndroidJar 任务禁用配置
  • 调整 setDependencies 方法中的注解处理器配置
  • 移除 dexOptions 中的 javaMaxHeapSize 设置
arduino 复制代码
// 修改前
dexOptions {
    javaMaxHeapSize "4g"
}

// 修改后 - 完全移除
  • 调整 buildTypes 中的 debuggable 属性设置位置
  • 检查 applicationVariants.all 中的输出文件名设置
arduino 复制代码
// 修改前
applicationVariants.all { variant ->
    variant.outputs.all { output ->
        ***
        def outFile = output.outputFile
        if (outFile != null && outFile.name.endsWith('.apk')) {
            outputFileName = fileName
        }
    }
}

// 修改后
applicationVariants.all { variant ->
    variant.outputs.all { output ->
        ***
        // 直接设置 outputFileName,不再检查 outFile
        outputFileName = fileName
    }
}
  • 检查 buildTypes 中的配置,确保与 Gradle 8.0+ 兼容
  • 移除或更新所有已弃用的 Gradle API 调用
  • 确保所有第三方插件版本兼容 Gradle 8.7
  • 检查 signingConfigs 配置,确保路径和密码配置正确
  • 移除所有注释掉的、不再使用的插件配置

同时让 AI 写一份清单,对每个模块的 build 配置进行检查调整,确保没有任何遗漏。

命名空间的坑

添加 namespace 配置(Android Gradle Plugin 8.0+ 必需)

这里还是经验不足,应该让 AI 检查所有模块,在所有模块的 build.gradle 中添加后,AndroidManifest.xml 里对应的 package 属性需要移除

这里自己忘了 AndroidManifest.xml 里的 package 定义和模块名没有进行详细的规则匹配,通过公共配置导致 R 文件一直生成不出来,而且后来又挨个模块修改了一遍。

果然以前的坑现在还要填

中间需要注意:TRAE CN 修改过程中遇到问题会自行修改 Java 版本,从 JRE 17 改成 8,出现过多次,需要手动干预。

switch R.id. 的问题

这里还是项目太老的问题,以前很多点击事件都是通过 switch (v.getId ()) { case R.id.A: ... } 这种方式写的,现在都报错了。

需要将 switch 语句转换为 if-else 结构:

复制代码
Android Gradle插件或构建工具更新:新版本的构建工具可能对资源ID的可见性处理更加严格,限制了对嵌套布局资源ID的直接访问。

找到了修改方式,后续就让 AI 挨个文件找到修改位置并修改即可。

exported 的问题

这里之前很多第三方 Service 或者 Activity 需要明确设置android:exported属性,这些让 TRAE CN 运行检查并修改就行。

总结

经过上述在 TRAE CN 中的多次沟通,并在沟通中指定 Android SDK 位置,最终实现将 APK 运行到手机上。

但是希望TRAE CN能优化一下,在电脑上遇见多次卡死的情况。

相关推荐
砖厂小工20 分钟前
用 GLM + OpenClaw 打造你的 AI PR Review Agent — 让龙虾帮你审代码
android·github
OpenTiny社区38 分钟前
OpenTiny NEXT-SDK 重磅发布:四步把你的前端应用变成智能应用
前端·javascript·ai编程
张拭心1 小时前
春节后,有些公司明确要求 AI 经验了
android·前端·人工智能
张拭心1 小时前
Android 17 来了!新特性介绍与适配建议
android·前端
ygxb2 小时前
如何去创建一个规范化的Agent SKIll?
后端·ai编程·claude
NikoAI编程2 小时前
Claude Code 安装报错?看这一篇就够了
ai编程
chaors2 小时前
从零学RAG0x01之向量化
人工智能·aigc·ai编程
chaors2 小时前
从零学RAG0x02向量数据库
人工智能·aigc·ai编程
推敲2 小时前
第三篇:Spring 项目重构的高级技巧与最佳实践
ai编程