热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AndroidtargetSDK升级到28,gradle升级4.6遇到的问题

  最近看友盟上app使用的设备统计,Android8.1以上的用户超过60%,于是想把targetSDK直接从26改成28,这样就可以更好地适配8.1的用户

  最近看友盟上app使用的设备统计,Android8.1以上的用户超过60%,于是想把targetSDK直接从26改成28,这样就可以更好地适配8.1的用户。但是遇到了如下一些问题,以及最终黑白灰名单的问题无法确认完全搞定,于是放弃掉,还是保留在targetSDK=26,等待新系统Q出来以及P的用户增多稳定后,再一起切换成29吧。

遇到的问题:
1.修改如下android编译参数:

compileSdkVersion = 28
buildToolsVersion = "28.0.3"
targetSdkVersion = 28
supportVersion = "28.0.0"

并修改gradle插件版本成:

classpath 'com.android.tools.build:gradle:3.2.0'

gradle的版本修改成4.6, sync后,编译出现如下错误:
在这里插入图片描述

解决方法: 对着代码看,有一段我是这么写的:

variant.mergedFlavor.versionCode = gitBuildCode()

上面的代码,在Gradle4.6就不支持,不能直接修改,所以不能直接这么用,应该改成这样:

def versionCode = gitBuildCode()

2.Http明文网络加载被限制,报错“Cleartext HTTP traffic to xxx not permitted”,之前可以正常显示的Http图片,以及webview打开报错了。
出异常的系统版本是 O(8.1) P 和 Q, 在 O(8.0)及以下的机型,都可以正常显示。

解决方法: 由于APP里面还有部分接口数据没完全转成https,所以不能用网上一些说的过滤指定域名的方法,需要一个类似通配符,允许所有的http流量,所以是选择了AndroidManifest.xml里的application标签里,加上:

android:usesCleartextTraffic="true"

3.用google工具veridex来静态检测黑白灰名单,但是三个问题:
(1)我明显写入的黑名单方法,工具却没有检测出来,如下图:
在这里插入图片描述
在这里插入图片描述

但是APP运行时候,logcat会报错,提示是黑名单方法:
在这里插入图片描述

(2)veridex工具这段时间也在不断地更新,检测结果已经没有网上文章说的那种dark-grey或者light-grey了,都只是greylist,我不好区分哪些greylist以后是会被禁止使用:
在这里插入图片描述

(3)当targetSDK为不同参数时候,分别运行如下3种测试代码,会有不同的表现:

// 直接在浅灰名单中找的接口
public void testLightGreyList() {ReflectUtils.getMethod(TelephonyManager.class, "isMultiSimEnabled");
}// 直接在深灰名单中找的接口
@TargetApi(Build.VERSION_CODES.M)
public void testDarkGreyList() {ReflectUtils.getField(CarrierConfigManager.class, "KEY_ALWAYS_PLAY_REMOTE_HOLD_TONE_BOOL");
}// 直接在黑名单中找的接口
public void testBlackList() {try {ReflectUtils.getMethod(ReflectUtils.getClass("android.net.util.IpUtils"), "ipChecksum", ByteBuffer.class, int.class);} catch (ClassNotFoundException e) {e.printStackTrace();}
}

具体的这三种表现如下表格:

targetSDK系统版本blacklistdark-greylight-grey
28P或Q报错NoSuchFieldException报错NoSuchFieldException正常访问
28低于P报错NoSuchFieldException报错NoSuchFieldException正常访问
低于28P或Q报错NoSuchFieldException正常访问正常访问
低于28低于P报错ClassNotFoundException报错NoSuchFieldException正常访问

鉴于如上第二、第三小点的问题,让我迟疑不决,不知道是否还有其他第三方SDK方法,灰黑名单会变动,导致后面的系统会把他们api禁止掉,希望有人帮忙解答下?

4.不把targetSDK设成28,将其设置成27,也是有一个奇葩的问题如下,虽然有一些比较绕的解决方法,但是感觉实现不优雅。
在这里插入图片描述

综上第三、第四大点的问题,我又讲targetSDK改回26了…

参考:
https://blog.csdn.net/qq_38900441/article/details/84308348 “Webpage not available err_cleartext_not_permitted”
https://zhuanlan.zhihu.com/p/32190223 “Only fullscreen activities can request orientation?一个搞笑的坑!”

原创文章,欢迎转载,转载请注明:ifish.site

作者:JaydenZhou


推荐阅读
author-avatar
一号小蘑菇妖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有