Android本身对于method和field的数量都有64k的限制,所以如果你的Unity工程很大的话,出现这个问题是正常的。不过我居然在一个小工程上遇到了这个问题,而这一切都是Unity的bug作祟。。。
首先工程的情况是这样的:
Unity版本 5.3.4
工程不大
android工程里引用了一堆android support和google play之类的Library Project
如果你的Unity工程和上面情况类似,并且打包的时候遇到了method或者field超过64k的问题,那可能你也遇到了这个bug。这个bug就是Unity在打包的时候每个工程下的R.java文件会错误的引用所有工程的资源文件,从而导致R.java中的field和method数量爆炸。。
对android有点了解的人都知道,android编译的时候会生成一个R.java,其中存有一堆final static的变量,存放着android的res目录下的各种资源id,包括layout,string,drawable等等。正常情况下,每个R.java都应该只引用本工程下的资源文件。但是在使用Unity打包的时候,会出现我上面说的那个问题。
举个栗子:
你的工程叫A,有两个引用D1和D2,A,D1,D2中各有10个资源,正常用android打包的话,只占30个field,但是Unity打包的话会出现30*3=90个field。。。而我引用了20多个包,20多个包总共有近三千个资源,随随便便就七万多了。而这个bug又十分隐蔽,从Eclipse或者AS上看不出任何迹象ÿ