Android NoSuchFieldError解決辦法
前幾天在開發的時候,把一個library搬到了一個新的工程中,然后在主應用模塊中調用library的Activity,發現出現了NoSuchFieldError:

然而,查看代碼明明是沒有問題的,layout文件存在且id正確,R文件也正常。后來在StackOverFlow上找到了答案,原因是主應用模塊和library里面的layout文件重名了,把其中一個名字改了就正常運行。后來寫了個小demo重現了錯誤并分析了一下打包的apk:
主模塊和library模塊里新建相同名字的layout文件,但兩者不同,如圖所示
主模塊的文件

library的文件

最后在打包生成的apk文件中,這個名字的layout文件只有一個,并且是主模塊的layout文件:

另外,apk文件中的resources.arsc文件中的id確實沒有library中定義的id
結論
Android的打包機制決定了不能有同名的layout文件,故只能避免模塊之間文件的重名
新聞熱點
疑難解答