news 2026/10/1 8:46:49

No cached version available for offline mode

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
No cached version available for offline mode

【AndroidIDE】手机离线构建报 "No cached version available for offline mode" 彻底解决方案(kotlin-compiler-embeddable 实战)

全程手机操作,零电脑、零 ROOT。本文记录一次真实的手机端 Android 离线构建踩坑全过程:从报错定位,到区分 buildscript classpath 依赖与 app 依赖,到手动落位本地 Maven 仓库,最终 BUILD SUCCESSFUL。文末附可复用的修复脚本。

一、报错现场

在 AndroidIDE(Code On The Go)中执行离线构建时:bash12sh gradlew installDebug --offline稳定复现以下错误,

2 秒即败:* What went wrong:

A problem occurred configuring root project 'My Appinstall'.

> Could not resolve all artifacts for configuration 'classpath'.

> Could not download kotlin-compiler-embeddable-1.9.22.jar

(org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.22):

No cached version available for offline mode

BUILD FAILED in 2s

网上搜这个报错,几乎全是 Gradle 常规答案(加依赖、开网络),没有人讲清楚 AndroidIDE 手机环境下的特殊性。本文补上这块空白。

二、关键认知:两种依赖,两种缺法

这是本文最重要的一个知识点,搞懂它你才能对症下药:

二、关键认知:两种依赖,两种缺法

这是本文最重要的一个知识点,搞懂它你才能对症下药:

依赖类型 配置名 作用 缓存缺失时的报错位置

app 依赖 debugCompileClasspath 等 你项目代码用到的库(如 kotlin-stdlib) 执行阶段报错,通常在编译任务时

buildscript classpath 依赖 classpath 构建系统自己用的(Kotlin Gradle 插件、它的编译器本体) 配置阶段报错(Configure project),任务还没开始就挂

本次报错两个特征:1.configuration 'classpath' → 说明是 buildscript 依赖;2.configuring root project + BUILD FAILED in 2s → 构建还没碰到你的代码就死了。

结论:缺的不是你项目的依赖,而是 Kotlin 插件的编译器本体 kotlin-compiler-embeddable。 这也解释了为什么往 dependencies 里加任何东西都没用——方向就错了。

一个隐蔽的坑:如果之前在线构建时报过 Compilation error,别急着改代码——编译器 jar 没到手时,Kotlin 编译根本没真正运行,那个“编译错误”可能是假象。补齐 jar 后同样的代码一次通过。

三、排查三步法(手机终端直接操作)

第 1 步:全量日志落地,看清错误全貌

不要用 | tail -8——它会吞掉错误正文!正确姿势:

sh gradlew compileDebugKotlin --offline > /sdcard/kbuild.log 2>&1

grep -B 2 -A 15 "What went wrong" /sdcard/kbuild.log

grep -n -i -E "error|could not|unresolved" /sdcard/kbuild.log | head -25

第二个 grep 确认错误唯一且明确后,才好精确打击。

第 2 步:确认 IDE 的本地仓库机制

AndroidIDE 内置了一个本地 Maven 仓库,部分依赖从这里解析:

ls /data/data/com.itsaky.androidide/files/home/maven/localMvnRepository/org/jetbrains/kotlin/

对比报错目标,缺哪个一目了然。

第 3 步:翻 Gradle 缓存,看 jar 是否以其他形式存在

find /data/data/com.itsaky.androidide/files/home/.gradle -name "kotlin-compiler-embeddable*" 2>/dev/null

如果这里能找到 jar,恭喜——零下载,直接搬运就能解决。

四、解决方案

方案 A:缓存搬运(零下载,优先尝试)

SRC=$(find /data/data/com.itsaky.androidide/files/home/.gradle -name "kotlin-compiler-embeddable-1.9.22.jar" 2>/dev/null | head -1)

D="/data/data/com.itsaky.androidide/files/home/maven/localMvnRepository/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.9.22"

mkdir -p "$D"

cp "$SRC" "$D/kotlin-compiler-embeddable-1.9.22.jar"

再补一个最小 POM(Maven 仓库必备):

cat > "$D/kotlin-compiler-embeddable-1.9.22.pom" <<'EOF'

<?xml version="1.0" encoding="UTF-8"?>

<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<modelVersion>4.0.0</modelVersion>

<groupId>org.jetbrains.kotlin</groupId>

<artifactId>kotlin-compiler-embeddable</artifactId>

<version>1.9.22</version>

</project>

EOF

方案 B:单文件 curl 下载(比 Gradle 更抗断网)

移动网络下 Gradle 整条解析链一断全断,而 curl 单文件 + 断点续传成功率大幅提高:

D="/data/data/com.itsaky.androidide/files/home/maven/localMvnRepository/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.9.22"

mkdir -p "$D"

curl -L -C - --retry 5 -o "$D/kotlin-compiler-embeddable-1.9.22.jar" \

https://maven.aliyun.com/repository/public/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.9.22/kotlin-compiler-embeddable-1.9.22.jar

用阿里云镜像替代 Maven Central,国内网络稳定性差异巨大。-C - 支持断点续传,断了重跑同一条命令即可接着传。

方案 C:网络允许时直接在线构建

sh gradlew installDebug # 不带 --offline

本质是让 Gradle 自己联网补缓存。缺点:网络一抖就 Software caused connection abort,且 tail -8 会让你看不到死因。失败后记得落日志再看。

