前幾天在開發(fā)的時候,把一個library搬到了一個新的工程中茶凳,然后在主應(yīng)用模塊中調(diào)用library的Activity,發(fā)現(xiàn)出現(xiàn)了NoSuchFieldError:
然而,查看代碼明明是沒有問題的芳悲,layout文件存在且id正確,R文件也正常边坤。后來在StackOverFlow上找到了答案名扛,原因是主應(yīng)用模塊和library里面的layout文件重名了,把其中一個名字改了就正常運行茧痒。后來寫了個小demo重現(xiàn)了錯誤并分析了一下打包的apk:
主模塊和library模塊里新建相同名字的layout文件肮韧,但兩者不同,如圖所示
-
主模塊的文件
-
library的文件
最后在打包生成的apk文件中旺订,這個名字的layout文件只有一個弄企,并且是主模塊的layout文件:
另外,apk文件中的resources.arsc文件中的id確實沒有l(wèi)ibrary中定義的id
結(jié)論
Android的打包機制決定了不能有同名的layout文件区拳,故只能避免模塊之間文件的重名