You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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,可以选下面任意一种方式处理:
    1. 直接移除android:screenOrientation属性,让系统自动处理屏幕方向;
    2. 将Activity设置为全屏(比如使用@android:style/Theme.NoTitleBar.Fullscreen这类全屏主题);
    3. 在代码中做版本判断,仅在API26以下的设备上设置屏幕方向:
      if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
          setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
      }
      

这样修改后,升级到targetSdk27也能在API26设备上正常运行。

方案选择建议

  • 如果你只想快速解决问题,不想调整项目的SDK版本和Activity配置,优先选方案一
  • 如果你计划跟进最新的Android SDK规范,准备长期维护项目,建议选方案二,逐步适配新的系统限制。

内容的提问来源于stack exchange,提问作者ali

火山引擎 最新活动