【发布时间】:2019-10-27 23:29:00
【问题描述】:
我的库项目有一个定位服务,并且根据 Android Q 要求,它在清单中设置了 android:foregroundServiceType="location" 属性。当应用程序模块使用我的库并针对 API 级别 28 进行编译时,它会失败并出现以下错误:
AndroidManifest.xml:57: AAPT: error: attribute android:foregroundServiceType not found.
我的库如何保持与旧版本的兼容性,同时确保该功能适用于 Android Q?
【问题讨论】:
-
每个人都应该使用最新的
compileSdkVersion。在库的清单中包含该属性不会影响运行时向后兼容性,这是更关键的一点。 -
@CommonsWare 我想避免破坏任何人的自动构建。我希望有一种方法可以避免强迫开发人员更新他们编译的 SDK。
-
您可以分发两个库,一个用于针对 Q+ 的库,一个用于针对旧设备的库,其中此清单属性仅出现在前者中。然后,您需要检查 old-target 库中的
PackageManager以确认应用程序确实以 compileSdkVersion 或添加清单合并内容以删除您的属性。 -
定位服务是什么意思??您是否在前台服务中使用 FusedLocationProviderClient 请求位置更新?如果我们不在清单文件中使用这个属性 android:foregroundServiceType="location" 会发生什么??
-
@PradeepkumarReddy 我的意思是请求位置的服务。它不一定必须使用
FusedLocationProviderClient。如果不设置此属性,您的应用将不会收到具有“使用时”权限的更新位置。您应该阅读 Android 文档。
标签: android android-manifest android-10.0