Re: [心得] adb編譯,啟動!解救慢吞吞的老手機!

看板MobileComm (行動通訊)作者 (我要成為幹話王)時間2天前 (2025/03/24 12:36), 2天前編輯推噓16(16028)
留言44則, 16人參與, 21小時前最新討論串1/1
因為我的舊手機是固定丟在車上當導航的 懶得拿回家裡接線 所以研究了一下無線ADB簡單分享給大家 基本上只要連在同一個網路的兩支手機, 甚至用同一隻手機操作都可以 不用接線了 以下針對要被ADB的手機成為目標手機 要操作指令的稱為操作手機(操作手機可以跟目標手機是同一隻) 但好像要目標手機在安卓10以後才能用無線adb 步驟如下 1.操作手機先安裝Termux https://play.google.com/store/apps/details?id=com.termux 2.操作手機打開Termux後 先安裝adb 輸入指令 pkg install android-tools 有(y/n)選y 3.確定兩支手機連結到同一個wifi (如果操作跟目標手機同一支則忽略) 我剛好有連結wifi 不確定沒有wifi能不能繼續 看說明是說在同一個wifi環境下偵錯 可能不能用4g網路 4.目標手機去開發人員選項 打開無線偵錯 勾選允許 再點一下無線偵錯進入下一個畫面 5.點選使用配對碼配對裝置 5.1如果操作手機跟配對手機是同一隻 由於跳出配對畫面,配對碼就會消失 這時候要用分割視窗讓配對畫面在上半部 Termux在下半部來操作 6.在操作手機上輸入配對畫面的資料 adb pair ip位置:通訊埠 範例 adb pair 192.168.1.101:41733 接著輸入配對碼 讓操作手機可以配對找到目標手機 7.配對好之後,配對畫面會消失 8.接著操作手機輸入 adb connect ip:通訊埠 注意是前一個畫面的 通訊埠會跟配對的不一樣 正常 9.連上之後就等同接線adb了,這時候如果是同一隻手機,可以結束分割畫面了 這邊開始也可以接到任何要adb的其他操作 如果是像Chromecast 手錶之類的裝置 也都可以用上面的方式無線adb 10.繼續輸入原po的指令 adb shell pm compile -m everything -f -a 11.搞定收工 記得去把無線偵錯關掉比較安全 我也會把Termux刪除以策安全 還是其實留著沒差,請其他大神分析 12.如果將來要繼續使用adb 例如要跑原文的3.2 (2) 若只對尚未編譯的程式進行編譯 (適用於程式更新後): adb shell pm compile -m everything -a 因為已經配對過了 直接從8.連線adb即可 不需要再次做7.以前的步驟 (當然打開無線adb跟同一個wifi還是需要) ※ 引述 《tom282f3 (小小年紀所向無敵)》 之銘言: : 標題: [心得] adb編譯,啟動!解救慢吞吞的老手機! : 時間: Sun Mar 23 21:58:26 2025 :   : 大家好,我的主力機是還沒換過電池的原汁原味2018年旗艦Galaxy Note 9 (台版Exynos 6G : B/128GB),用到現在第六年,應該比版上多數人的主力機都老了XD :   : 究竟當年的旗艦機現在有多慢呢?隨便開任何一個App都可以等十秒,結帳永遠是我卡住 : 家......剩下的說多了都是淚QQ :   : 前陣子研究了三星官方提供的Galaxy App Booster之後,搭配版友的討論、網路上的文件 : 其他人的討論等,整理了以下的一些心得,希望可以幫助跟我一樣同樣身陷在垃圾效能手 : 當中的人~ :   :   :   :   : 【Galaxy App Booster的原理?】 :   :   : (注意這段比較長,想要直接實踐出真知的人,可以跳到下一段: : 【如何手動進行編譯】) :   :   : Android的app預設並不是用底層硬體可以直接執行的機器語言 (Machine code,人通常看 : 懂) 儲存的,而是以比較高階 (人看得懂) 的程式語言形式儲存在手機內部的。機器終究 : 是人,看不懂人類寫的程式語言,只能讀懂機器語言的一條條指令。高階的程式語言,會 : 要先翻譯為低階的機器語言才能執行,可以類比為: :   : - 程式語言:買一包最便宜的米 :   : - 機器語言:找錢包→帶錢包→出門→走到某家量販店→走到米的走道→反覆比較找到最 便 : 宜的米→把米拿起來→去結帳→走回家 :   : 可見機器語言所佔用的空間較大,但對機器而言是不可或缺的。在遠古的Android 2.2時 : ,機器語言是透過Dalvik編譯的,它只會在執行app的時候同步監測最常反覆出現的指令 : 並且將這些反覆出現的指令編譯為機器語言,這種做法稱為JIT (Just-in-time)。這樣做 : 好處是佔用空間少,壞處就是執行效能差、耗電 (因為每次點開app後都要重新編譯)。 :   : 到了Android 4.4、5.0的時代,Google一改以往的做法,推出了Android Runtime (ART) : 代了Dalvik。ART的革命之處在於除了JIT以外,也支援對整個app提前編譯為機器語言。 : 種做法稱為AOT (Ahead-of-time),會佔用較多的系統空間,但好處是AOT編譯後就不需要 JI : T再編譯一次了,可以直接上手,大幅增進了效率,對使用者而言就是手機的速度變快、 : 電變低了。在手機的Android系統升級後,第一次開機都會出現「更新應用程式... (1/50 0) : 」的進度條,就是在執行ART的AOT編譯。 :   : 理論上在安裝時就進行完整編譯是最好的選項,但是這樣做耗時會太久,因此Android 7 : 後的系統,在首次安裝時並不會完整執行AOT編譯,只有在手機閒置且充電時會在背景默 : 進行「較為完整」的AOT編譯。說是「較為完整」,是由於編譯整個App消耗的空間太大、 : 間太久,因此Android預設並不會將整個App都進行編譯,會搭配使用App時同步監測的成 : (稱為profile),再對部分程式語言執行編譯與最佳化,力圖在速度與儲存空間上取得平 : 點。 :   : 然而......對老手機而言,這個平衡點就是App要花十秒才跑得出來XD,因此三星的Galax y : App Booster就是手動觸發手機的AOT編譯機制,讓手機提前把程式語言編譯為機器語言後 : 存起來,讓下次使用時的速度得以提升。 :   : 對一個App進行AOT編譯的比例 (稱作Compiler filters) 由少到多,可以分成許多種 (各 : 廠商不同): :   : - verify : - interpret-only : - quicken : - space-profile、space : - speed-profile、speed : - everything-profile、everything :   : 越下面的模式,編譯比例越高,編譯的耗時也越久,編譯後的App執行速度理論上較快。 : 帶有profile字樣的代表雖然是同種方法,但只會針對同步監測的結果進行編譯,編譯耗 : 較短,但是之後執行會比不帶有profile字樣的更慢。 :   : Android 8~11預設似乎都是quicken (但各家廠商會有不同),Galaxy App Booster則是以 sp : eed-profile進行編譯。聰明的你一定發現了,那為何不用everything編譯呢?這樣速度 : 不是會更快?我自己實測了之後,發現還真的有變快! :   :   :   :   : 【如何手動進行編譯】 :   :   : 理論上,Android 7以後的系統都支援手動編譯,只需要電腦連接與adb即可,不需要root : 限。 :   : 1. 先開啟手機的「開發人員選項」,並且啟用「USB 偵錯」。 :   :   : 2. 將手機連接上電腦,輸入指令「adb devices」以啟動adb並確認連接。 :   : (1) 連接完成後,會跳出類似這樣的內容,最後有「device」字樣即為連接完成: : List of devices attached : 424947564e473498 device :   : (2) 若最後為「unauthorized」,請你在手機上點「允許這台電腦進行USB偵錯」: : List of devices attached : 424947564e473498 unauthorized :   : (3) 若最後為「unauthorized」,但手機並未跳出訊息,請依序輸入以下兩條指令重 : 啟動adb服務 (感謝kkkk1234版友提供): : adb kill-server : adb start-server :   :   : 3. 輸入指令,以everything模式重新編譯程式 :   : (1) 若要強制對所有程式重新編譯 (適用於第一次執行): : adb shell pm compile -m everything -f -a :   : (2) 若只對尚未編譯的程式進行編譯 (適用於程式更新後): : adb shell pm compile -m everything -a :   : (3) 若只要強制對特定程式進行編譯 (將<package_name>取代為程式的套件名稱,例 : 如Spotify為com.spotify.music): : adb shell pm compile -m everything -f <package_name> :   : 這個步驟最為關鍵!將所有程式以everything模式重新編譯需要數小時的時間。輸入 : 令後,手機就會開始在背景編譯,此時無論拔掉傳輸線、重開機都無法阻止 (我試過了XD ) : ,所以會有幾個小時手機會發熱、變慢、耗電大,也無法更新或安裝其他程式 (會顯示安 : 失敗)。 :   :   : 4. (可跳過) 輸入指令,重新編譯UI的圖像資源 :   : (1) 若要強制對所有程式重新編譯: : adb shell pm compile --compile-layouts -f -a :   : (2) 若僅對未編譯的程式進行編譯: : adb shell pm compile --compile-layouts -a :   : 這個指令會編譯UI的圖像資源,但我感覺不出編譯完的效果XD :   :   : 5. 後記 :   : (1) 跑完後如果跳出以下錯誤訊息: : Failure: the following packages could not be compiled: ...... : 這是正常的,列出的是因某些原因而無法編譯的程式,如果不是系統程式的話, : 有可能是因為手機剩餘空間不夠喔。 :   : 只要清出空間後,再執行一次3. (2) 適用於程式更新後的編譯就OK了! :   :   :   :   :   : 【如何手動移除編譯】 :   :   : 1. 輸入指令:adb shell pm compile -f -a -r install :   : 這個指令會將所有程式回復為安裝時的編譯初始值。要注意這其實是將所有程式用比 : 簡略的模式重新編譯一遍,所以還是會花到不少時間! :   :   :   :   : 【實測?】 :   :   : 實測我的Galaxy Note 9上有768個程式: :   : - 移除編譯:59分鐘 : - 手動編譯:大約4小時,只有幾個程式無法編譯 : - 編譯圖像資源:大約2分鐘,跳出一堆無法編譯的程式XD :   : 整體編譯完成後,空間多佔據了5.2 GB,不過打開app馬上就能發現順滑很多! :   : 差異是從「我明天就想換手機」變成「可以再戰一年」的程度,非常推薦! :   : 希望以上可以幫助到同樣在使用老手機的各位版友,如果有錯誤的話也請不吝指正,謝謝 :   :   :   :   : 【參考資料】 :   :   : - 版友的討論: : #1VrNHVPE (MobileComm) :   : - Google官方的文件: : https://bit.ly/4kR6mzn :   : - 中國CSDN文章: : https://bit.ly/4hBoc6O :   : - 對Galaxy App Booster反編譯的探討文章: : https://bit.ly/4kQRdhw :   : - XDA論壇上網友提供的Minimal ADB and Fastboot (把Google官方的adb提取出來的, : 以前刷機都是用這個XD): : https://bit.ly/4bT8XVB :   : - Reddit論壇上的指令參考: : https://bit.ly/4kWmlfM :   : 另外Reddit這篇討論串裡面,網友還會再輸入這個指令: : adb shell pm bg-dexopt-job : 這個指令會啟動手機背景運作的編譯最佳化程序,不過前面既然已經編譯過了,而且 : 譯最佳化也不是以everything模式運作 (需要root才能改),所以我認為是多餘的XD :   :   : -- : Sent from my Samsung Galaxy Note 9 :   : ○ PiTT // PHJCI :   -- Sent from my Google Pixel 9 Pro XL PiTT // PHJCI -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.228.102.52 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/MobileComm/M.1742790964.A.731.html ※ 編輯: amilkamilk (61.228.102.52 臺灣), 03/24/2025 12:36:57 ※ 編輯: amilkamilk (61.228.102.52 臺灣), 03/24/2025 12:39:31 ※ 編輯: amilkamilk (61.228.102.52 臺灣), 03/24/2025 12:41:40

