跳至内容
WebViewGold 从 Vibe Coding 到 App Store
中文
获取 WebViewGold

Claude Code

用 Claude Code 修复 WebViewGold Android 项目中的 Gradle 构建错误

Android 构建失败的原因通常毫不起眼:Gradle 运行在错误的 JDK 上,Android Studio 比项目的 Gradle 插件还旧,重命名包名时漏掉了 google-services.json,或者 bundle 用了 Google Play 并不认可的密钥签名。Claude Code 可以运行 Gradle wrapper、阅读堆栈跟踪,并迅速修复其中的大部分问题。下面列出这些错误、相关命令,以及仍需由您负责的部分。

每个平台一次性 $109 起,或由我们的团队全程代劳,$698 起。

  • 审核通过保证 – 否则 14 天内退款
  • 无需编程
  • 一次性付费,免费更新
  • 7×24 小时人工支持
  • 2014 年起德国出品 · ISO 27001

三个必须相互匹配的版本

每个 Android 构建都依赖三个相互匹配的版本:运行 Gradle 的 JDK、固定在 gradle/wrapper/gradle-wrapper.properties 中的 Gradle 版本,以及在构建文件中声明的 Android Gradle 插件(AGP)。此外,app/build.gradle 中的 compileSdk 和 targetSdk 还需要安装对应的 SDK 平台。AGP 8 及更新版本至少需要 JDK 17。

经典陷阱是:Android Studio 使用自带的 JDK 进行构建,而终端中的 Claude Code 使用的是 JAVA_HOME 所指向的 JDK。这就是为什么一个项目在 IDE 中能正常构建,在代理的 shell 中却会失败,反之亦然。先修好环境。为了绕过 JDK 问题而升级 AGP 或 Gradle,会把一个十分钟就能解决的问题拖成整个周末。

WebViewGold Android 项目是一个标准的 Android Studio 项目(下载的文件夹名为 AndroidStudioSource),主要通过 Config.java 和 app/build.gradle 进行配置,详见Android 设置文档。

诊断命令

把输出粘贴到 Claude Code 中,或者让代理自己运行这些命令。在 Windows 上,请用 gradlew.bat 代替 ./gradlew。

bash
# Run in the folder that contains gradlew

# Versions: Gradle, and the JVM it runs on
./gradlew --version
grep distributionUrl gradle/wrapper/gradle-wrapper.properties
grep -rnE "com.android.tools.build:gradle|com.android.application" build.gradle settings.gradle app/build.gradle
grep -nE "compileSdk|targetSdk|minSdk|applicationId|namespace|versionCode|versionName" app/build.gradle
java -version
echo "JAVA_HOME=$JAVA_HOME"

# Use the JDK that ships with Android Studio (macOS path; on Windows it is
# C:\Program Files\Android\Android Studio\jbr)
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"

# Debug build with a readable log
./gradlew assembleDebug --stacktrace 2>&1 | tee build-debug.log

# Release App Bundle for Google Play (uses your signing config)
./gradlew bundleRelease 2>&1 | tee build-release.log

错误、原因和修复方法

