TargetSdkVersion 27 遇到的问题


借着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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容