03/24 12:44, 2天前 , 1F
舊手機可以開WiFi偵錯的話,不用配對別支手機吧?
03/24 12:44, 1F

03/24 12:45, 2天前 , 2F
直接用aShell之類的Terminal APP就好了
03/24 12:45, 2F
哈,我是文組 看不懂你說的是什麼 這是自己推敲出來的方式 如果有大神有更簡單的方式 也歡迎分享

03/24 12:45, 2天前 , 3F
但還是推分享
03/24 12:45, 3F
※ 編輯: amilkamilk (61.228.102.52 臺灣), 03/24/2025 12:47:12

03/24 12:49, 2天前 , 4F
另外同WiFi下也可以用adb connect ip的方式連線
03/24 12:49, 4F

03/24 12:50, 2天前 , 5F
樓主可以研究一下shizuku 哈哈
03/24 12:50, 5F

03/24 12:50, 2天前 , 6F
好的。感謝,真的是隔行如隔山XXD
03/24 12:50, 6F

03/24 12:53, 2天前 , 7F
看懂了,Shizuku配對更簡單了
03/24 12:53, 7F

03/24 13:15, 2天前 , 8F
剛看第一篇本來就要用 LADB 來弄,但發現公司沒有
03/24 13:15, 8F

03/24 13:15, 2天前 , 9F
wi-fi 環境…
03/24 13:15, 9F

