Glide升级至4.5.0遇依赖冲突与Orientation异常的双向困境
解决Glide 4.5.0升级后的依赖冲突与API26设备崩溃问题
我之前也碰到过一模一样的两难情况,给你两个可行的解决方案,你可以根据项目的实际需求来选:
方案一:强制依赖版本统一(无需升级targetSdk)
Glide 4.5.0默认依赖的是Android Support Library 27.0.2,这和你项目里用的26.1.0版本产生了冲突。我们可以通过Gradle的依赖解析策略,强制所有Support库都使用你项目中的26.1.0版本,这样既解决版本冲突,又不用改动targetSdk。
修改你build.gradle中的configurations.all块,添加对Support库版本的强制声明:
android { configurations.all { resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9' // 强制所有冲突的Support库使用26.1.0版本 resolutionStrategy.force 'com.android.support:support-compat:26.1.0' resolutionStrategy.force 'com.android.support:support-core-ui:26.1.0' resolutionStrategy.force 'com.android.support:support-core-utils:26.1.0' resolutionStrategy.force 'com.android.support:support-fragment:26.1.0' } }
修改后同步Gradle,编译时就不会再出现版本混用的错误了,同时targetSdk保持26,API26设备上也不会触发屏幕方向的异常。
方案二:适配API26的屏幕方向限制(保留targetSdk27)
如果你想升级到targetSdk27,那就需要解决Android 8.0(API26)引入的IllegalStateException: Only fullscreen activities can request orientation异常。这个异常是因为API26开始限制非全屏Activity设置屏幕方向。
解决步骤:
- 先检查所有在AndroidManifest.xml中设置了
android:screenOrientation的Activity,区分开全屏和非全屏的; - 对于非全屏Activity,可以选下面任意一种方式处理:
- 直接移除
android:screenOrientation属性,让系统自动处理屏幕方向; - 将Activity设置为全屏(比如使用
@android:style/Theme.NoTitleBar.Fullscreen这类全屏主题); - 在代码中做版本判断,仅在API26以下的设备上设置屏幕方向:
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); }
- 直接移除
这样修改后,升级到targetSdk27也能在API26设备上正常运行。
方案选择建议
- 如果你只想快速解决问题,不想调整项目的SDK版本和Activity配置,优先选方案一;
- 如果你计划跟进最新的Android SDK规范,准备长期维护项目,建议选方案二,逐步适配新的系统限制。
内容的提问来源于stack exchange,提问作者ali




