9

My library project has a location service, and per Android Q requirements it sets the android:foregroundServiceType="location" attribute in the manifest. When an app module uses my library and compiles against API level 28, it fails with the following error:

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

How can my library maintain compatibility with older versions, while making sure the functionality works on Android Q?

4

2 回答 2

13

我有同样的错误,在迁移到28 到 29Androidx并更新后,我的问题得到了解决。compileSdkVersion所以请做这些改变,你可以得到你的解决方案

于 2020-04-30T07:23:12.907 回答
6

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

  • 提供单独的库,以便针对 API 28 及更低版本进行编译的开发人员不会受到影响;
  • 警告针对新版本的开发人员使用tools:node="replace".

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

就我而言,我将采用第二种方法。通过startForeground在面向 Android Q 时将显式前台服务类型传递给方法,如果未在清单中设置类型,我可能会导致崩溃。因此,开发人员可以在针对 Android Q 时捕捉到这一点,并恢复清单更改以修复它。

于 2019-06-17T14:04:41.220 回答