03/24 13:29, 2天前 , 10F
酷感謝教學
03/24 13:29, 10F

03/24 13:38, 2天前 , 11F
termux現在用google play就可以更新了
03/24 13:38, 11F

03/24 13:38, 2天前 , 12F
wifi adb好像安卓11以上才有 太舊的只能先刷機
03/24 13:38, 12F

03/24 13:41, 2天前 , 13F
同個wifi 其中一台開熱點給另一台連就可以了
03/24 13:41, 13F

03/24 13:43, 2天前 , 14F
termux可留著 adb以外還有各種方便用途
03/24 13:43, 14F
※ 編輯: amilkamilk (114.136.145.105 臺灣), 03/24/2025 13:54:51

03/24 13:56, 2天前 , 15F
LADB跟Shizuku都可以用
03/24 13:56, 15F
發現這兩款好像在play shop都要收費 這樣termux好像還有一點使用的價值

03/24 13:56, 2天前 , 16F
WiFi偵錯下自己下指令給自己
03/24 13:56, 16F

03/24 13:56, 2天前 , 17F
不用依靠別台裝置
03/24 13:56, 17F
※ 編輯: amilkamilk (114.136.145.105 臺灣), 03/24/2025 13:59:46

03/24 14:12, 2天前 , 18F
這樣理論上shizuku+支援的終端app都能用吧
03/24 14:12, 18F