五、最终验证

sh gradlew installDebug --offline 2>&1 | tail -8

看到 BUILD SUCCESSFUL 即成。如果最后一步 installDebug 报 adb: Permission denied(AndroidIDE 的 adb 在非 root 环境无法执行)——别装了,直接用文件管理器点 APK:

cp app/build/outputs/apk/debug/app-debug.apk /storage/emulated/0/MyApp.apk

文件管理器 → 内部存储根目录 → 点击安装。这才是手机端安装的正道。

六、一键修复脚本(可复用)

把整套逻辑封装成脚本,缺啥补啥、有缓存搬缓存、没缓存走镜像:

#!/bin/bash

# fix-kotlin.sh —— 用法: sh fix-kotlin.sh 1.9.22 --online

KVER="${1:-1.9.22}"

MVN="/data/data/com.itsaky.androidide/files/home/maven/localMvnRepository"

CACHE="/data/data/com.itsaky.androidide/files/home/.gradle/caches/modules-2/files-2.1"

for art in kotlin-stdlib kotlin-stdlib-jdk7 kotlin-stdlib-jdk8 \

kotlin-gradle-plugin kotlin-compiler-embeddable; do

D="$MVN/org/jetbrains/kotlin/$art/$KVER"

[ -f "$D/$art-$KVER.jar" ] && echo "[OK] $art" && continue

SRC=$(find "$CACHE/org.jetbrains.kotlin/$art" -name "*.jar" 2>/dev/null \

| grep -v sources | grep -v javadoc | head -1)

mkdir -p "$D"

if [ -n "$SRC" ]; then

cp "$SRC" "$D/$art-$KVER.jar" && echo "[搬运] $art"

elif [ "$2" = "--online" ]; then

curl -L -C - --retry 5 -o "$D/$art-$KVER.jar" \

"https://maven.aliyun.com/repository/public/org/jetbrains/kotlin/$art/$KVER/$art-$KVER.jar" \

&& echo "[下载] $art"

else

echo "[缺] $art —— 加 --online 参数联网补齐"

fi

cat > "$D/$art-$KVER.pom" <<EOF

<?xml version="1.0" encoding="UTF-8"?>

<project><modelVersion>4.0.0</modelVersion>

<groupId>org.jetbrains.kotlin</groupId><artifactId>$art</artifactId><version>$KVER</version>

</project>

EOF

done

echo "完成,可执行: sh gradlew installDebug --offline"

七、总结

症状 真相 药方

配置阶段 2 秒即败,报 classpath 缺 jar buildscript 依赖缺缓存,与你的代码无关 搬运/下载 jar 到 localMvnRepository

报过 Compilation error 但代码没改过 编译器 jar 缺失导致假象 先补 jar 再怀疑代码

tail 看不到错误正文 tail 截断了输出 全量落日志 + grep

adb Permission denied 装不上 非 root 环境限制 文件管理器点 APK一句话经验:手机端离线开发的本质是“缓存管理”——Gradle 只认两条路:本地仓库和缓存目录,把文件喂到位,offline 就能跑通一切。

我是 ___(你的 ID),正在记录全部用手机完成 Android 开发的实战系列。下一篇预告:《Java 版本不匹配导致 Gradle 启动失败的诊断与修复脚本》。觉得有用请点赞收藏,评论区欢迎贴出你的报错。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 8:44:53

基于Flask的旅游大数据分析与可视化系统(论文+源码)

系统基于标准B/S架构设计&#xff0c;结合Flask框架搭建分层式整体架构&#xff0c;主要分为前端展示层、业务逻辑层与数据持久层三层结构&#xff0c;架构层次清晰、分工明确。前端负责页面交互与数据可视化展示&#xff0c;为用户和管理员提供操作界面&#xff1b;中间业务逻…

作者头像 李华
网站建设 2026/10/1 8:44:52

polymorph.cpp里面的“析构函数、智能指针”问题

分析 polymorph.cpp 中的问题与修复建议 文件分析 文件中包含了两段代码&#xff0c;都被注释掉了第一段。逐一分析&#xff1a; 第一段代码&#xff08;第 2-15 行&#xff0c;被 /* */ 注释&#xff09; struct Base {virtual void f(){} }; struct Derived:Base {void f() o…

作者头像 李华
网站建设 2026/10/1 8:44:19

AI辅助学习五步法:从提示词设计到系统回顾的完整流程

1. 为什么"随便写个提示词"注定学不好&#xff1a;从三个真实翻车场景说起我见过太多人用AI辅助学习的方式&#xff0c;基本可以概括成一句话&#xff1a;打开对话框&#xff0c;敲一句"帮我讲讲XX知识"&#xff0c;然后对着满屏输出点头如捣蒜&#xff0c…

作者头像 李华
网站建设 2026/10/1 8:43:33

2026实测:我用了半个月豆包工作的真实体验分

最近我一直在找能帮自己分担重复办公任务的AI工具&#xff0c;之前试过不少生成类的AI产品&#xff0c;大多是生成完内容之后还要自己导出到对应的办公软件里调整格式、同步给团队成员&#xff0c;来回折腾的过程往往要浪费不少额外的时间。上周和同部门用飞书协作的朋友吃饭&a…

作者头像 李华