错误(摘录)原因修复方法由谁处理
Android Gradle plugin requires Java 17 to run. You are currently using Java 11.终端使用的是旧版 JDK把 JAVA_HOME 指向 Android Studio 自带的 JDK,或指向 JDK 17 或 21。在 IDE 中:Settings > Build, Execution, Deployment > Build Tools > Gradle > Gradle JDKClaude(终端),您(IDE 设置)
Unsupported class file major version 65对于运行它的 JDK 来说,Gradle 版本太旧(65 代表 Java 21)用项目原本对应的 JDK 运行 Gradle;只有当最新的 WebViewGold 项目也提高了 wrapper 版本时,才跟着提高Claude
Minimum supported Gradle version is …wrapper 版本低于 AGP 版本的要求,往往是因为无意中升级了 AGP撤销 AGP 升级,或者把 wrapper 设为错误信息中给出的版本Claude
The project is using an incompatible version (AGP …) of the Android Gradle pluginAndroid Studio 比项目旧更新 Android Studio;不要给项目降级您
SDK location not found. Define a valid SDK location with an ANDROID_HOME environment variable…命令行构建不知道 SDK 在哪里在 local.properties(绝不提交)中设置 sdk.dir,或者导出 ANDROID_HOMEClaude
Failed to find target with hash string 'android-36'没有安装 compileSdk 对应的 SDK 平台在 SDK Manager 中安装,或者运行 sdkmanager "platforms;android-36"Claude 或您
Dependency '…' requires libraries and applications that depend on it to compile against version 36 or later某个库升级后超出了项目的 compileSdk撤销该库的升级,或者有意识地提高 compileSdk 并进行测试Claude
No matching client found for package name 'com.example.app'重命名之后,google-services.json 仍属于旧包名在 Firebase 中注册新包名,下载新的 google-services.json,替换 app/ 中的那一份您(Firebase),Claude(文件)
Keystore was tampered with, or password was incorrectstore 密码错误或 keystore 文件不对自己检查 keystore.properties;绝不要把密码粘贴到聊天中您
Play Console:Your Android App Bundle is signed with the wrong key签名所用的密钥不是 Google Play 期望的上传密钥用 keytool -list -v -keystore your.jks 比对 SHA-1 指纹;找到正确的 keystore,或在 Play Console 中申请重置上传密钥您
Play Console:Version code … has already been usedversionCode 没有提高提高 app/build.gradle 中的 versionCodeClaude
Play Console:You uploaded a debuggable APK or Android App Bundle上传的是调试构建版本用 bundleRelease 构建,并上传 app/build/outputs/bundle/release/ 中的 .aabClaude
Play Console:目标 API 级别错误targetSdk 低于 Google 当前的要求参见下方的 targetSdk 部分Claude 和您

我的iOS WebView应用终于通过审核了。谢谢!!

塔哈·法鲁基(Taha Farooqui) · CodeCanyon

重命名包名而不破坏构建

WebViewGold for Android 自带的包名是 com.webviewgold.myappname,发布文档要求您在首次上传之前备份项目并重命名包名(有一段视频演示完整的重命名,另一段演示如何缩短名称)。这涉及三个标识符,而代理往往只改其中一个:

  • app/build.gradle 中的 applicationId:它是应用在 Google Play 中的身份。它必须唯一,首次上传后就永远不能更改;参见只选一次。
  • namespace:生成的 R 和 BuildConfig 类所在的包。
  • 源码文件夹的 Java 包,以及每个文件顶部的 package 行。

按照视频中演示的重构方式重命名,然后让 Claude Code 用 grep -rn "com.webviewgold.myappname" app/ 查找遗漏之处。更新所有应该随新名称一起改变的内容,包括 Firebase 的 google-services.json,以及(如果您使用 App Links)assetlinks.json 中的包名。该文件还列有一个 SHA-256 指纹:启用 Play 应用签名后,请使用 Play Console 中显示的应用签名密钥指纹,而不是您上传密钥的指纹。

让签名信息远离仓库

如果您从头开始设置发布签名,这是 Android 的标准做法:签名值来自一个只存在于您机器上的 keystore.properties 文件。把它作为一次性的、经过审阅的改动(自己写,或者让 Claude 添加一次),由您自己创建 keystore 和 properties 文件,并让两者都远离 Git。如果您的项目已经有一个能正常工作的 signingConfigs 代码块,就不要动它。

groovy
// app/build.gradle (excerpt, merge into the existing file)
def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

