最近,我把自己做的 App 更新到了 Google Play。
这个 App 叫 TransferIQ,是一个比较外汇、跨境汇款和加密货币兑换路线的工具。
我本身不会写代码,整个产品主要是借助 AI,一边学习、一边修改、一边上线。
原本以为这次更新只是增加一个底部广告,应该不会有太大问题。
结果新版本发布后,我点击 App 图标,启动画面刚出现,应用就直接关闭了。
再打开,还是一样。
点击图标 → 出现启动画面 → 立即闪退。
那一刻真的很崩溃。
因为这个 App 的主文件已经接近 9000 行。我第一反应就是:一定是最近修改功能时,把某个地方弄坏了。
于是我开始检查整个文件。
我怀疑过很多地方:
新增加的广告代码 汇率转换功能 为交易所数据增加的代理请求 变量是不是在声明前被使用 某个功能是不是在 App 启动时立即执行 生产环境和测试环境是否存在差异
我甚至专门建立了一个测试环境,模拟正式版本启动时执行整个文件。
检查结果却很奇怪。
代码语法没有问题。
App 的第一次画面加载也没有问题。
我以为会出错的地方,一个个检查下来都没有真正导致闪退。
期间我反复修改、重新构建、重新上传。
每次构建都要等待,结果安装以后还是闪退。
我一度怀疑,是不是自己用 AI 做出来的这个 App 从根本上就不稳定。
后来,我终于查看了 Android 的崩溃日志。
日志里最关键的两行是:
Invalid application ID MobileAdsInitProvider.attachInfo
看到这两行以后,调查方向终于变了。
问题根本不在那接近 9000 行的主文件里。
真正的问题在 app.json 生成的 Android 原生配置中。
我增加了 Google AdMob 广告,但 AdMob 的 App ID 没有被正确写入最终的 Android 配置。
结果就是:
Android 在启动 App 时,会先初始化广告服务。
广告服务发现 App ID 无效,便直接让整个应用崩溃。
这个过程发生在 JavaScript 代码开始运行之前。
所以,即使我在代码里写了错误处理,也完全没有作用。
因为 App 在执行到那些代码之前,就已经关闭了。
这里还有一个很容易弄错的地方。
AdMob 有两种看起来非常相似的 ID:
App ID: ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy
Banner Ad Unit ID: ca-app-pub-xxxxxxxxxxxxxxxx/zzzzzzzzzz
两者最大的区别是:
App ID 中间使用 ~ 广告单元 ID 中间使用 /
App ID 是整个应用的广告配置。
广告单元 ID 则是具体某个 Banner 或其他广告位置的编号。
如果填错位置,或者 App ID 没有正确进入 Android 的最终配置,项目仍然可能:
成功构建 成功生成安装包 成功上传 Google Play 但用户点击图标后立即闪退
最后,我重新整理了 app.json 中的 AdMob 配置,确认 App ID 和广告单元 ID 没有混用,然后重新构建版本。
问题终于解决了。
这次经历让我学到了几件事。
如果连首页都还没有显示,应用就直接关闭,应该先检查原生配置、第三方 SDK 和系统日志。
不要像我一样,一开始就盯着几千行代码反复查。
能够生成安装包,只说明构建流程完成了。
并不代表每一个配置都正确,也不代表应用在真实手机上一定能启动。
我花了很长时间检查代码。
但真正帮助我找到问题的,只是日志中的两行文字:
Invalid application ID MobileAdsInitProvider
如果一开始就看日志,可能几个小时的折腾都可以避免。
AI 可以帮助写代码、检查问题、修改功能。
但当问题涉及正式版本、Android 原生配置、第三方服务和构建环境时,必须把实际日志和准确的配置一起检查。
否则不同的 AI 也可能不断猜测,让问题变得越来越复杂。
我一直以为,问题一定藏在那接近 9000 行的文件里。
结果真正让我浪费一整天的,是文件外面的一个配置项。
对专业开发者来说,这可能只是一个很普通的问题。
但对一个没有编程背景、靠 AI 一步一步把产品做出来的人来说,这种问题真的会让人怀疑自己到底能不能继续做下去。
不过,至少这次我没有放弃。
折腾了一整天,最后还是把原因找了出来,也把版本修好了。
这款 App 叫 TransferIQ,主要用于比较外汇、跨境汇款和加密货币兑换路线。
感兴趣的话,可以直接在 Google Play 商店搜索 TransferIQ。
大家有没有经历过类似的情况?
花了几个小时检查代码,最后却发现问题根本不在代码里。