只有一个带有 Camera2 和旧相机 API 的 APK
Posted
技术标签:
【中文标题】只有一个带有 Camera2 和旧相机 API 的 APK【英文标题】:Only one APK with Camera2 and old camera API 【发布时间】:2017-04-29 22:21:29 【问题描述】:我有一个使用 camera2 API 和旧相机版本的应用。问题是我需要使用 minSdkVersion 16 生成单个 APK,并且由于显而易见的原因,camera2 不能一起编译。
我通过为 Camera2 制作了一个独家照片应用程序来快速解决这个问题。我检测到用户的 android 版本,如果大于或等于 5.0 (21),则触发此特定应用的 Intent。我无法为这个问题找到一个优雅的解决方案。
那么...在这种情况下我怎样才能只生成 APK?
【问题讨论】:
你可以尝试向opencamera学习,按照Commonsguy所说的去做 @rupinderjeet 这对我来说不是一个好方法。感谢您的建议。 【参考方案1】:选项 A:同时使用两种 API
第 1 步:将您的 compileSdkVersion
设置为 21 或更高。理想情况下,对于最新版本的 Android,将其设置为 25。
第 2 步:为这两个 API 编写代码。
第 3 步:仅在设备运行 Android 5.0+ 时调用使用 android.hardware.camera2
类的代码:
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP)
// use camera2
else
// use Camera
选项 B:仅使用经典相机 API
android.hardware.Camera
在 Android 7.1 和更早版本的设备上运行良好。在从 Android SDK 中删除 android.hardware.Camera
之前,只需使用它即可。但是,您将无法利用 android.hardware.camera2
类提供的任何新功能。
【讨论】:
亲爱的,我的问题是如何使用 minSdk 16 将 camera2 放在同一个包 (APK) 中,以避免另一个 APK 的实施需要 minSdk 作为 21。 compileSdkVersion 是 25。如你所说,我已实现第 3 步。 @Mateus:“关于我如何使用 minSdk 16 将 camera2 放在同一个包 (APK) 中以避免另一个 APK”——这就是选项 A。我对选项 B 的看法是你是什么努力去做可能不值得。 “正如你所说,我已经实施了第 3 步”——那你为什么要问这个问题,既然你已经实施了呢? @Mateus:例如,我使用this library 中的选项A 及其相关应用已经一年多了。我已经在 50 多台设备上对其进行了测试,并且该方法运行良好。以上是关于只有一个带有 Camera2 和旧相机 API 的 APK的主要内容,如果未能解决你的问题,请参考以下文章
Camera2用Android API 29中的两个物理流替换一个逻辑流
使用 Android L 和 Camera2 API 处理相机预览图像数据
Android Camera API/Camera2 API 相机预览及滤镜贴纸等处理
Android Camera API/Camera2 API 相机预览及滤镜贴纸等处理