android {
    signingConfigs {
        release {
            if (keystorePropertiesFile.exists()) {
                storeFile file(keystoreProperties["storeFile"])
                storePassword keystoreProperties["storePassword"]
                keyAlias keystoreProperties["keyAlias"]
                keyPassword keystoreProperties["keyPassword"]
            }
        }
    }
    buildTypes {
        release {
            // keep the template's existing release options, add only this line
            signingConfig signingConfigs.release
        }
    }
}

// keystore.properties lives next to settings.gradle and is NOT committed
// (add keystore.properties, *.jks and *.keystore to .gitignore):
// storeFile=/Users/you/keys/example-upload.jks
// storePassword=...
// keyAlias=upload
// keyPassword=...

修复循环

先环境,后项目,最后才是签名。

  1. 准备好机器

    安装 Android Studio 并打开一次项目,让它下载 SDK 并创建 local.properties。然后在包含 gradlew 的文件夹中启动 Claude Code。

  2. 诊断

    粘贴下面的提示词。Claude 会收集各项版本信息,用 --stacktrace 运行调试构建,并指出第一个真正的错误。

  3. 修复环境

    JDK、SDK 路径和缺失的 SDK 平台优先处理。这些修复不会改动任何一个项目文件。

  4. 以最小幅度修复项目

    如果项目改动无法避免,代理会提出最小的兼容版本改动,并等待您的确认。单独 commit 这次改动,以便轻松回退。

  5. 构建发布用的 bundle

    在 keystore 就位的情况下运行 ./gradlew bundleRelease,或者在 Android Studio 中通过 Build > Generate Signed App Bundle 构建。

  6. 先上传到内部测试

    把 Play Console 的任何错误粘贴到 Claude Code 中。新的个人开发者账号在发布正式版之前还需要完成一次封闭测试;参见12 名测试人员要求。

诊断提示词

第 5 点最重要:代理修复构建时,永远不需要您的 keystore 或密码。

在 Android 项目文件夹中粘贴到 Claude Code
这个文件夹是一个 WebViewGold Android 项目(包含 gradlew)。构建失败了。在改动任何内容之前先进行诊断。

1. 运行 ./gradlew --version 和 java -version,打印 JAVA_HOME,并显示:gradle/wrapper/gradle-wrapper.properties 中的 distributionUrl、Android Gradle 插件版本、compileSdk、targetSdk、minSdk、applicationId、namespace、versionCode 和 versionName。
2. 运行 ./gradlew assembleDebug --stacktrace,并把输出保存到 build-debug.log。
3. 引用第一个真正的错误并解释原因。说明它是环境问题(JDK、SDK 位置、缺失的 SDK 平台)还是项目问题。
4. 优先修复环境。除非错误使其无法避免,否则不要升级 Android Gradle 插件、Gradle、Kotlin 或任何依赖项;如果确实无法避免,请提出最小的兼容改动,并等待我的确认。
5. 绝不要打开、打印或修改 keystore 文件、keystore.properties、密码或 signingConfigs 代码块。
6. 调试构建通过后,给我构建发布 bundle 的命令,并列出 Google Play 会检查的值:targetSdk 是否符合当前要求,以及 versionCode 是否高于我上一次上传的版本。

常见陷阱

  • Android Studio 每次提示都点“Upgrade”。AGP 升级助手(Upgrade Assistant)适合在两次发布之间使用,而不是在发布进行到一半的时候。
  • 提交机器专属文件。local.properties 包含您的 SDK 路径,keystore 包含您的发布身份。两者都应写进 .gitignore。
  • 丢失上传密钥。启用 Play 应用签名后,应用签名密钥由 Google 保管,您可以申请重置上传密钥。如果既没有备份,也没有启用 Play 应用签名,您就再也无法更新应用。今天就把 keystore 及其密码备份到密码管理器中。
  • 用搜索替换来重命名包名。在整个项目(包括构建文件夹)中替换文本,会产生一些看似毫不相关的错误。用 IDE 重命名,然后再搜索遗漏之处。
  • 首次上传后更改 applicationId。Google Play 会把它视为另一个应用:没有安装量、没有评价,也无法作为更新发布。
  • 指望云端会话构建 Android 应用。Claude Code 网页版运行在一台装有 OpenJDK 21 和 Gradle、但没有 Android SDK 的 Linux 虚拟机中,所以不做额外设置的话,它可以编辑项目,却无法构建。请在本地构建,或使用 Cloud Builder。

