我最近决定将我的Android Studio项目从ant转移到gradle。这个项目实际上是先用gradle创建的,但当时我还没有弄清楚gradle和ant之间的所有差异,所以我手动剥离了项目中的所有gradle并用ant编译它直到现在。
我决定回到gradle,但我没有转换现有的项目,而是创建了一个全新的gradle项目,并从旧的ant中导入了所有模块/粘贴了所有代码/库。
我能够让一切顺利,除非我编译时出现以下错误:
我在用ant编译时从来没有这个方法,就像我上面说的那样,代码,模块和库都是一样的。当我第一次提出这个问题时,我实际上犯了一个错误并输入了我的libs文件夹中的所有罐子两次。这是依赖项的原始列表:
如果仔细观察,第一行是dir = libs include = [* .jar]。我也在下面添加了所有这些罐子(我很笨,只是没看到那是一条线)。所以现在我的依赖列表看起来像这样:
这个要少得多,我认为它可以解决问题。但是,当我尝试将应用程序加载到我的设备上时,发生了同样的错误。
我认为可能是这样的一件事是我的许多模块都依赖于主app依赖的同一个android-support-v4库。我想我在不同的模块(以及主应用程序本身)中引用了maven repo 3-4次。是否有更有效的方法,或编译器是否知道不为每个依赖项包含该v4支持库的不同实例?
另一个值得注意的发现:我遇到了一些看起来像这样的错误:
warning: Ignoring InnerClasses attribute for an anonymous inner class
(com.amazonaws.javax.xml.stream.xerces.util.SecuritySupport12$4) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.
当我运行gradlew assembleDebug时(这特别是抛出错误的进程)。我四处搜索,似乎这只是一个可以忽略的警告,但我想我得到的十几个可能会产生影响。完整的日志可以在这里看到:http://pastebin.com/m4ASGQfC
总结:我收到Dex 65536错误,这表示该项目有太多的方法,但我只是在从ant升级到gradle之后得到此错误,在此之前我做的一切正常。
谢谢!