借著Google IO 2018的熱度扮叨,把項(xiàng)目依賴升級(jí)了一下姜钳。
Android Gradle Plugin: 3.1.0
Gradle: 4.7
Kotlin: 1.2.41
compileSdkVersion:? 27
buildToolsVersion:? '27.0.3'
targetSdkVersion:? 27
CompileSdkVersion升級(jí)到27之后Android Framework層一些屬性和方法有了可空類型的區(qū)分坦冠,會(huì)涉及到一些業(yè)務(wù)代碼的修改。
升級(jí)targetSdk 27 遇到的引起Crash的問題
1.? Notification適配問題:
沒有適配Android O的Notification哥桥,targetSdk在27以下只是不顯示Notification辙浑,targetSdk27之后會(huì)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
注意! 千萬不要像StackOverflow第一個(gè)答案說的那樣做已卸, 不管用7鹦!
正確的做法就是移除
android:screenOrientation="portrait"
不要加
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
有人分析原因:Android認(rèn)為非全屏的Activity應(yīng)該和他下面的Activity有一致的orientation累澡,所以不應(yīng)該設(shè)置orientation梦抢。
覺得這個(gè)最多算個(gè)warning,不應(yīng)該直接拋出異常愧哟。
這個(gè)問題涉及的功能會(huì)比較多奥吩,需要仔細(xì)檢查如微信回調(diào)、支付回調(diào)等一些本身沒有界面的Activity蕊梧。
Gradle升級(jí)之后的問題:
1. Android Gradle Plugin 3.1.0 + Gradle 4.7
默認(rèn)使用D8引擎霞赫,導(dǎo)致dexOptions設(shè)置dex包中最大方法數(shù)失效。
暫時(shí)通過關(guān)閉D8解決肥矢,gradle.properties中設(shè)置android.enableD8=false