Android 組件化之路 資源沖突問題


比如我現在有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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM