今天在写友盟推送的时候,因为测试模式下的设备总是报红,可能是onAppStar 没有注册好,可能是没有用官方的v4包等等,各种原因。下面就是我添加官方的v4 包和本地gradle dependences 冲突的解决办法:
1.首先查看项目 gradle的依赖是否用到重复的包
我在查看依赖的时候,发现依赖包里面存在v4 的冲突,
通过 exclude mode: ‘support-v4’除去里面使用的v4 包
但是使用之后仍然不成功,因为v4 里面还有一个annotation 的引用 和下面 依赖里面的 v7-recyclerview 也使用了 annotation 这个jar ,所以导致 Multiple dex files define Landroid/support/annotation/AnimRes这样的问题发生
2.继续通过 exclude module 去除 annotation 的重复引用就可以了
处理的相关代码为:
compile (‘com.android.support:recyclerview-v7:21.0.3’){
exclude module: ‘support-v4’
exclude module: ‘support-annotations’
}
这是我处理冲突之后的结果,gradle dependencies 依赖包里面没有再使用到v4和annotations的引用
到此为止基本解决了 Multiple dex files define Landroid/support/annotation/AnimRes 这个问题,存在重复引用的问题;
3.gradle build 或者 代码里面build 之后包没有加到依赖里面解决办法:
手动更新:
4.问题总结
一般 finished with non-zero exit value xxx 的这种问题,idea 的编译器是不会报具体的错误,需要自己手动通过gradle 的命令来解决上面的问题。
– 1.先通过gradle clean 项目
– 2.然后 build 项目
此时你会发现 日志里面会出现具体的错误的问题,例如:xml 错误,图片错误,重复引用等等
– 3.查看项目的gradle 的依赖列表 ,检查jar 冲突的问题
– 4.通过 exclude mode 除去重复的包,然后重复上述步骤
当然我这也是一种情况,也有可能需要配置gradle 的相关配置,根据提示配置就好了:
例如:
packagingOptions {
exclude ‘META-INF/DEPENDENCIES’
exclude ‘META-INF/LICENSE’
exclude ‘META-INF/LICENSE.txt’
exclude ‘META-INF/license.txt’
exclude ‘META-INF/NOTICE’
exclude ‘META-INF/NOTICE.txt’
exclude ‘META-INF/notice.txt’
exclude ‘META-INF/ASL2.0’
}
所有学会使用gradle很有用处,注意版本等问题。