10月21日 刊出
不用爐上的自動模式,跟不用 Android Studio,其實是同一種倔強
一名計算機學生純用命令行開發 Android 相機 App 的求助帖,被我們翻譯成廚房裡手動控火、憑手感調味與一鍋換了爐子就可能走味的故事。
10月18日,掘金上出現一篇求助帖。一名計算機學生說,他脫離 Android Studio,只用 VS Code 加 Gradle 命令行,寫出了一個 Android 相機 App:Kotlin、CameraX,外加 Camera2Interop。他想要的功能很單純,手動調 ISO、快門、對焦、色溫,還能把好幾組參數存成「預設」,一鍵叫出來。App 在他的榮耀 Magic7 上跑通了,但一路踩坑踩得滿頭包。
這種事,讀在廚房裡的人眼裡,一點都不陌生。
你有沒有遇過那種做菜的人,堅持不用電子鍋,一定要鑄鐵鍋、瓦斯爐、憑耳朵聽水滾的聲音調火?他不信任按鈕背後那套「全自動」,他想知道每一度的溫度是從哪裡來的。這位學生就是那種人。別人打開 IDE,圖形介面把該做的都做好了;他偏要自己在終端機裡敲指令,像守著一支沒有刻度的湯勺,一勺一勺自己試。
先說他遇到的第一個坑:ADB 連不上手機。USB 線插著,手機只顯示「正在充電」,adb devices 永遠是空的。換線、換孔、重啟服務、改開發者選項,全試過,只在某一次玄學般連上,很快又斷。最後他的辦法是,每次編譯出安裝包,用微信傳到手機,手動授予權限後裝上去。
這像什麼?像你家廚房到餐廳之間那條傳菜的路斷了,只好端著盤子繞陽臺、穿客廳、跨過沙發,把湯親手放到桌上。笨,燙手,但它到得了。很多老派人家裡都留著這種繞路的習慣,正門不走,走那條摸黑也踩得出來的小徑。
第二個坑,才是這整個故事裡最有味道的部分:色溫。
他想在硬體層手動調白平衡,於是強行關掉自動模式,注入紅藍增益。結果畫面完全不動,底層的影像處理器把它忽略了。鎖定白平衡、切換高品質色彩校正,都試了,沒用。
他的妥協方案是在預覽畫面上蓋一層透明 View,想要冷調就加藍、想要暖調就加橙,調透明度來模擬色溫,拍照時再把顏色畫上去。
這一手,廚房裡叫「補救」。湯太淡,勾個芡;菜色不夠亮,起鍋前淋一點熱油。蓋上去的橙和藍,就像那勺明油,看起來油亮,喫起來也像那麼回事,但懂的人知道,那不是從火候裡熬出來的顏色。真正從鍋氣裡來的琥珀色,和事後塗上去的醬色,是兩種東西。他自己在帖裡也問:有沒有辦法讓硬體層真正接受這組參數,或者,有沒有更好的軟體濾鏡方案。
這種「底層不理你」的處境,跟炒菜時火不聽話一模一樣。你以為轉到小火它就真的是小火,結果爐頭有延遲、鍋有餘溫,菜在你反應過來之前就過了那個點。老廚師不等火,他看油紋、聽聲音、聞味道,用別的感官繞過儀表的謊言。這位學生的透明圖層,就是他的繞法。不完美,但先把菜端上桌。
第三個坑是別人家的爐子。他把編譯好的 App 傳給朋友,對方是 OPPO 的 ColorOS,安裝成功,點開圖示,螢幕黑一下,直接閃退,連報錯都沒有。他猜可能是包名被系統當成高風險測試應用,也可能是他強行關閉自動曝光的參數,觸發了更深層的崩潰。他現在想知道,連不上線的情況下怎麼抓崩潰日誌,還有沒有辦法讓 App 偵測到手機不支援時,自動退回「普通預覽加拍照」的模式,至少別閃退。
這是最像做菜的一段。你在家裡那口爐上練出的火候,換到別人家的爐子上,常常整個走樣。瓦斯壓力不同、鍋的厚薄不同、連抽油煙機吸走的熱量都不同。同一個食譜,你家的三分鐘,到別人家可能兩分鐘就焦了。會做菜的人因此學會一件事:食譜裡永遠留一條退路,寫著「視情況調整」。App 也一樣,手機千百種,底層各有各的脾氣,一個只在自家機器上驗證過的做法,端出去就得預期它可能翻鍋。他想要的自動降級,就是那行「視情況調整」,是任何一道要端給別人喫的菜,最後都該學會寫的那一行字。
這整篇求助帖,說到底是一個關於「手動」的故事。手動調 ISO,手動調色溫,手動傳檔安裝,手動把顏色畫到照片上。每一樣都比自動慢,都比自動累,但每一樣都讓他多知道了一點:機器在哪裡聽話,在哪裡不理你。
廚房教人的也是這個。全自動的東西用久了,你會忘記食物原來有自己的脾氣。手動的那條路繞遠、燙手,偶爾還會閃退,但走過一次,你就知道那鍋湯為什麼是這個味道,而不是另一個。
他最後還在等答案。像所有守在爐邊的人一樣,火還沒關,問題還燉著。