2015-01-17 26 views
8

我現在面臨以下問題的時刻:禁用依賴權限

我已經開發的應用程序「A」,它使用權限1,2,3,並且使用第三方庫「B」作爲一個依賴(加入使用maven & gradle)。

庫'B'使用權限4和5.現在,在構建應用程序時,清單合併器將權限4和5添加到應用程序'A'。

我該如何防止這種情況,並且只有最終清單中的權限1,2和3? http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Markers

回答

13

您需要使用Selector

每個工具:節點或工具:ATTR聲明可以由被擴充爲這裏看到

我的第一個猜測是使用清單合併標誌之一 工具:選擇器屬性是關於是否合併策略應該應用於當前較低的 優先級XML描述的上下文信息。

<permission 
     android:name="permissionOne" 
     tools:node="remove" 
     tools:selector="com.example.lib1"> 

這將是未來根據您最初的要求

<!--suppress AndroidDomInspection --> 
<uses-permission 
    tools:node="removeAll"/> 

但:例如,僅除去如果未來的一個特定的庫,而不是任何 庫 許可時,這是非常有用請記住,所有其他<uses-permissions/>將被刪除。

+0

使用你的第二個例子,當我怎樣才能抑制導致警告? 「應該定義名稱屬性」 – throwaway

+0

@throwaway使用Android工具命名空間'xmlns:tools =「http://schemas.android.com/tools」',將它添加到'' – gio

+0

Naw,我正在談論那個, ''節點需要一個'andorid:name'屬性(根據lint),這就是我的意思:https://i.imgur.com/V5YZp11.png該項目仍然存在這個錯誤,但它很容易混淆 – throwaway

0

如您所知,所有庫都有一個清單文件並將合併在一起。 您可以刪除權限是由這是你的圖書館之一:

tools:node="remove" 

爲例移除位置的權限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="remove" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove" />