別讓引入的 SDK 和第三方庫致使您應用被下架!

或許您的應用正在使用一些第三方 SDK 或者代碼庫,畢竟 "站在巨人的肩膀上" 比從頭開始最基礎的應用開發更節省時間。做爲應用開發者,您須要爲應用的總體狀況負責,包括用戶體驗和您的代碼,固然,也包含第三方 SDK 和代碼庫。html

當您在考慮使用 SDK 或代碼庫時,知曉它們對如何處理和使用數據處理尤其重要,這將使得您能夠更好地保護用戶隱私。node

在本文中,我將和你們分享幾個工具,可用於應用開發的不一樣階段,包括開發階段和應用發佈後 (這是對 SDK 廠商文檔的補充,推薦你們仔細閱讀 SDK 文檔)。android

Merged Manifest 視圖

爲了可以增長靈活性,Gradle 支持多個以應用構建配置、應用模塊或代碼庫依賴需求而定義的單獨 Android Manifest 文件。這些清單文件根據工程須要包含不一樣的默認 XML 元素和屬性。當構建應用時,Gradle 會將全部清單文件合併到一個清單文件中。您能夠 指定 "合併規則" 來定義數值的合併方式。接下來,咱們探討如何使用這個工具洞悉您所依賴的 SDK。app

Android Studio 提供了一種簡單的方式來檢查最終合併後的清單文件。方法是點擊處於清單文件編輯窗口底部的 "Merged Manifest" 標籤頁。經過界面凸顯的不一樣顏色,您能夠清楚地分辨出不一樣的清單文件來源 (Manifest Sources)。這些源包括不一樣的代碼庫依賴,例以下圖展現了名稱爲 "transport-backend" 的依賴在應用中所用到的權限。框架

Merged Manifest 視圖示例

Merged Manifest 視圖示例

這樣的展現效果可以幫助您快速定位到由應用依賴所帶來的異常權限請求。因爲運行時的權限請求對話框可能會改變用戶的交互,所以這些分析數據不只很是有用,並且還可以使您更加全面地掌握應用的依賴對數據的使用目的。若是有必要的話,您須要向用戶解釋什麼時候以及爲什麼要訪問某些數據。異步

若是您在合併後的清單文件中看到任何異常的權限使用,請仔細審閱相關依賴庫文檔 (或者聯繫開發者),並確保您瞭解該權限使用的實際目的。ide

該權限頗有可能對於您所使用的服務來講是可選的。對於須要最小化數據使用的場景,您能夠在應用模塊的清單文件中添加一個 "remove" 節點標記 來防止該庫的權限請求被合併到最終的應用中。工具

<uses-permission android:name="SOME_PERMISSION"
   tools:node="remove"/>

模塊依賴視圖

在開發工具鏈中另外一個很是實用的工具是 Gradle 的模塊依賴支持。依賴圖表一般的用法是定位構建過程當中遇到的問題。依賴圖表還能夠顯示間接依賴的信息,有助於幫助開發者知曉由依賴庫引入的額外依賴。如需瞭解更多信息,請參閱: 查看模塊依賴項開發工具

接下來,咱們將介紹另一款工具,它能夠幫助您更好地瞭解應用中的數據訪問狀況。ui

數據訪問審計

隨着應用複雜性的提升 (包括您團隊規模的不斷擴大),在應用的開發過程當中很難直觀地檢查與 SDK 相關隱私數據的訪問狀況。

Android 11 引入了 數據訪問審計 的特性,它能夠幫助開發者確認在應用使用過程當中哪段代碼訪問了數據。該特性可讓您將隱私數據與應用中的業務場景相關聯,好比 "點咖啡" 或者 "與朋友分享"。進而定位任何異常的數據訪問操做,並肯定哪一個模塊或者應用場景執行了訪問操做。

如需使用該特性,首先建立一個 context 對象,而且爲其關聯一個 "屬性標籤",該標籤和某個業務場景相關,好比 "點咖啡"。您能夠在 OrderCoffeeActivity.onCreate() 方法內實現這些。

attributionContext = createAttributionContext("orderCoffee")

您能夠在以後開發框架的 API 調用中將上面建立的 attributionContext 做爲 Context 類型的參數進行使用。

接下來,設置一個回調,當隱私數據被訪問的時候會調用該回調。在回調內部,您能夠獲取 attributionTag (上面所設置的屬性標籤),並提取堆棧信息或者集成您本身的應用分析方法。

val appOpsCallback = object : AppOpsManager.OnOpNotedCallback() {
      // 當您的應用訪問了隱私數據的時候,該回調會在應用訪問隱私數據的時候被調用
      // 好比聯繫人數據
      override fun onNoted(syncNotedAppOp: SyncNotedAppOp) {
        logDataAccess(syncNotedAppOp.op,
                 // 這裏會返回上面建立 attributionContext 的時候所傳入的標籤字符串,
                // 好比,這裏就是 「orderCoffee」
                syncNotedAppOp.attributionTag, 
                Throwable().stackTrace.toString())
    }

數據訪問審計同時支持同步和異步兩種 API 調用,而且能夠在 Android 11 及以後的設備上使用。如需瞭解更多信息,請參閱: 數據訪問審計

小結

Android 11 中新增的 Merged Manifest 工具、Gradle 對於模塊依賴的支持、數據訪問審計 API,均是爲了可以幫助開發者針對應用內和 SDK 依賴的數據訪問和操做提供額外的監測。從而使您爲終端用戶展示更好的透明性。推薦你們將這些工具整合進現有的工做流程中。

此外,若是您經過 Google Play 商店發佈應用,請確認已經閱讀了相關的 用戶數據策略,而且確保您使用的 SDK 是符合要求的。

相關文章
相關標籤/搜索