【求助】纯命令行开发安卓相机App的一些问题,求大佬指点

背景

具体介绍:脱离 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 崩溃。

  • 求助:

    1. 在无法用 ADB 连接手机的情况下,怎么才能抓到 OPPO 手机的崩溃日志?

    2. 有没有什么代码判断机制,可以在手机不支持底层参数注入时,自动降级为"普通预览+拍照"模式,保证 App 不闪退?

    3. 针对兼容问题,还有什么好的解决方法吗?


核心代码片段

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)

如果有遇到过类似问题的大佬,求指点一二!或者提供一些排查思路也行,非常感谢!🙏

相关推荐
用户55279738499652 天前
《2009年的老古董笔记本,我是如何用它部署Go + Python高性能Web服务的》
设计
for_ever_love__2 天前
上下文工程:比提示词工程更重要的事
llm·agent·提示词·设计·context·engineering·上下文工程
Percy_kk3 天前
AI Agent 开发实践:从手写 ReAct 到框架选型
agent·设计
高晶3 天前
Android 计算器开发实战:从界面设计到核心逻辑
程序员·设计
易知微EasyV数据可视化3 天前
会插卡片的编辑器:在 Agent 输入框里混排文字与结构化内容
人工智能·经验分享·编辑器·agent·设计
广州智造4 天前
Radioss时间步长(Time Step)
前端·设计·cad·建模·cae·radioss
用户6919026813397 天前
LangChain 与 LangGraph:从「链」到「图」,一次讲清它们是什么、什么关系
面试·架构·设计
广州智造17 天前
Radioss复合材料使用的单元属性
前端·设计·cad·建模·cae·radioss
仿生狮子21 天前
实现近乎免费之后,设计工程师还剩什么
前端·后端·设计