大家好,我的主力機是還沒換過電池的原汁原味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/500) 」的進度條,就是在執行ART的AOT編譯。 理論上在安裝時就進行完整編譯是最好的選項,但是這樣做耗時會太久,因此Android 7以 後的系統,在首次安裝時並不會完整執行AOT編譯,只有在手機閒置且充電時會在背景默默 進行「較為完整」的AOT編譯。說是「較為完整」,是由於編譯整個App消耗的空間太大、時 間太久,因此Android預設並不會將整個App都進行編譯,會搭配使用App時同步監測的成果 (稱為profile),再對部分程式語言執行編譯與最佳化,力圖在速度與儲存空間上取得平衡 點。 然而......對老手機而言,這個平衡點就是App要花十秒才跑得出來XD,因此三星的Galaxy 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模式重新編譯程式 注意這個步驟最為關鍵!將所有程式以everything模式重新編譯需要數小時的時間。輸 入指 令後,手機就會開始在背景編譯,此時無論拔掉傳輸線、重開機都無法阻止 (我試過了XD) ,所以會有幾個小時手機會發熱、變慢、耗電增加,也無法更新或安裝其他程式 (會顯示安裝失敗)。 (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> (4) 如果跳出以下錯誤: Error: Unknown command 'compile' 可能是Android版本太新的緣故!(感謝Pisces與a123444556版友回報) 請把上述指令中的pm改為cmd package,再試一次即可。 (5) 如果有跑成功,但結束時跳出以下錯誤訊息: Failure: the following packages could not be compiled: ...... 這是正常的,列出的是因某些原因而無法編譯的程式,如果不是系統程式的話,有 可能是因為手機剩餘空間不夠喔。只要清出空間後,再執行一次 (2) 適用於程式更新後的 編譯就OK了! 4. (可跳過) 輸入指令,重新編譯UI的圖像資源 (1) 若要強制對所有程式重新編譯: adb shell pm compile --compile-layouts -f -a (2) 若僅對未編譯的程式進行編譯: adb shell pm compile --compile-layouts -a 這個指令會編譯UI的圖像資源,理論上也會加速程式啟動,但我感覺不出編譯的效果XD 【如何手動移除編譯】 1. 輸入指令:adb shell pm compile -f -a -r install 這個指令會將所有程式回復為安裝時的編譯初始值。要注意這其實是將所有程式用比較 簡略的模式重新編譯一遍,所以還是會花到不少時間! 【實測?】 (1) 實測我的Galaxy Note 9上有768個程式: - 移除編譯:59分鐘 - 手動編譯:大約4小時,只有幾個程式無法編譯 - 編譯圖像資源:大約2分鐘,跳出一堆無法編譯的程式XD 整體編譯完成後,空間多佔據了5.2 GB,不過打開app馬上就能發現順滑很多! 差異是從「我明天就想換手機」變成「可以再戰一年」的程度,非常推薦! (2) 推文版友abc0922001的Sony 1ii有500多個程式: - 手動編譯:睡前啟動,起床收工,多佔據了約17 GB的空間 希望以上可以幫助到同樣在使用老手機的各位版友,如果有錯誤的話也請不吝指正,謝謝! 【參考資料】 - 版友的討論: #1VrNHVPE (MobileComm) - Google官方的文件: https://bit.ly/4kR6mzn - 中國CSDN文章: https://bit.ly/4hBoc6O - 對Galaxy App Booster反編譯的探討文章: https://bit.ly/4kQRdhw - Google官方的adb工具 (感謝abc0922001版友提供): https://ggle.io/7KHk - 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 -- ※ 發信站: 批踢踢實業坊(ptt-site.org.tw), 來自: 223.140.219.142 (臺灣) ※ 文章網址: https://ptt-site.org.tw/MobileComm/M.1742738316.A.B4E
leopika : 問題是老手機容量也很少吧,要犧牲容量的話就沒用03/23 22:00
fightclubgf : 可惜我的J7 2016,只裝幾個基本軟體和LINE剩下不到03/23 22:02
fightclubgf : 300MB,每天要照三餐清快取03/23 22:03
kimi112136 : aot 的缺點就是用空間來犧牲語言一致性與dalvik的03/23 22:06
kimi112136 : 靈活性03/23 22:06
litidi: 包養網到底在紅什麼?03/23 22:06
justice2008 : 那種老手機我都拿來做導航 摔了受潮都不心疼03/23 22:12
kkkk1234 : 好酷03/23 22:20
aa8351489 : 請問用galaxy booster 多久要跑一次呢03/23 22:20
kkkk1234 : 順便說一下 如果遇到unauthorized 手機又沒跳出授03/23 22:24
kkkk1234 : 權視窗的話 這是個老問題了03/23 22:24
Merzario: 有人被包養03/23 22:24
kkkk1234 : https://stackoverflow.com/a/2554630003/23 22:24
kkkk1234 : 請輸入下面指令來重開電腦上的adb03/23 22:24
kkkk1234 : adb kill-server03/23 22:24
kkkk1234 : adb start-server03/23 22:24
fightclubgf : 請問這個事前編譯是不是可以延長FLASH的壽命03/23 22:55
Muzaffer: 求包養...管飽就好XD03/23 22:55
addison4869 : 推,用各種方法來延續手機的年限,精神可嘉03/23 22:57
Yuwuen : 各廠牌手機都可以直接ADB試試看行不行嗎?03/23 22:58
kimi112136 : flash影響不大,讀取大小差異對flash壽命來說差異03/23 22:58
kimi112136 : 很小03/23 22:58
fightclubgf : 我的意思是先編好,就不用每次編譯寫入FLASH,這樣03/23 23:01
MIJice: 阿姨!我不想努力了(求包養)03/23 23:01
alex1973 : 樓上, 理論上是的, 問題是 flash 壽命以現在手機對03/23 23:01
fightclubgf : 是不是有幫助,還是一般編譯是寫到RAM,所以沒差03/23 23:01
alex1973 : flash 操的程度, 基本上很少人會用到 flash 讀寫到03/23 23:02
alex1973 : 掛掉, 操心讀寫次數對目前手機而言都還是多慮了03/23 23:03
Yuwuen : 感謝提供 舒服03/23 23:12
SpyTime: 有沒有富二代要包養03/23 23:12
PenisDeMilo : 未看先推。感覺很有幫助!03/23 23:18
ragwing : 感覺我的Nexus 7 2013有救了?03/23 23:38
virdust2003 : 推03/23 23:47
Xixiaofan : 安卓錶也可以哦 一樣方法03/23 23:51
square4 : java/kotlin用編譯器轉位元組碼(如優化過的dex),03/23 23:57
Toth: 身邊有朋友被包養03/23 23:57
square4 : 再用art虛擬機轉機器碼,obj-c/swift用編譯器轉機03/23 23:57
square4 : 器碼,不用虛擬機,跨硬體支援與效率無法兩全,仍 03/23 23:57
square4 : 要做出以時間換空間或以空間換時間的妥協 03/23 23:57
jay0215 : 有看有推!03/23 23:59
aasssdddd : 感覺很猛03/24 00:03
Asterix: 亞洲最大包養平台上線了03/24 00:03
khastw : 長知識推個03/24 00:07
keepkef : 推精神 03/24 00:13
aa8351489 : 感恩 03/24 00:16
ggirls : 推。可惜我的程度只會安裝一個全自動的booster 03/24 00:19
haveastar : 對岸開發的SCENE有編譯功能03/24 00:25
AdamShi: 這個包養網正妹好多 是真的嗎03/24 00:25
manpower9 : 推 03/24 00:29
Mark87 : 推一個以免認為我看不懂03/24 00:38
k9120303 : 推好文分享!這篇真的該M起來 03/24 00:53
ikuiku1919 : 對較新的手機有差嗎,還是用App Booster就可以了?03/24 00:54
abc0922001 : 推,之前常用,但後來覺得心理因素居多就沒再用了03/24 01:06
lezabo: 真的有這麼多人在找包養03/24 01:06
abc0922001 : 每次跑完,app就給我更新03/24 01:08
manbow77 : 容量問題只能靠刷機來解 原廠系統RAM/ROM佔用太多03/24 01:10
manbow77 : 可以直接先輸入adb shell直接進入shell03/24 01:12
manbow77 : 後續就只需直接打必要指令 03/24 01:12
abc0922001 : 其實ADB官方工具大小才6.38MB根本不用特地提取03/24 01:14
silberger: 有人可以分析一下包養平台的差異嗎03/24 01:14
abc0922001 : https://ggle.io/7KHk03/24 01:15
nobyE : 好文推推03/24 01:37
mrfatworm : 推 好文03/24 01:40
qwefghzxc : 好酷 原來還有這種玩法03/24 01:59
whitefox : 桌面的時間,氣象都去掉03/24 02:29
xayile: 那個包養網人最多XD03/24 02:29
gary8442 : 家裡退休的老機也拿出來玩玩 從note4到10+03/24 02:58
wres666 : 酷喔03/24 04:10
a00561 : 教學仔細,謝謝分享 03/24 06:14
pttSouthjin : 技術分析文,有看新增知識 03/24 06:51
justej : 推一個!! 找機會試試03/24 07:20
cazo: 我妹上包養網被我發現= =03/24 07:20
nrsair : 感謝教學03/24 07:37
johnny90150 : 請問asus 5z也適用嗎? 03/24 07:39
hongyi0402 : 推03/24 07:48
amilkamilk : 這樣是不是app更新後,就要重跑一次? 03/24 08:05
wumins : 學到了,推一個03/24 08:11
izilo: 隔壁桌的人竟然在討論包養...03/24 08:11
mstar : 都用 adb 了,如果容量不夠應該可以砍掉一些預設安03/24 08:15
mstar : 裝的 app 吧? 03/24 08:15
hansom283 : 推,謝謝分享 03/24 08:16
gaiaesque : 專業03/24 08:23
qilar : 推用心整理03/24 08:39
SEDAP: 樓上是不是被包養03/24 08:39
abc0922001 : 看文章才知道拔掉傳輸線也會繼續背景編譯,所以睡前03/24 09:04
abc0922001 : 試了一下,容量竟然多了 17G XDDD03/24 09:04
hurompton : 推 03/24 09:40
justice2008 : 不是 我是說J7 2016那種rom明顯不足的03/24 09:52
justice2008 : 畢竟這邊沒有華強北 找不到人改手機03/24 09:53
TUZom: 未看先猜這包養03/24 09:53
xiaotee : 推推03/24 10:38
jay920314 : 推 經典note903/24 11:07
willy4907 : 推 刻意寫的一般人較能懂03/24 11:36
higger : 為什麼官方不弄個按鈕給人按就好?03/24 12:35
bust222 : 不是 你應用有700多個 慢不是正常的嗎XD 03/24 13:00
Jiulon: 一定又是這包養 03/24 13:00
WindSucker : 再戰五年03/24 13:29
abc0922001 : Sony 1ii 阿,執行的時候好像說有500多個03/24 13:30
phoque : 近代旗艦有用嗎 例如s23以後 03/24 13:47
Hohenzollern: 原來上次在全聯排隊結帳 就是你在拖大家的時間! 03/24 14:29
abc0922001 : 果然一編譯後,LINE就給我推更新了03/24 14:35
laetuon: 包養平台不意外03/24 14:35
keigowei : 三星旗艦跑跑Galaxy App Booster就足夠了…省空間 03/24 15:43
abelyi100 : 推03/24 17:02
kf740512 : gw4c靠這方法變快好多 03/24 17:27
clover1211 : 只用Galaxy App Booster 感覺變快也沒那麼燙了03/24 17:31
A4P8T6X9 : 推03/24 17:35
slot365: 覺得包養網EY嗎03/24 17:35
SPDY : 跑everything適合系統已不給更新的老機再戰03/24 18:51
SPDY : 出現Failure的App如果不多03/24 18:55
SPDY : 可以針對那幾個指定改跑speed-profile就好03/24 18:55
SPDY : 非三星想用Galaxy App Booster可試試2.0.00.7舊版03/24 19:00
p2p8ppp : 用心推 03/24 19:33
colortea: 包養網站葉配啦 03/24 19:33
a123444556 : 指定打3.(1)跳出Error:unknow command 'compile'03/24 21:22
a123444556 : *指令03/24 21:22
Pisces : 同上+1,有下載最新sdk工具,也是出現找不到compile03/24 21:29
Pisces : 指令03/24 21:29
a123444556 : 樓上 我跑去問Copilot 好像要打cmd package compile03/24 22:04
glenber: 記者收了包養網多少啦03/24 22:04
a123444556 : 完整指令是3.(1)的pm改cmd package 剛剛試了正在跑03/24 22:06
randy061 : 謝謝分享03/24 22:47
nrsair : adb 啟動 03/25 10:23
proton63 : S9/Note9 刷NOBLE ROM 4.3 OneUI 6.1.1 不香嗎? 03/25 12:48
proton63 : CSC: STH(Singapore) // #1,641 suggests:UK CSC 03/25 12:49
Kimbel: 包養真亂 03/25 12:49
proton63 : 重刷 時間應該遠小於編譯時間。 03/25 12:52
proton63 : [RECOVERY][OFFICIAL][3.6.1-x] TWRP for Galaxy S9 03/25 12:52
WeihsiuChen : S10+ 又可以戰一年,太感謝您了 03/25 22:41
cinnamo1208 : 用在電子閱讀器也有效,有感變快 03/25 23:15
Kietiary : 回報 S7edge android8 要用cmd package指令才能執行 03/26 12:48
tale1890: 演藝圈一堆包養好嗎 03/26 12:48
blueballer : 好強 03/26 22:32
hurompton : Asus ZF3跑完後速度有提升,唯獨line還是那死樣子 03/27 14:34
Louis430 : line是那個爛樣子無解 頂多清data, cache啊 03/27 14:38
T19871124 : 真浪漫 03/28 14:33
rail02000 : 推教學!來玩玩看 03/28 22:13
waterway: 政治圈一堆包養好嗎 03/28 22:13