比如我現在有3個模塊:app模塊,user模塊,me模塊,其中app模塊依賴user模塊和me模塊。
然后我在user模塊和me模塊的strings.xml中都定義了greet字符串:
// user模塊 <resources> ... <string name="greet">Hello!</string> ... </resources> // me模塊 <resources> ... <string name="greet">Hi!</string> ... </resources>
然后在app模塊引用greet這個字符串:
// app模塊 <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="30dp" android:text="@string/greet" />
那么問題來了,app模塊引用的greet是user模塊的呢,還是me模塊的呢??這里出現資源沖突問題!!
解決辦法比較容易,每個子模塊給資源名添加前綴,具體做法是在每個子模塊的build.gradle文件的android塊內添加一行代碼:resourcePrefix “資源名前綴”:
// me模塊的build.gradle文件
... android { compileSdkVersion 25 buildToolsVersion "25.0.3" resourcePrefix "me_" ... } ... // user模塊的build.gradle文件 ... android { compileSdkVersion 25 buildToolsVersion "25.0.3" resourcePrefix "user_" ... } ...
此時,你會發現,你定義的xml資源文件會報錯!!為啥?
我天真的以為AS會自動幫我們的資源名自動加上前綴,原來寫了這段代碼之后,AS會約束我們定義資源時,要我們手動加上前綴,否則報錯!!所以只是起約束作用!!
改正錯誤之后,資源文件變成這樣了:
// user模塊 <resources> ... <string name="user_greet">Hello!</string> ... </resources> // me模塊 <resources> ... <string name="me_greet">Hi!</string> ... </resources>
這樣app引用的時候,就不會混亂了!!
如果你還知道其他方法,請不吝賜教!!
————————————————
版權聲明:本文為CSDN博主「JohanMan」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/JohanMan/article/details/77101477