背景
具体介绍:脱离 Android Studio:纯命令行开发 Android 相机 App 的实践与踩坑记录
本人计算机学生,纯用 VS Code + Gradle 命令行写了一个 Android 相机 App(Kotlin + CameraX + Camera2Interop)。核心功能是手动调参数(ISO、快门、对焦、色温),并能保存多组"预设"一键调用。
目前项目在我的手机(荣耀Magic7)上能跑通,但在开发过程中遇到了很多问题,自己已经试过一些方案但收效甚微。特来求助各位大佬,希望能给出思路!
🆘 问题一:ADB 无法链接手机
-
现象 :用 USB 数据线连接电脑(拯救者 Y9000P)和手机(荣耀Magic7),在 VS Code 终端里执行
adb devices始终为空。手机有弹窗提示"正在充电",但尝试开启"USB 调试"和"传输文件"模式,依然无反应。偶尔能玄学连上一次,但很快断开。无线调试配对时报protocol fault错误。 -
已尝试 :
adb kill-server重启服务、换过数据线、换过电脑 USB 接口、确认了开发者选项中的 USB 调试已开启,按照CSDN一部分帖子修改过开发者选项。最终都无效,仅某一次意外连接成功,最终选择纯手动侧载(Sideloading) 的方式:每次编译出app-debug.apk后,通过微信文件传输,将测试包发送到手机,手动授予'未知来源应用安装权限'后完成安装。" -
求助:这种情况通常是什么原因导致的?有没有除了重装系统之外的排查手段,或者如何抓取底层 USB 报错?
🆘 问题二:底层色温调节失效,只能靠软件图层硬凑
-
现象 :我想手动调色温,使用了
Camera2Interop强行注入了CONTROL_AWB_MODE_OFF和RggbChannelVector的红蓝增益,结果画面毫无变化(被底层 ISP 忽略)。 -
已尝试 :额外加了
CONTROL_AWB_LOCK = true锁定,也尝试了COLOR_CORRECTION_MODE_HIGH_QUALITY,均无效。 -
目前的妥协方案 :在
PreviewView上方盖了一层透明的View,通过改背景色(冷加蓝、暖加橙)和透明度来模拟色温,拍照时再用Canvas把颜色画到 Bitmap 上。 -
求助:在不换手机的前提下,有没有办法强行让 Android 的硬件层(Camera2)接受手动注入的 AWB 增益?或者有更好的软件滤镜方案(比如 OpenGL 着色器)推荐吗?
🆘 问题三:其他类型安卓手机存在兼容问题
-
现象 :我把自己编译好的
app-debug.apk发给朋友(OPPO ColorOS),安装成功,但点击图标后屏幕黑一下直接闪退,没有任何报错弹窗。 -
已尝试 :代码里
rebindCamera()已经包了try-catch,如果是 Java 异常应该会 Toast 提示,但完全没弹出来。 -
猜测 :怀疑是
com.example.presetcamera包名被系统视为高危测试应用,或者是强行注入CONTROL_AE_MODE_OFF触发了底层 JNI 崩溃。 -
求助:
-
在无法用 ADB 连接手机的情况下,怎么才能抓到 OPPO 手机的崩溃日志?
-
有没有什么代码判断机制,可以在手机不支持底层参数注入时,自动降级为"普通预览+拍照"模式,保证 App 不闪退?
-
针对兼容问题,还有什么好的解决方法吗?
-
核心代码片段
kotlin
val interop = Camera2Interop.Extender(previewBuilder)
// 强行关闭自动曝光
interop.setCaptureRequestOption(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_OFF)
interop.setCaptureRequestOption(CaptureRequest.SENSOR_SENSITIVITY, currentIso)
interop.setCaptureRequestOption(CaptureRequest.SENSOR_EXPOSURE_TIME, currentShutterNs)
// 强行关闭自动对焦
interop.setCaptureRequestOption(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_OFF)
interop.setCaptureRequestOption(CaptureRequest.LENS_FOCUS_DISTANCE, currentFocusDistance)
如果有遇到过类似问题的大佬,求指点一二!或者提供一些排查思路也行,非常感谢!🙏