最近看友盟上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)我明显写入的黑名单方法,工具却没有检测出来,如下图:
(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 | 系统版本 | blacklist | dark-grey | light-grey |
---|---|---|---|---|
28 | P或Q | 报错NoSuchFieldException | 报错NoSuchFieldException | 正常访问 |
28 | 低于P | 报错NoSuchFieldException | 报错NoSuchFieldException | 正常访问 |
低于28 | P或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