依賴圖決定哪些庫能單獨處理
應用可能直接載入主庫,也可能透過主庫繼續載入其他依賴。第三方 SDK 還可能攜帶自己的 Native 元件,並依賴特定的匯出符號或初始化順序。
依賴圖至少應列出庫名、直接與間接依賴、載入入口、初始化時機和呼叫方。缺少這張圖時,對單個 SO 的改動可能在另一個庫載入時才暴露問題。
- 主庫與傳遞依賴
- 系統庫與第三方庫
- 載入入口與初始化順序
- 異常出現的最早階段
JNI 註冊方式影響符號處理
靜態註冊依賴名稱約定,動態註冊通常在初始化階段把 Java 方法與 Native 函式繫結。兩種方式對符號可見性、重新命名和載入時機的約束不同。
在處理匯出或函式表示之前,應確認每個關鍵入口如何註冊、是否被反射或第三方元件呼叫,以及異常時能否在 Java 與 Native 兩側同時定位。
ABI 不是一個可省略的標籤
arm64-v8a、armeabi-v7a 與 x86_64 對應不同的指令、連結產物和依賴組合。某個 ABI 構建成功或在模擬器啟動,不能證明另一個目標架構可用。
釋出前應檢查最終 APK 實際包含的 ABI,並在目標架構上驗證庫解析、應用啟動、關鍵 JNI 呼叫、異常捕獲與第三方 SDK 路徑。
- 最終包包含目標 ABI
- 所有依賴都能解析
- 關鍵 JNI 路徑可重複
- 未覆蓋架構被明確記錄
保護強度要和裝載穩定性一起驗收
刪除符號、處理字串或虛擬化關鍵函式分別減少不同線索,沒有一種動作可以單獨代表完整 Native 保護。啟動初始化和高頻函式還需要額外關注效能與故障半徑。
穩妥的做法是從少量高價值、輸入輸出清楚的函式開始,在同一候選包上逐步擴大範圍,併為每次配置變化保留可回退版本。
讓建議落到真實應用上
提交技術棧、關鍵路徑、目標系統範圍和當前候選包,由御盾給出針對性的保護與相容性驗證建議。