看到标题就应该知道,这又是一篇 BUG 修复的复盘文章。这个 BUG 起源于 Google 程序员多年前埋的坑【FLAG_TEST_ONLY】,这是一个 API 级别 4 时候就存在的属性。这是一个没有存在感的属性,以至于十几年的时间内都没有引起多少人注意。直到 Android Studio 3.0 的发布,这个版本的 IDE 会在测试版 APK 的清单文件中自动注入 android:testOnly="true" 属性配置。如果清单文件中有这样的配置,那就意味着 APK 只能通过 adb 的方式安装。为了更加精准的了解这个属性的作用,我们还是看下官方文档是怎么描述的。
✦ 官方文档 | android:testOnly 指示此应用是否仅用于测试目的。例如,它可能会在自身之外公开功能或数据,这样会导致安全漏洞,但对测试很有用。此类 APK 只能通过 adb 安装,您不能将其发布到 Google Play。当您点击 Run 图标时,Android Studio 会自动添加此属性。
文档的描述简洁干练,提供的信息也乏善可陈。那么,应该怎么解决这个问题呢?通过考古,网上普遍流行两种方法:
| 编号 | 解决方法 |
|---|---|
| 1 | 通过 Build -> Generate Signed Bundle / APK 生成签名文件 |
| 2 | 在 gradle.properties 中增加 android.injected.testOnly=false 配置 |
如果通过这两种方式就能解决应用安装失败的话,就不会有这篇文章了。下面,我们正式开始复盘问题的定位和解决过程。
more >>
