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

2021-05-14 19:00:30

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

當您在考慮使用 SDK 或程式碼庫時,知曉它們對如何處理和使用資料處理尤為重要,這將使得您可以更好地保護使用者隱私。

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

Merged Manifest 檢視

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

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

Merged Manifest 檢視示例

Merged Manifest 檢視範例

這樣的展示效果能夠幫助您快速定位到由應用依賴所帶來的異常許可權請求。由於執行時的許可權請求對話方塊可能會改變使用者的互動,因此這些分析資料不僅非常有用,而且還能夠使您更加全面地掌握應用的依賴對資料的使用目的。如果有必要的話,您需要向使用者解釋何時以及為何要存取某些資料。

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

該許可權很有可能對於您所使用的服務來說是可選的。對於需要最小化資料使用的場景,您可以在應用模組的清單檔案中新增一個 來防止該庫的許可權請求被合併到最終的應用中。

<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 是符合要求的。

展開閱讀全文