背景:
项目中有两个app工程(暂命名为A和B),共同依赖一个common工程。原先有个activity在B工程中,因需要变成A和B公用,所以将此activity移到common工程中。
问题描述:运行B工程时,正常;但是运行A工程时,直接闪退。报错信息如下:
2018-10-15 15:32:02.148 19895-19895/com.test E/Tinker.UncaughtHandler: UncaughtHandler catch exception:java.lang.NullPointerException: Attempt to invoke virtual method ‘void android.widget.TextView.setText(java.lang.CharSequence)’ on a null object reference at com.TestFragment.onViewCreated(CargoFragment.java:89) 原因分析:1.此activity处于两个工程共同依赖的工程中,按理说在B工程正常,那再A工程也应该正常。不明白为什么对应的viewId在A工程时,就出现找不到的情况。 2.另外发现一个奇怪的现象:A工程和B工程分别调用时,查看activity里view下的子view的数量,竟然不一样。 3.后来在同事的帮助下,终于找到问题原因。在A工程中存在和common工程中acvitiy所用布局文件一样名字的文件。
解决方案:修改common工程中acvitity所用布局文件名称,同时排查其他资源是否也存在此类问题。 对于此类工程间资源冲突覆盖问题,应参考规范安卓模块内资源命名,避免多模块打包出现资源冲突
安卓开发技术分享: https://blog.csdn.net/yinxing2008/article/details/84555061