別讓引入的 SDK 和第三方庫導致您應用被下架!
或許您的應用正在使用一些第三方 SDK 或者代碼庫,畢竟 "站在巨人的肩膀上" 比從頭開始最基礎的應用開發(fā)更節(jié)省時間。作為應用開發(fā)者,您需要為應用的整體情況負責,包括用戶體驗和您的代碼,當然,也包含第三方 SDK 和代碼庫。
當您在考慮使用 SDK 或代碼庫時,知曉它們對如何處理和使用數據處理尤為重要,這將使得您可以更好地保護用戶隱私。
在本文中,我將和大家分享幾個工具,可用于應用開發(fā)的不同階段,包括開發(fā)階段和應用發(fā)布后 (這是對 SDK 廠商文檔的補充,推薦大家仔細閱讀 SDK 文檔)。
Merged Manifest 視圖
為了能夠增加靈活性,Gradle 支持多個以應用構建配置、應用模塊或代碼庫依賴需求而定義的單獨 Android Manifest 文件。這些清單文件根據工程需要包含不同的默認 XML 元素和屬性。當構建應用時,Gradle 會將所有清單文件合并到一個清單文件中。您可以 指定 "合并規(guī)則" 來定義數值的合并方式。接下來,我們探討如何使用這個工具洞悉您所依賴的 SDK。
Android Studio 提供了一種簡單的方式來檢查最終合并后的清單文件。方法是點擊處于清單文件編輯窗口底部的 "Merged Manifest" 標簽頁。通過界面凸顯的不同顏色,您可以清楚地分辨出不同的清單文件來源 (Manifest Sources)。這些源包括不同的代碼庫依賴,例如下圖展示了名稱為 "transport-backend" 的依賴在應用中所用到的權限。
這樣的展示效果能夠幫助您快速定位到由應用依賴所帶來的異常權限請求。由于運行時的權限請求對話框可能會改變用戶的交互,因此這些分析數據不僅非常有用,而且還能夠使您更加全面地掌握應用的依賴對數據的使用目的。如果有必要的話,您需要向用戶解釋何時以及為何要訪問某些數據。
如果您在合并后的清單文件中看到任何異常的權限使用,請仔細審閱相關依賴庫文檔 (或者聯(lián)系開發(fā)者),并確保您了解該權限使用的實際目的。
該權限很有可能對于您所使用的服務來說是可選的。對于需要最小化數據使用的場景,您可以在應用模塊的清單文件中添加一個 "remove" 節(jié)點標記 來防止該庫的權限請求被合并到最終的應用中。
- <uses-permission android:name="SOME_PERMISSION"
- tools:node="remove"/>
模塊依賴視圖
在開發(fā)工具鏈中另一個非常實用的工具是 Gradle 的模塊依賴支持。依賴圖表通常的用法是定位構建過程中遇到的問題。依賴圖表還可以顯示間接依賴的信息,有助于幫助開發(fā)者知曉由依賴庫引入的額外依賴。如需了解更多信息,請參閱: 查看模塊依賴項。
接下來,我們將介紹另外一款工具,它可以幫助您更好地了解應用中的數據訪問情況。
數據訪問審計
隨著應用復雜性的提高 (包括您團隊規(guī)模的不斷擴大),在應用的開發(fā)過程中很難直觀地檢查與 SDK 相關隱私數據的訪問情況。
Android 11 引入了 數據訪問審計 的特性,它可以幫助開發(fā)者確認在應用使用過程中哪段代碼訪問了數據。該特性可以讓您將隱私數據與應用中的業(yè)務場景相關聯(lián),比如 "點咖啡" 或者 "與朋友分享"。進而定位任何異常的數據訪問操作,并確定哪個模塊或者應用場景執(zhí)行了訪問操作。
如需使用該特性,首先創(chuàng)建一個 context 對象,并且為其關聯(lián)一個 "屬性標簽",該標簽和某個業(yè)務場景相關,比如 "點咖啡"。您可以在 OrderCoffeeActivity.onCreate() 方法內實現(xiàn)這些。
- attributionContext = createAttributionContext("orderCoffee")
您可以在之后開發(fā)框架的 API 調用中將上面創(chuàng)建的 attributionContext 作為 Context 類型的參數進行使用。
接下來,設置一個回調,當隱私數據被訪問的時候會調用該回調。在回調內部,您可以獲取 attributionTag (上面所設置的屬性標簽),并提取堆棧信息或者集成您自己的應用分析方法。
- val appOpsCallback = object : AppOpsManager.OnOpNotedCallback() {
- // 當您的應用訪問了隱私數據的時候,該回調會在應用訪問隱私數據的時候被調用
- // 比如聯(lián)系人數據
- override fun onNoted(syncNotedAppOp: SyncNotedAppOp) {
- logDataAccess(syncNotedAppOp.op,
- // 這里會返回上面創(chuàng)建 attributionContext 的時候所傳入的標簽字符串,
- // 比如,這里就是 “orderCoffee”
- syncNotedAppOp.attributionTag,
- Throwable().stackTrace.toString())
- }
數據訪問審計同時支持同步和異步兩種 API 調用,并且可以在 Android 11 及之后的設備上使用。如需了解更多信息,請參閱: 數據訪問審計。
小結
Android 11 中新增的 Merged Manifest 工具、Gradle 對于模塊依賴的支持、數據訪問審計 API,均是為了能夠幫助開發(fā)者針對應用內和 SDK 依賴的數據訪問和操作提供額外的監(jiān)測。從而使您為終端用戶展現(xiàn)更好的透明性。推薦大家將這些工具整合進現(xiàn)有的工作流程中。
此外,如果您通過 Google Play 商店發(fā)布應用,請確認已經閱讀了相關的 用戶數據策略,并且確保您使用的 SDK 是符合要求的。
本文轉自OSCHINA
本文標題:別讓引入的 SDK 和第三方庫導致您應用被下架!
本文地址:https://www.oschina.net/news/141535/pay-attention-on-3rd-library-and-sdk
資訊來源:https://my.oschina.net/androiddevs/blog/5048766