我的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能优化一下,在电脑上遇见多次卡死的情况。

相关推荐
saifeng3 分钟前
安装 Claude Code
ai编程
多年小白3 分钟前
OpenClaw 本周技术更新速递
人工智能·ai·ai编程·openclaw
mCell1 小时前
Harness 工程:不是新词,而是 Agent 工程终于被讲明白了
agent·ai编程·claude
OpenTiny社区1 小时前
AI-Extension:让 AI 真的「看得到、动得了」你的浏览器
前端·ai编程·mcp
robotx2 小时前
安卓线程相关
android
FserSuN2 小时前
langchain deepagents 框架使用带脚本的Skill
langchain·ai编程
消失的旧时光-19433 小时前
Android 面试高频:JSON 文件、大数据存储与断电安全(从原理到工程实践)
android·面试·json
量子位3 小时前
字节版龙虾架构火爆GitHub!开源获35k+ Star,内置Skill全家桶,原生适配飞书
github·ai编程
楠木6853 小时前
RAG 资料库 Demo 完整开发流程
前端·ai编程
幸福的猪在江湖3 小时前
🚀 Claude Code 入门完全指南(一):安装与首次体验
aigc·ai编程