如何在保持向后兼容性的同时将frontendServiceType添加到库清单中?

时间:2019-06-13 11:20:56

标签: android android-manifest androidq

我的图书馆项目有一个定位服务,并且根据Android Q的要求,它在清单中设置了android:foregroundServiceType="location"属性。当某个应用程序模块使用我的库并根据API级别28进行编译时,它将失败,并显示以下错误:

AndroidManifest.xml:57: AAPT: error: attribute android:foregroundServiceType not found.

在确保功能可以在Android Q上运行的同时,我的库如何保持与旧版本的兼容性?

2 个答案:

答案 0 :(得分:2)

我有同样的错误,并且迁移到Androidx并将compileSdkVersion从28更新到29后,我的问题已解决。因此,请进行这些更改,您将获得解决方案

答案 1 :(得分:0)

我的目标是避免在库版本更新时破坏任何人的构建,同时避免强迫开发人员根据API 29进行编译。看来我有两种选择:

  • 提供一个单独的库,以使开发人员不会对API 28及更低版本进行编译;
  • 警告开发人员以新版本为目标,以使用tools:node="replace"替换清单中的服务定义。

第一种方法的问题是,我将需要维护两个库一段时间。第二个问题是,开发人员在更新SDK版本后必须记住要还原更改。

就我而言,我将采用第二种方法。通过在面向Android Q时将显式的前台服务类型传递给startForeground方法,如果清单中未设置该类型,则会导致崩溃。因此,开发人员可以在定位Android Q时捕获此错误,并还原清单更改以对其进行修复。