美文网首页Studio
TargetSdkVersion 27 遇到的问题

TargetSdkVersion 27 遇到的问题

作者: 阿木秀华 | 来源:发表于2018-05-15 15:52 被阅读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

    相关文章

      网友评论

        本文标题:TargetSdkVersion 27 遇到的问题

        本文链接:https://www.haomeiwen.com/subject/fetydftx.html