簡體   English   中英

為R類中的相同資源生成不同的ID

[英]Different IDs are generated for the same resource in R classes

當編譯具有一個或多個apk庫的項目時, aapt工具會生成多個R.java。 每個庫一個,一個用於應用程序本身。

這些R文件中的每一個都將定義相同的ID。 現在已經有一段時間沒有問題了。 多年來實際上。 但突然間不再了。 現在,相同的資源有兩個不同的ID。

目標/生成來源/ R / COM / viewpagerindicator / R.java:

public static int default_line_indicator_selected_color=0x7f04000b;

目標/生成來源/ R /凈/ sourceforge的/ UIQ3 / fx602p / R.java:

public static final int default_line_indicator_selected_color=0x7f07000b;

有誰知道可能出了什么問題?

更新:

我仔細檢查了其他項目。 在那里我注意到除了final的R.java文件應該100%相同。 特別是:每個R.java文件都應該定義所有ID - 甚至是不屬於庫的ID。

在我麻煩的項目中也不是這樣。 每個庫R.java僅定義庫使用的ID。

快速和骯臟的修復

直到我發現真正的問題,我使用以下螞蟻任務作為快速和骯臟的修復:

            <copy
              encoding='${project.build.sourceEncoding}'
              file='target/generated-sources/r/net/sourceforge/uiq3/fx602p/R.java'
              overwrite='true'
              toFile='target/generated-sources/r/com/viewpagerindicator/R.java'
            >
              <filterchain>
                <tokenfilter>
                  <replacestring
                    from='net.sourceforge.uiq3.fx602p'
                    to='com.viewpagerindicator'
                  ></replacestring>
                </tokenfilter>
              </filterchain>
            </copy>

我想知道為什么aapt被調用幾次,當一個帶有搜索和替換的副本也可以做到這一點。 請注意,我也不會刪除final

組裝項目時,庫項目將被主項目覆蓋。 我認為這解釋了為什么庫中的R id不是final

您對default_line_indicator_selected_color所有引用都將使用新值0x7f07000b

在什么情況下你有這個問題?

當您構建依賴於庫項目的應用程序時,SDK工具會將庫編譯為臨時JAR文件並在主項目中使用它,然后使用結果生成.apk。 如果在應用程序和庫中都定義了資源ID,則這些工具可確保應用程序中聲明的資源獲得優先級,並且庫項目中的資源不會編譯到應用程序.apk中。 這使您的應用程序可以靈活地使用或重新定義任何庫中定義的任何資源行為或值。

http://developer.android.com/tools/projects/index.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM