我们知道,AS Run 起来的 Apk,会使用 Debug 签名进行签名,不过安装不上,并不是签名的问题。
而是因为,Run 出来的 APK,会在 AndroidManifest.xml 文件中,增加 android:testOnly 属性,正是因为这个属性,阻止了我们使用正常方式安装 APK。
android:testOnly 对应的是 ApplicationInfo 中的 FLAG_TEST_ONLY,这个 Flag 最早在 Api Level 4 就已经存在,使用它不会有任何低版本兼容的问题。
虽然 FLAG_TEST_ONLY 属性最早可以追溯到 APK Level 4,但是它其实是在 Android Studio 3.0 上才被默认加入到 APK 中的。只有 AS 3.0+ 的 IDE 上,Run 出来的 APK,才会默认带上 testOnly 属性,这将阻止你使用正常的方式安装。
简单小结一下:
我们无法通过正常安装方式,安装一个带有 android:testOnly="true" 的 Apk。这个属性,是在 AS 3.0 中加入的。这就是为什么你无法安装 Run 出来的 Debug.apk。
2.2 为什么要这么设计?
这个问题,对于大多数开发者来说,基本上不是问题。
2.3 是不是真的无法安装?

如果我们非要安装一个带有 testOnly 的 Apk,其实也是有办法的,否则 AS 又是如何将 Run 起来的包,安装到设备上的呢?
解决方法也很简单,只需要在 adb install 上,增加 -t 即可。
adb install -t debug.apk如果想要阻止 AS 在 Run 时,构建的 APK 中增加 android:testOnly 标记,也是有办法的。
可以在 gradle.properties 文件中,增加 android.injected.testOnly=false 即可。
# gradle.propertiesandroid.injected.testOnly=false然后这个 android:testOnly 属性就会消失。
三. 小结时刻
AS Run 出来的 Apk,之所以无法安装,是因为其携带了 FLAG_TEXT_ONLY 这个 Flag,它会阻止我们使用正常的方式安装。想要安装,可以通过 adb install -t 来解决。
虽然这个 Flag 初始于 API Level 4,但是它在 AS 3.0 中,才被默认加入。想要去掉可以通过增加 android.injected.testOnly=false 来实现。
这个问题当个小知识点了解一下即刻,正常我们也不会遇到这样的问题,毕竟谁会把一个 Run 出来的包出去呢。
标题:揭秘老板手机无法安装运行APK文件的原因
链接:https://www.ltthb.com/news/sypc/137155.html
版权:文章转载自网络,如有侵权,请联系删除!
用户评论
这个真的太扎心了!感觉我平时写代码的时候也是这样的,一遍检查过一遍又过,结果还是发现问题😂
有19位网友表示赞同!
我也遇到过类似的情况!每次都觉得apk构建好后应该没问题,结果发给领导装不上气愤不已。后来发现是安卓版本不兼容的问题,真是细节需要注意啊。
有9位网友表示赞同!
可能是版本问题?我记得之前编译成功,但最终发布的时候却出了什么设备兼容性的错误,当时真的是欲哭无泪
有19位网友表示赞同!
建议多检查运行环境条件,比如 SDK 版本、系统版本等,可能和你的手机配置不同造成的。总之保持良好的调试习惯,避免类似。。发生!
有17位网友表示赞同!
遇到这种情况简直是太崩溃了!我曾经就因为这个跟老板吵了一架,现在想想真是幼稚😓 以后一定要提前沟通好版本的兼容性问题!
有10位网友表示赞同!
我跟你一样也是把apk发给了客户,结果装不上然后电话接到过不停。后来才知道是版本不一致的锅啊!
有15位网友表示赞同!
我也经历过类似的事情。还好老板比较理解,安慰我了半天😅 希望你也能顺利解决这个问题。
有18位网友表示赞同!
有没有考虑一下重新编译后打包?
有9位网友表示赞同!
我猜可能是你在运行代码的时候没有把所有的文件都包含进去导致的问题吧!之前遇到过这样的情况,需要仔细检查一下代码逻辑。
有14位网友表示赞同!
这种事情真是太让人蛋疼了,建议你将开发环境和发布环境的配置进行统一,尽量避免出现差异造成的问题
有7位网友表示赞同!
是不是签了证书失败?签名文件路径是否正确?
有11位网友表示赞同!
有没有检查 APK 包大小?超过系统限制就会报错。还有就是权限问题,是否申请了足够的权限?
有9位网友表示赞同!
这种尴尬的情况简直不要太常见。多测试几次,仔细查看 log 可以找到一些蛛丝马迹.
有14位网友表示赞同!
我建议你将运行环境和发布环境的配置进行统一,尽量避免出现差异导致的问题!还有就是检查 APK 文件是否为真实文件,不是一些假文件或空文件。
有7位网友表示赞同!
可能是 apk 安装路径错误吧?看看目标设备是否允许安装应用。
有20位网友表示赞同!
遇到这种问题首先要冷静,仔细检查每个步骤,从代码到编译到打包再到发布的环境都要核对。还有,把详细的错误信息记录下来,以便更有效地定位问题的根源。
有14位网友表示赞同!
也许 apk 下载速度慢导致不完整?试试别的方式下载安装看下,或者用其他设备试试。
有8位网友表示赞同!
建议你多练习编译apk的步骤,熟悉每个环节的操作细节,这样在遇到问题时就能更快地找到解决方案!此外,也要学习一些常见的编译错误解决方法。
有9位网友表示赞同!