QuickRotate Utility on Android Devices — 1.8 MB 與 57.9 KB 的距離

Daniel Kao
4 min readApr 18, 2022

--

在文石的電子書閱讀器上,旋轉畫面的工具很不好用,要三個動作才能完成:1. 從畫面上方,下拉控制區塊;2. 點擊旋轉按鈕;3. 找到想要旋轉的方向,點下去。

圖1. 文石電子書閱讀器的旋轉功能

為了讓第三個步驟能省略掉,我寫了一個小工具來幫我。Android 從 7.0 開始,有提供可以客製化 Quick Tile Settings 的功能。平常需要開開關關的功能,都可以包裝成一個 TileService,放到下拉通知欄的區域。詳細的教學可以看一下下面的文章。

Quick Setting 實作

利用這方式,我建立了一個簡單的 TileService 來做畫面旋轉的功能。安裝後就可以在文石閱讀器中,加入新的旋轉按鈕,不用再從上面圖1中的四個方向做選擇。

圖示

圖2. 加入了左轉的按鈕

如何縮小程式的大小

當我在完成這個小工具時,發現到明明只有寫了幾十行的程式碼,和放了兩張左旋轉和右旋轉的圖案,編譯出來的 apk 竟然要 1.8 MB 之大。這超出了我的想像。

我試著在 build.gradle 中加入 proguard 的設定,但似乎編譯完後,沒有什麼幫助。我再研究了一下 build.gradle 中的有使用到的函式庫:

implementation 'androidx.core:core-ktx:1.7.0'    
implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'com.google.android.material:material:1.5.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.3'

這個利用 Android Studio 建立出來的 Empty Activity project,預設就塞了這些函式庫。以這個小工具來說,除了在還沒取得系統設定讀寫的功能前,需要跳出系統的同意畫面讓使用者同意外,完全不會有 UI 呈現。

所以,這些函式庫應該都要有辦法拿掉才對。於是,我先把程式中唯一的 MainActivity 的 layout xml 從 ConstraintLayout 改成 LinearLayout;然後,把 MainActivity 的 parent class 從 AppCompatActivity 改成 Activity。

最後,我把 Android Studio 幫我生成的 App Theme 也拔掉了,這麼一來,就也可以把 android.materialandroidx.core 的依賴也移除。

如此一來,整個程式的大小馬上縮小到 57.9 KB

詳細的 commit 可以看下面這個連結。

結論

如果只是想寫個 quick setting tile 的話,是可以把 Android 的各種函式庫都拔掉的。1.8 MB 和 57.9 KB 的差別,中間差了 30 倍呢。(雖然都很小就是了)

--

--

Daniel Kao
Daniel Kao

Written by Daniel Kao

2023 年新書出版! Android 開源專案「真」實戰啟航:瀏覽器 App EinkBro 開發者帶你逐步從 UI 設計、UX 提升到多功能實現秘技全解析

No responses yet