上传前的检查清单

  • Config.java 中的 HOST 和 HOME_URL 指向生产域名。
  • applicationId 已最终确定,并与 Play Console 中的应用一致。
  • 已提高 versionCode,已设置 versionName。
  • targetSdk 符合 Google Play 当前的要求。
  • 如果使用 Firebase,google-services.json 与包名一致。
  • 签名所用的上传密钥,其 SHA-1 与 Play Console 中显示的一致。
  • 您上传的是 .aab 文件,而不是 APK。
  • 如果使用 App Links,assetlinks.json 列出了包名和 Play 应用签名的 SHA-256。

常见问题

WebViewGold Android 项目应该使用哪个 JDK?

Android Studio 自带的 JDK 是稳妥的默认选择,因为 IDE 就是用它来运行 Gradle 的。AGP 8 及更新版本至少需要 JDK 17;把 JAVA_HOME 指向同一个 JDK,就能在终端中使用它。

为什么构建在 Android Studio 中能成功,在 Claude Code 中却不行?

几乎总是因为终端中的 JDK 不同,或者缺少 SDK 路径。比较两处 ./gradlew --version 的输出,并相应地设置 JAVA_HOME 和 sdk.dir。

我弄丢了 keystore。Claude Code 能帮我找回吗?

丢失的密钥谁也找不回来。如果您的应用启用了 Play 应用签名,请在 Play Console 中申请重置上传密钥,并创建新的上传密钥。没有启用 Play 应用签名的话,丢失密钥就意味着要重新创建一个应用条目。

为了新的 targetSdk 要求,我必须更新 WebViewGold 吗?

严格来说不必,但这通常是风险最低的做法,因为最新的项目已经使用了相互兼容的 Gradle 和插件版本。更新是免费的,Claude Code 可以帮您把设置迁移过去。

不用 Android Studio 能构建 Android 应用吗?

可以。安装 Android SDK 命令行工具后,./gradlew bundleRelease 就能在终端中完成构建。如果完全不想在本地做任何设置,Cloud Builder 会在浏览器中编译并上传应用。

让您的应用上架商店的三种方式

结果相同,只是您需要投入的工作量不同。三种方式都附带审核通过保证和 7×24 小时人工支持。

自己动手

$109 每个平台,一次性付费

WebViewGold 许可证:一个现成的 Xcode 或 Android Studio 项目。粘贴您的 URL,设置名称和图标,开启所需功能,构建并提交。永久免费更新。

在主页查看方案

Cloud Builder

$349 每个许可证,一次性附加购买

无需 Mac、Xcode 或 Android Studio:在浏览器中完成配置,我们在云端构建两个应用,并将其交付到 App Store Connect 和 Play Console。

Cloud Builder 如何运作 试用免费演示

Full Service

$698 每个平台 $798

把您的 URL 和图标发给我们。我们的团队在 72 小时内完成配置、构建并交付您的应用,白标,附源码项目。两个平台共 $1,158。

Full Service 详情 服务提供方: WeSetupYourWebViewApp

冬季特惠价格有效期至 2026年12月31日。

准备好发布您的应用了吗?

App Store & Google Play 审核通过保证 – 否则 14 天内退款

想直接交给我们?Full Service:我们在 72 小时内完成配置、构建并交付,每个平台 $698 起。有疑问?通过 7×24 小时在线聊天联系我们。

退款依据我们 FAQ 中列出的条件:应用因非内容原因被 Apple 和/或 Google 拒审,并在购买后 14 天内提出申请。