问题描述:博主在导入别人一个Demo时候,在编译时编译失败,打出如下错误日志信息
(一)异常log信息如下:
Error:Execution failed for task ':RecyclerViewDemo:mergeDebugResources'.
> java.lang.ArrayIndexOutOfBoundsException (no error message)
(二)翻译如上的错误信息为:
RecyclerViewDemo在合并调试资源的时候执行任务失败!数组下标越界异常(没有错误信息)
(三)分析:
为什么会出现这样的问题呢?带着这个问题检查了一下程序,根据问题的描述应该不是代码的问题,然后查看资源文件目录res目录,咦!发现了问题
如下图
res目录下怎么多了一个资产目录(assets)?这个目录不应该放在main下面吗?
(四)解决:
就尝试着将这个目录移动到main目录下,然后再编译运行就解决了这个问题,最后想了一下res目录下的资源文件必须是要放在固定文件名的资源目录下的,而且这些文件再编译的过程中都在R.java文件下生成相应的标记,会对应一个的id来进行访问,而assets目录下的文件不会生成对应的id,使用的时候要使用AssetsManager类来访问assets目录下的资源,这里的资源会在运行打包操作的时候判断哪些被使用到了,没有被使用到的文件资源是不会打包到安装包中,最后还有一点就是assets目录下允许存在多级目录,而res下不允许目录结构存在。
由于水平有限(正往Android大神进化中ing...),难免会有说的不对的地方,如果有什么问题希望大家踊跃批评指正,最后如果解决了大家的问题可以给我点个赞,也算是对我小小的鼓励吧...谢谢!