2017-02-28 18 views
0

我正在創建一個Android依賴庫,它將被打包爲一個AAR文件。依賴關係將有layouts,strings,dimens,images等我創建了一個示例演示項目,其中包括此依賴項。在Android模塊中有沒有辦法從自己的模塊中獲取資源,而不是從應用模塊獲取資源?

現在考慮以下情況。

我的圖書館包含一個名爲filter.pngImage文件,並在佈局文件中使用它。該演示項目還有一個名爲filter.pngImage,但它是一個不同的圖像。所以當項目建成時,只有應用程序的filter.png被拿起。所以即使在我的庫的佈局文件中,我也看到了演示項目使用的圖像。

截至目前,我已在每個資源名稱之前更改了名稱和附加包名稱以避免出現上述情況。 但是,有沒有什麼辦法可以強制Android只從當前模塊挑選資源?

回答

2

庫將只能訪問自己的一套資源,但沒有什麼可以阻止應用程序有意覆蓋圖書館的資源。

爲防止意外覆蓋,您通常以您的圖書館資源名稱爲前綴。例如,AppCompat使用前綴abc_,而設計支持庫使用design_前綴。

此外,you can explicitly declare which resources of your library are public,這樣其他人將默認爲私人,如果應用覆蓋他們,您將收到Lint警告。

2

你的應用程序和庫會有不同的包名稱,是的。

截至目前,我在每天的資源名稱前更改了名稱,並追加包的名稱以避免出現上述情況

這是正確的,因爲資源是通過包名關聯。

com.example.app.R.drawable.filter(這往往只是R.drawable.filter檢查import語句!),當前模塊。

VS其他模塊,com.example.library.R.drawable.filter

Android - Accessing Resources

[<package_name>.]R.<resource_type>.<resource_name>

相關問題