03/24 14:29, 2天前 , 19F
ladb和shizuku在github上都是開源可以免費下載的
03/24 14:29, 19F

03/24 14:32, 2天前 , 20F
這樣play shop上收費好奸詐XXD
03/24 14:32, 20F

03/24 14:33, 2天前 , 21F
aShell則放在gitlab, 個人覺得aShell好用許多
03/24 14:33, 21F

03/24 14:38, 2天前 , 22F
因為ashell就直接等於adb shell進入手機shell狀態
03/24 14:38, 22F

03/24 14:42, 2天前 , 23F
重點是提示字和穩定度都比ladb好
03/24 14:42, 23F

03/24 14:43, 2天前 , 24F
在Reddit看到討論 ladb某些函式的調用方法比較不好
03/24 14:43, 24F

03/24 14:43, 2天前 , 25F
其實透過termux一樣可以自己adb自己 方法搜尋就有
03/24 14:43, 25F

03/24 16:13, 2天前 , 26F
termux搞定後留不留都沒差 反正最大問題保固早沒了
03/24 16:13, 26F

03/24 17:15, 1天前 , 27F
借這邊問一下,舊手機如果是安卓10,有辦法用另一
03/24 17:15, 27F

03/24 17:15, 1天前 , 28F
支手機接線去ADB嗎
03/24 17:15, 28F

03/24 17:15, 1天前 , 29F
我直接把兩隻手機接線好像偵測不到ADB
03/24 17:15, 29F

03/24 18:22, 1天前 , 30F
有OTG功能的手機應該理論上可以(沒試過) 但要改por
03/24 18:22, 30F

03/24 18:22, 1天前 , 31F
t
03/24 18:22, 31F

03/24 18:23, 1天前 , 32F
用無線同WiFi下確定是可以的
03/24 18:23, 32F

03/24 22:00, 1天前 , 33F
推推
03/24 22:00, 33F

03/24 22:43, 1天前 , 34F
謝謝分享
03/24 22:43, 34F

03/24 23:23, 1天前 , 35F
兩台手機透過OTG來ADB的話找專門app比較省事
03/24 23:23, 35F

03/24 23:24, 1天前 , 36F
但不見得每台手機都能用 需不需要root也不一定
03/24 23:24, 36F

03/24 23:25, 1天前 , 37F
直接商店搜尋otg adb應該就會有
03/24 23:25, 37F

03/25 02:21, 1天前 , 38F
shell的話我是用connectbot 但平常adb還是用電腦
03/25 02:21, 38F

03/25 06:53, 1天前 , 39F
謝分享
03/25 06:53, 39F

03/25 08:57, 1天前 , 40F
推分享 教學
03/25 08:57, 40F

03/25 10:20, 1天前 , 41F
感謝教學
03/25 10:20, 41F

03/25 12:43, 1天前 , 42F
S9/Note9 刷NOBLE ROM 4.3 OneUI 6.1.1 不香嗎?
03/25 12:43, 42F

03/25 17:10, 23小時前 , 43F
太厲害了
03/25 17:10, 43F

03/25 18:58, 21小時前 , 44F
昨天 S24U 也編譯了3個小時多
03/25 18:58, 44F
文章代碼(AID): #1duE4qSn (MobileComm)
文章代碼(AID): #1duE4qSn (MobileComm)