# 16KB 記憶體頁面需求背景 ![image](https://hackmd.io/_uploads/H1Crm_h9lg.png) * 以前 Android 裝置主要支援 4KB 記憶體頁面 * 新裝置搭配更大 RAM,逐漸改用 16KB 頁面 * Android 15 開始支援 16KB 頁面,帶來效能提升:更快的啟動、更省電、更快的相機與系統開機 * 2025/11/1 起,Play Console 提交的新應用與更新必須支援 16KB 頁面 # 誰會收到警告 ![messageImage_1757344640371](https://hackmd.io/_uploads/SJ_5Xu3cgx.jpg) * 使用 Native Code 的應用需重新編譯支援 16KB * 僅使用 Java/Kotlin 與相關庫的應用,無須修改,已自動支援 # 如何檢查相容性 ![messageImage_1757344679575](https://hackmd.io/_uploads/HkjnXdnqee.jpg) ![image](https://hackmd.io/_uploads/SyjCm_3clx.png) ![image](https://hackmd.io/_uploads/HyP1V_hclx.png) ![image](https://hackmd.io/_uploads/BkvW4Oh5gx.png) * 在 Google Play Console → App Bundle Explorer * 選擇 Active Releases → 查看「Memory page size does not support 16 KB」詳細資訊 * 若顯示不支援,會列出相關 Native Libraries # 如何確認是否使用 Native Libraries ![messageImage_1757344794840](https://hackmd.io/_uploads/BkkEE_h9ee.jpg) ![image](https://hackmd.io/_uploads/HJ7w4uh9le.png) ![image](https://hackmd.io/_uploads/HyId4u25ge.png) * 使用 Android Studio 的 APK Analyzer * 開啟專案 → App release 資料夾 → 選擇簽署的 AAB 檔 * 檢查是否存在「lib」資料夾與 .so 檔案 * 若有 .so 檔案,代表應用包含 Native Code * 若無,代表應用僅使用 Java/Kotlin,已支援 16KB # 重點 * 有 Native Code → 必須重新編譯支援 16KB * 無 Native Code → 已自動支援,無需修改 # 建立支援 16KB 頁面大小的應用流程 ![messageImage_1757344897046](https://hackmd.io/_uploads/Skd5NOncle.jpg) * 應用若含有 Native Code,需重新編譯以支援 16KB * 需完成三大步驟:升級 AGP、使用新版 NDK、更新 SDK 與函式庫 # Step 1:升級 AGP 至 8.5.1 或更高 ![image](https://hackmd.io/_uploads/SyTjNd39xg.png) ![image](https://hackmd.io/_uploads/HyDhN_h9eg.png) ![image](https://hackmd.io/_uploads/Syc1Bdhcgl.png) ![image](https://hackmd.io/_uploads/rkpxrd39le.png) * 使用 Android Studio 的 **AGP Upgrade Assistant** * 建議版本:AGP 8.5.1 以上,範例更新至 8.9.2 * 同步更新 Gradle 至相容版本(如 Gradle 8.11.1) * 更新後檢查 `gradle-wrapper.properties` 與 `build.gradle` 確認版本 # Step 2:使用 Android NDK r28 以上 ![image](https://hackmd.io/_uploads/BJb7rd2cee.png) ![image](https://hackmd.io/_uploads/SyPHB_hqeg.png) ![image](https://hackmd.io/_uploads/H1tUrd25ex.png) * 必須使用 **NDK r28 或更高版本** * 若當前版本低於 r28,需透過 **SDK Manager → SDK Tools** 更新 * 安裝完成後,在 **Project Structure → Modules** 選擇最新版本 * 在 `build.gradle` 中確認並加入 `ndkVersion` 與 `ndk.debugSymbolLevel = full` # Step 3:更新 SDK 與函式庫 ![image](https://hackmd.io/_uploads/rkrOrOn5gl.png) * 確認所有 SDK 與函式庫相容 16KB 頁面 * 在 `build.gradle` 檔檢查並更新依賴至最新版本 * Google/Maven 官方庫多數已相容 * 若使用第三方 Native SDK,需確認並更新至相容版本 # 測試 16KB 相容性 ![messageImage_1757345146654](https://hackmd.io/_uploads/SyxgcBO35le.jpg) ![image](https://hackmd.io/_uploads/By-oH_25ge.png) * 測試環境:實體裝置或模擬器 * Pixel 8 / Pixel 9 裝置支援在開發者選項中切換至 16KB 模式 * 模擬器需建立 **API 35 以上** 並支援 16KB 系統映像 * 測試所有功能,觀察是否有閃退或相容性問題 # 發佈流程 ![image](https://hackmd.io/_uploads/HJ70Suhclg.png) * 測試完成後,產生新簽署的 App Bundle * 更新版本號,清理並重新建置專案 * 在 Play Console 先發佈至 **封閉測試** * 若無問題再推送至正式版 * 在 App Bundle Explorer 檢查是否顯示 **「Supports 16 KB memory page size」** # 修正要點 * 升級 **AGP 至 8.5.1 以上** * 使用 **NDK r28 以上** * 更新 **所有依賴至最新版本** # Terminology * 原生程式庫(Native Library):以 C/C++ 編譯生成的共享物件檔案,供 Android 應用呼叫使用。 * 共享物件檔(Shared Object File, SO):副檔名為 .so 的動態連結程式庫,用於提供原生程式功能。 * 記憶體頁面大小(Memory Page Size):作業系統分配記憶體的最小單位,常見為 4KB 或 16KB。 * 16KB 對齊(16KB Alignment):將原生程式庫按照 16KB 的記憶體邊界進行編譯與對齊,以符合新裝置需求。 * Android 15:Google 發布的 Android 作業系統版本,引入 16KB 記憶體頁面支援。 * Google Play Console:開發者管理應用上架、測試、發布與分析的官方平台。 * App Bundle Explorer:Play Console 提供的工具,用來檢查 App Bundle 結構與相容性。 * AAB(Android App Bundle):Google Play 使用的應用分發檔案格式,取代傳統 APK。 * APK Analyzer:Android Studio 提供的工具,用來檢視 APK 或 AAB 的內部結構。 * Java:一種物件導向程式語言,常用於 Android 應用開發。 * Kotlin:Google 推薦的 Android 官方程式語言,與 Java 高度互通。 * 原生代碼(Native Code):使用 C/C++ 等語言撰寫並編譯成 .so 檔的程式碼。 * SDK(Software Development Kit):軟體開發工具包,包含函式庫與工具,協助開發者建構應用。 * NDK(Native Development Kit):Android 提供的工具,用於編寫與編譯 C/C++ 原生程式碼。 * ABI(Application Binary Interface):應用二進位介面,決定原生程式庫與硬體、作業系統的溝通方式。 * ARM 架構(ARM Architecture):行動裝置常用的 CPU 架構,常見有 armeabi-v7a 與 arm64-v8a。 * x86 架構(x86 Architecture):Intel/AMD 處理器使用的 CPU 架構,Android 少數裝置支援。 * 動態連結(Dynamic Linking):應用在執行時載入外部程式庫的方式。 * 靜態連結(Static Linking):將程式庫編譯進應用程式內部,不依賴外部檔案。 * 記憶體對齊(Memory Alignment):確保資料位於特定邊界,提升存取效能與相容性。 * 崩潰(Crash):應用程式因錯誤或不相容問題而強制終止。 * 效能優化(Performance Optimization):改善應用啟動速度、記憶體使用與電池續航等表現。 * App Bundle:Google Play 發佈應用的標準格式,支援動態交付。 * 簽署金鑰(Signing Key):開發者用來簽署 APK 或 AAB 的憑證,驗證應用來源。 * 打包(Build):將原始程式碼編譯並生成 APK 或 AAB 的過程。 * 發佈管道(Release Track):Google Play 提供的內測、公開測試與正式發佈流程。 * 測試版(Beta Release):應用測試版本,供部分使用者體驗與回饋。 * 穩定版(Production Release):正式上架給所有使用者的應用版本。 * 記憶體碎片化(Memory Fragmentation):因記憶體分配不均導致效能下降的情況。 * 頁面錯誤(Page Fault):存取未對齊或不存在的記憶體頁面時發生的錯誤。 * 系統啟動(System Boot):裝置開機並載入作業系統的過程。 * 相容性測試(Compatibility Testing):驗證應用是否能在不同硬體或系統版本上正常運作。 * 模擬器(Emulator):在電腦上模擬 Android 裝置,用於開發與測試應用。 * 真機測試(Real Device Testing):在實體裝置上測試應用,以確保實際效能。 * 版本目標(Target SDK Version):應用指定的 Android 系統版本,影響可使用的 API 功能。 * 最低版本(Min SDK Version):應用可安裝的最低 Android 系統版本。 * 編譯版本(Compile SDK Version):編譯應用時使用的 Android SDK 版本。 * Gradle:Android 官方建置工具,用於自動化編譯與相依管理。 * Manifest 檔案:Android 應用的設定檔,定義權限、元件與相容性需求。 * 記憶體頁表(Page Table):作業系統管理虛擬記憶體與實體記憶體的映射資料結構。 * 應用啟動時間(App Launch Time):應用從點擊圖示到進入主畫面的時間。 * 電池續航(Battery Life):裝置在未充電狀態下的可使用時間。 * 鏡像檔(Image File):包含系統或應用完整執行環境的檔案。 * 編譯器(Compiler):將程式語言轉換成機器碼的工具。 * 偵錯(Debugging):尋找與修正程式錯誤的過程。 * 錯誤日誌(Error Log):應用或系統輸出的錯誤訊息紀錄。 * 測試自動化(Test Automation):利用工具自動執行應用測試流程。 * 發佈警告(Release Warning):Play Console 在應用上架時提示的相容性或最佳化警告。 * 版本控制(Version Control):管理程式碼歷史與協作的工具,如 Git。 * CI/CD(持續整合/持續交付):自動化建置、測試與發佈的開發流程。 * 短期支援版(Short-Term Support):特定 Android 版本的暫時支援狀態。 * 長期支援版(Long-Term Support):長時間維護與更新的 Android 版本。 * 預覽版(Preview Release):未正式釋出的 Android 版本,供開發者提前測試功能。 * 退化效能(Performance Degradation):應用因不相容或程式設計問題導致效能下降。 * AGP(Android Gradle Plugin):Android 應用建置所需的外掛,負責將程式碼與資源打包成 APK 或 AAB。 * AGP 升級助理(AGP Upgrade Assistant):Android Studio 工具,協助將專案自動升級至最新 AGP 版本。 * Gradle:Android 官方建置系統,用於自動化編譯、測試與打包應用程式。 * gradle-wrapper.properties:定義專案使用的 Gradle 版本與下載來源設定檔。 * build.gradle(Project Level):專案層級的建置設定檔,用於指定 AGP 版本與相依管理。 * build.gradle(Module Level):模組層級的建置設定檔,定義 SDK、NDK、依賴庫等。 * Android NDK(Native Development Kit):提供 C/C++ 編譯工具鏈,用於開發與編譯原生程式庫。 * NDK r28:Android NDK 28 版,首次支援 16KB 記憶體頁面對齊。 * Debug Symbol Level:NDK 設定,用於控制偵錯符號輸出等級,常設為 full。 * SDK Manager:Android Studio 工具,用於下載與管理 Android SDK、NDK 與相關套件。 * SDK Tools:Android Studio 中的工具集,包含平台工具、建置工具與 NDK。 * Project Structure:專案結構設定,允許設定 SDK、NDK 與相依版本。 * 相依(Dependencies):應用所需的外部程式庫或 SDK,於 build.gradle 中定義。 * Maven Repository:常見的 Java/Kotlin 函式庫託管倉庫,許多 Android SDK 由此下載。 * 封裝同步(Gradle Sync):重新載入 build.gradle 設定並更新專案配置的動作。 * Close Testing(封閉測試):Google Play 提供的發佈管道,僅限測試群組使用。 * Production Release(正式發佈):Google Play 向所有用戶釋出應用的穩定版本。 * Pixel 8 裝置:Google 發佈的手機,支援 16KB 記憶體頁面模式。 * Pixel 9 裝置:Google 發佈的後續手機,支援 16KB 記憶體頁面模式。 * Developer Options(開發人員選項):Android 裝置上的隱藏設定,供開發者測試與調整。 * 16KB 模式(16KB Mode):將裝置或模擬器設為 16KB 記憶體頁面大小的運行環境。 * Emulator(模擬器):Android Studio 內建虛擬裝置,用於測試應用。 * Device Manager:Android Studio 工具,用於建立與管理虛擬裝置。 * Virtual Device(虛擬裝置):模擬實體 Android 裝置的軟體環境。 * System Image(系統映像檔):Android 模擬器所需的作業系統映像,API 35 提供 16KB 支援。 * API Level 34:Android 14 對應的 API 版本,不支援 16KB 測試模式。 * API Level 35:Android 15 對應的 API 版本,新增 16KB 記憶體頁面支援。 * Google APIs System Image:包含 Google API 與 16KB 支援的模擬器映像檔。 * Build 成功(Successful Build):應用在 Android Studio 中完成編譯且無錯誤。 * Generate Signed Bundle:產生已簽署的 AAB 檔,準備上架至 Google Play。 * 版本號(Version Code / Version Name):應用的版本識別,用於更新與追蹤。 * Clean Project:清理編譯暫存檔案,以避免舊配置影響新建置。 * Release Notes(版本更新說明):發佈時提供的更新內容描述。 * App Bundle Explorer:Google Play Console 提供的工具,檢查 AAB 是否支援 16KB。 * Memory Page Size Compatibility:應用是否支援特定記憶體頁面大小的檢查結果。 * 發佈審查(Review Process):Google Play 在正式發佈前進行的自動檢查與人工審核。 * 測試報告(Test Report):Google Play 自動測試應用並回報相容性與錯誤資訊。 * Library 更新(Library Update):將應用依賴的第三方函式庫更新至最新版本。 * SDK 更新(SDK Update):更新 Google 或第三方 SDK,以支援 16KB。 * Crash 測試(Crash Testing):在 16KB 環境中測試應用是否崩潰。 * 功能測試(Feature Testing):測試應用所有功能是否在新環境下正常。 * 封閉測試發佈(Closed Testing Release):將新版應用先行釋出給小部分測試人員。 * Promote to Production(推送至正式):將測試版本應用提升為正式版本。 * Recompile with 16KB Alignment:Google Play 警告訊息,要求重新編譯應用以支援 16KB。 * Performance Gains(效能提升):支援 16KB 之後應用獲得的速度與電池優化。 * Emulator System Image Download:下載支援 16KB 的模擬器系統映像檔過程。 * Debug Build(偵錯建置):含除錯資訊的版本,供開發與測試使用。 * Release Build(發佈建置):去除除錯資訊的版本,用於正式上架。 * Gradle Plugin Compatibility:AGP 與 Gradle 之間的相容性需求。 * Dependency Management(相依管理):專案追蹤與更新 SDK/Library 的流程。 * Boot into 16KB Mode(開機進入 16KB 模式):裝置切換至 16KB 記憶體配置運行。 * Google Play System Image:模擬器專用映像檔,支援 Google 服務與 16KB。 * Thorough Testing(完整測試):在多個裝置與環境中反覆驗證應用相容性。 * Review Passed(審核通過):Google Play 確認應用支援 16KB,允許正式發佈。 * Warning Removed(警告移除):Play Console 中的 16KB 對齊警告消失,代表相容性完成。