本期技術週刊一起了解 Android,歡迎大家閱讀 ~
核心知識進階
Android 開發中的SSL pinning // xiangzhihong
在日常的安全滲透過程中,我們經常會遇到瓶頸無處下手,這時候如果攻擊者從 APP 進行突破,往往會有很多驚喜。但是目前市場上的APP都會為防止別人惡意盜取和惡意篡改進行一些保護措施,比如模擬器檢測、root 檢測、APK 加固、程式碼混淆、程式碼反除錯、反脫殼、簽名校驗等等對抗機制。而測試人員對APP進行滲透的首步操作通常就是上 burp 或者 Charles 這類抓包工具進行抓包,檢視請求記錄裡的域名及連結地址是否可以進一步利用。
我們都知道 http 協議傳輸的是明文資訊,是可以直接捕獲的,從而造成了資料洩露。為了防止中間人的攔截,出現了 HTTPS 加密機制。在 HTTPS 中,使用了證書+數字簽名解決了抓包的問題,這裡用到了兩個概念:數字簽名和數字證書。
TheRouter 的跨模組依賴注入實現原理 // 張濤
TheRouter 用於跨模組通訊設計的 ServiceProvider,核心設計思想是參考了 SOA (面向服務架構)的設計方式。
具體到 Android 側就是 AIDL 類似的實現。
模組化能力支援項:
支援跨模組依賴注入
支援自定義注入項的建立規則,依賴注入可自定義引數
支援自定義服務攔截,單模組 mock 除錯
支援注入物件快取,多次注入 只會 new 一次物件
Android 平臺上 ABI 的確認 // 戈壁老王
ABI 即 Application binary interface,是 CPU 與指令集專屬的應用程式二進位制介面。它定義了一套規則,允許編譯好的二進位制目的碼能在所有相容該ABI的作業系統中無需改動就能執行。不同的 Android 裝置使用不同的 CPU,而不同的 CPU 支援不同的指令集。
ABI 包含以下資訊:
可使用的 CPU 指令集(和擴充套件指令集)。
執行時記憶體儲存和載入的位元組順序。Android 始終是 little-endian。
在應用和系統之間傳遞資料的規範(包括對齊限制),以及系統呼叫函式時如何使用堆疊和暫存器。
可執行二進位制檔案(例如程式和共享庫)的格式,以及它們支援的內容型別。Android 始終使用 ELF。
如何重整 C++ 名稱。
最全的 Android 之 Dialog // 浪漫主義碼農
Android 系統提供的對話方塊父類為 Dialog, 裡面並沒有實現對話方塊的具體型別,比如單選、多選、列表等對話方塊,僅提供一個框架和規範。系統為開發者提供了一個 多功能的對話方塊類 AlertDialog, 封裝了各種對話方塊的樣式,我們只需要完成要顯示的內容和監聽。
大部分對話方塊就是使用系統封裝好的對話方塊 AlertDialog 的例項物件。AlertDialog 並不提供對外的構造方法,即不能直接透過 AlertDialog 的建構函式來生產一個AlertDialog。因為 AlertDialog 所有的構造方法都是 protected 的。所以為了獲取 AlertDialog 物件,系統提供了一個靜態內部類 Builder 讓我們使用,透過 Builder 可以建立 AlertDialog 物件。
應用與實踐
淺談 App 的啟動最佳化 // xuexiangjys
在Android中,應用啟動一般可分為三種:冷啟動、溫啟動、熱啟動。
那麼什麼是冷啟動、溫啟動和熱啟動呢?下面我們來簡單看一下它們的定義:
- 冷啟動:當啟動應用時,後臺沒有該應用的程式。這時系統會又一次建立一個新的程式分配給該應用,這個啟動方式就是冷啟動。
- 溫啟動:當啟動應用時,後臺已有該應用的程式,但是Activity可能因為記憶體不足被回收。這樣系統會從已有的程式中來啟動這個Activity,這個啟動方式叫溫啟動。
- 熱啟動:當啟動應用時,後臺已有該應用的程式,且Activity仍然存在記憶體中沒有被回收。這樣系統直接把這個Activity拉到前臺即可,這個啟動方式叫熱啟動。
由於冷啟動相對於其他啟動方式多了程式的建立(Zygote程式fork建立程式)以及應用的資源載入和初始化(Application的建立及初始化),所以相對來說會比較耗時,所以我們一般說的App啟動最佳化一般指的都是App的冷啟動最佳化。
Android App 如何防止抓包 // xiangzhihong
在軟體開發中,常用的抓包方式有 Charles 、 Fiddler和Burp,它們透過在手機網路中新增代理的方式,然後安裝信任證書,接著就可以在 App 請求的時候拿到請求資料。不過,這也可能導致一些安全問題,所以對於我們通常的處理方式是,對於線上執行的包,需要防止這些抓包手段。>
問答推薦
- Android 11 應用進入後臺後前臺服務裡面的 Socket 被掛起?
- 在和前端進行前後互動時出現的問題?
- 安卓開發,獲取檔案路徑變成數字?
- Android native 層 mediaplayer 原始碼修改,如何進行打樁測試?
- 為什麼實際大小和顯示的大小相差那麼多?
- 前端安卓 app 開發,用什麼技術棧比較好呢?
- Android 重複檔案如何區分?
- Androidviewmodel 有一個 App 引數,異常 has no zero argument constructor?
- android linearlayout 設定高度無效?
# SegmentFault 技術週刊 #
「技術週刊」是社群特別推出的技術內容系列,一週一主題。
每週二更新,歡迎「關注」。大家也可以在評論處留言自己感興趣的主題,推薦主題相關的優秀文章。
如有問題可以新增小姐姐微信~