gradle升级到3.5.2
build tools gradle 版本升级到 3.5.2
—— gradle最低版本是 5.4.1 https://services.gradle.org/distributions/gradle-5.4.1-all.zip
Plugin version
Required Gradle version
1.0.0 - 1.1.3
2.2.1 - 2.3
1.2.0 - 1.3.1
2.2.1 - 2.9
1.5.0
2.2.1 - 2.13
2.0.0 - 2.1.2
2.10 - 2.13
2.1.3 - 2.2.3
2.14.1+
2.3.0+
3.3+
3.0.0+
4.1+
3.1.0+
4.4+
3.2.0 - 3.2.1
4.6+
3.3.0 - 3.3.2
4.10.1+
3.4.0 - 3.4.1
5.1.1+
3.5.0+
5.4.1-5.6.4
遇到的问题:
1、 cannot generate view binders java.lang.StackOverflowError at
android.databinding.tool.expr.Expr.resolveListeners(Expr.java:209)
at android.databinding.tool.expr.Expr.resolveListeners(Expr.java:211)
at android.databinding.tool.expr.Expr.resolveListeners(Expr.java:211)
解决方法:
去除xml文件中databing熟悉的get()方法,如在xml中定义了一个ObservableBoolean flag,不要使用flag.get()
2、INFO: DSL element 'useProguard' is obsolete and will be removed soon. Use 'android.enableR8' in gradle.properties to switch between R8 and Proguard..
android sdk版本升级
compileSdkVersion 28 -> 29
targetSdkVersion 26 -> 29
buildToolsVersion 28.0.3 -> 29.0.2
升级到android 9(28)需要注意点:
官方api:Android 9变更
Apache HTTP 客户端弃用:从 Android 9 开始,该内容库已从 bootclasspath 中移除,且默认情况下应用无法使用它。要继续使用 Apache HTTP 客户端,以 Android 9 及更高版本为目标平台的应用可以向其 AndroidManifest.xml 添加以下内容:
现在强制执行 FLAG_ACTIVITY_NEW_TASK 要求。在 Android 9 中,您不能从非 Activity 环境中启动 Activity,除非您传递 Intent 标志 FLAG_ACTIVITY_NEW_TASK。 如果您尝试在不传递此标志的情况下启动 Activity,则该 Activity 不会启动,系统会在日志中输出一则消息。
注:在 Android 7.0(API 级别 24)之前,标志要求一直是期望的行为并被强制执行。 Android 7.0 中的一个错误会临时阻止实施标志要求。
屏幕旋转变更。从 Android 9 开始,对纵向旋转模式做出了重大变更。 在 Android 8.0(API 级别 26)中,用户可以使用 Quicksettings 图块或 Display 设置在自动屏幕旋转和纵向旋转模式之间切换。 纵向模式已重命名为旋转锁定,它会在自动屏幕旋转关闭时启用。 自动屏幕旋转模式没有任何变更。
幕方向
行为
指定、user
在自动屏幕旋转和旋转锁定下,Activity 可以纵向或横向(以及颠倒纵向或横向)呈现。 预期同时支持纵向和横向布局。
serLandscape
在自动屏幕旋转和旋转锁定下,Activity 可以横向或颠倒横向呈现。 预期只支持横向布局。
serPortrait
在自动屏幕旋转和旋转锁定下,Activity 可以纵向或颠倒纵向呈现。 预期只支持纵向布局。
ullUser
在自动屏幕旋转和旋转锁定下,Activity 可以纵向或横向(以及颠倒纵向或横向)呈现。 预期同时支持纵向和横向布局。旋转锁定用户将可选择锁定到颠倒纵向,通常为 180º。
ensor、fullSensor、sensorPortrait、sensorLandscape
忽略旋转锁定模式首选项,视为自动屏幕旋转已启用。 请仅在例外情况下并经过仔细的用户体验考量后再使用此项。
隐私权变更
限制访问通话记录
限制访问电话号码
对使用非 SDK 接口的限制 —— 官方文档介绍
为帮助确保应用稳定性和兼容性,此平台对某些非 SDK 函数和字段的使用进行了限制;无论您是直接访问这些函数和字段,还是通过反射或 JNI 访问,这些限制均适用。 在 Android 9 中,您的应用可以继续访问这些受限的接口;该平台通过 toast 和日志条目提醒您注意这些接口。 如果您的应用显示这样的 toast,则必须寻求受限接口之外的其他实现策略。 如果您认为没有可行的替代策略,您可以提交错误以请求重新考虑此限制。
黑名单中的非 SDK 接口
Dalvik 指令引用某个字段
alvik 指令引用某个方法
过 Class.getDeclaredField() 或 Class.getField() 进行反射
过 Class.getDeclaredMethod()、Class.getMethod() 进行反射
过 Class.getDeclaredFields()、Class.getFields() 进行反射
过 Class.getDeclaredMethods()、Class.getMethods() 进行反射
过 env->GetFieldID() 进行 JNI 调用
过 env->GetMethodID() 进行 JNI 调用
升级到android 10(29)
对使用非 SDK 接口的限制进行了更新
针对全屏 Intent 的权限变更
支持可折叠设备