每次android推出新系统,就不可避免的带出来一些坑!造成此问题的因素有多种:
1.android本身开源,国内手机开发厂商众多,深度定制系统的不是一家两家,导致碎片化严重。
2.app竞争日趋白热化,公司要求的是速度,以至于996类型的公司随处可见,对质量却没有很好的把关
3.公司产品经理并不会考虑你app的健壮性和可持续性,他们要的是功能,美观,流程。
4.经常拿android和ios做对比,例如为什么你们的弹框不如ios好看,为什么没有侧滑效果,为什么关闭app收不到推送等等,所以导致android强加了一些效果,增加了程序不稳定的风险
5.android自身的原因,导致程序很吃内存,例如卡顿,ANR,内存泄漏实在令人反感
好了,废话不多说,先看看我遇到的问题,版本更新用户反馈无限下载并不更新。刚刚听到这消息我第一反应这不是我们开发的事,因为我的app每天在线人数有上万人,有统计,也基本都能更新成功,那块代码一直没动过,为什么会出问题,一定是手机内存不足,或者允许位置程序安装的选项未开,或者刷机导致,或者操作问题等等!直到我看到了真机显示效果,才吃了一惊,没有任何提示手机闪了一下就完了。这我才意识到,应该是机型适配的问题,所以我就把不能安装app的手机做了机型和型号统计,发现基本都是华为手机,而系统版本基本都是8.0系统,这下就能大概确定问题所在。苦于没有手机,怎么办?找真机测试平台。
在说说真机测试平台,我用的是腾讯优测,腾讯质量开放平台,testin。为什么用3家,因为收费,1元1分钟,新账号能赠送250分钟左右,所以我就注册哈!轻易不用的。怕用光了!但是今天我已申请公司给予购买了,买不买是它的事,反正我申请了,如果公司有心应该不会拒绝,在等消息中。这三家平台,机型最全的应该是腾讯优测,tsetin次之。运行最快的应该是tsetin,腾讯优测次之。腾讯质量开放平台最差劲。腾讯优测和腾讯质量开放平台不能打开设置页面,被限制了。testin可以的。好了区别说到这。
问题产生和解决办法
Android 8.0 Oreo 中,Google 移除掉了容易被滥用的“允许位置来源”应用的开关,在安装 Play Store 之外的第三方来源的 Android 应用的时候,竟然没有了“允许未知来源”的检查框,如果你还是想要安装某个被自己所信任的开发者的 app,则需要在每一次都手动授予“安装未知应用”的许可。谷歌的原生系统在应用管理,打开相应的app,选择高级,安装位置应用点进去选择允许,就可以安装了
可是在国产手机的应用管理中居然没有。找了半天才发现,它在安全与隐私中,选择安装位置应用,进到了应用列表,但是却发现应用列表中并没有自己的应用,而且目前来说好多应用也没有。
这下就尴尬了,就是说站在用户角度,他们不知道如何设置成允许
所以只有咱们这端改代码了。
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
增加申请权限,有这一句足矣,如果想写的更好的话,加上权限判断呗
- /**
- * 判断是否是8.0系统,是的话需要获取此权限,判断开没开,没开的话处理未知应用来源权限问题,否则直接安装
- */
- private void checkIsAndroidO() {
- if (Build.VERSION.SDK_INT >= 26) {
- boolean b = getPackageManager().canRequestPackageInstalls();
- if (b) {
- publicApk();//安装应用的逻辑(写自己的就可以)
- } else {
- //请求安装未知应用来源的权限
- ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, INSTALL_PACKAGES_REQUESTCODE);
- }
- } else {
- publicApk();
- }
- }
好了,说到这。