Studio

TargetSdkVersion 27 遇到的问题

2018-05-15  本文已影响614人  阿木秀华


借着Google IO 2018的热度,把项目依赖升级了一下。

Android Gradle Plugin: 3.1.0

Gradle: 4.7

Kotlin: 1.2.41

compileSdkVersion:  27

buildToolsVersion:  '27.0.3'

targetSdkVersion:  27

CompileSdkVersion升级到27之后Android Framework层一些属性和方法有了可空类型的区分,会涉及到一些业务代码的修改。

升级targetSdk 27 遇到的引起Crash的问题

1.  Notification适配问题:

没有适配Android O的Notification,targetSdk在27以下只是不显示Notification,targetSdk27之后会Crash。

android.app.RemoteServiceException

Bad notification for startForeground: java.lang.RuntimeException: invalid channel for service notification: Notification(channel=null pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x40 color=0x00000000 vis=PRIVATE)

解决办法

2. 透明Activity适配问题

targetSdk27 之后Android8.0上Crash,在 Android 8.1 及以上没有问题。

java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation

Google Issue Tracker上的信息

StackOverflow上的信息

注意! 千万不要像StackOverflow第一个答案说的那样做, 不管用!!

正确的做法就是移除

android:screenOrientation="portrait"

不要加

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

有人分析原因:Android认为非全屏的Activity应该和他下面的Activity有一致的orientation,所以不应该设置orientation。

觉得这个最多算个warning,不应该直接抛出异常。

这个问题涉及的功能会比较多,需要仔细检查如微信回调、支付回调等一些本身没有界面的Activity。

Gradle升级之后的问题:

1. Android Gradle Plugin 3.1.0 + Gradle 4.7

默认使用D8引擎,导致dexOptions设置dex包中最大方法数失效。

暂时通过关闭D8解决,gradle.properties中设置android.enableD8=false

上一篇下一篇

猜你喜欢

热点阅读