我的图书馆项目有一个定位服务,并且根据Android Q的要求,它在清单中设置了android:foregroundServiceType="location"
属性。当某个应用程序模块使用我的库并根据API级别28进行编译时,它将失败,并显示以下错误:
AndroidManifest.xml:57: AAPT: error: attribute android:foregroundServiceType not found.
在确保功能可以在Android Q上运行的同时,我的库如何保持与旧版本的兼容性?
答案 0 :(得分:2)
我有同样的错误,并且迁移到Androidx
并将compileSdkVersion
从28更新到29后,我的问题已解决。因此,请进行这些更改,您将获得解决方案
答案 1 :(得分:0)
我的目标是避免在库版本更新时破坏任何人的构建,同时避免强迫开发人员根据API 29进行编译。看来我有两种选择:
tools:node="replace"
替换清单中的服务定义。第一种方法的问题是,我将需要维护两个库一段时间。第二个问题是,开发人员在更新SDK版本后必须记住要还原更改。
就我而言,我将采用第二种方法。通过在面向Android Q时将显式的前台服务类型传递给startForeground
方法,如果清单中未设置该类型,则会导致崩溃。因此,开发人员可以在定位Android Q时捕获此错误,并还原清单更改以对其进行修复。