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

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

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

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

Merged Manifest 視圖

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

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

Merged Manifest 視圖示例

這樣的展示效果能夠幫助您快速定位到由應用依賴所帶來的異常權限請求。由於運行時的權限請求對話框可能會改變用戶的交互,因此這些分析數據不僅非常有用,而且還能夠使您更加全面地掌握應用的依賴對數據的使用目的。如果有必要的話,您需要向用戶解釋何時以及爲何要訪問某些數據。

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

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

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

模塊依賴視圖

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

接下來,我們將介紹另外一款工具,它可以幫助您更好地瞭解應用中的數據訪問情況。

數據訪問審計

隨着應用複雜性的提高 (包括您團隊規模的不斷擴大),在應用的開發過程中很難直觀地檢查與 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 是符合要求的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章