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

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

compileSdkVersion = 28buildToolsVersion = "28.0.3"targetSdkVersion = 28supportVersion = "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 系统版本 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

更多相关文章

  1. Bitmaps加载之内存管理
  2. Android中导入的java包详解
  3. Android(安卓)Studio 项目导入的正确姿势
  4. Android(安卓)提示版本更新的实现
  5. Android(安卓)面向协议编程
  6. Android(安卓)Studio详细的安装以及环境的搭建过程 2020.02.21
  7. 十分钟学会kotlin实现Android(安卓)MVP模式开发
  8. 最佳Android模拟器,你值得拥有
  9. 2013年7月Android设备版本及屏幕尺寸分布

随机推荐

  1. JS判断当前环境为微信,手机判断浏览器类型
  2. Android与服务器传递数据
  3. android edittext 输入手机号码格式变化
  4. android 用代码编写linearlayout布局
  5. android猜数字游戏
  6. Android(安卓)IntentService源码分析
  7. 自定义按钮实现android 返回按钮 事件
  8. Android 添加桌面快捷方式操作
  9. android 界面 滑入 效果
  10. Android 文件下载工具类