【踩坑速记】二次依赖?android studio编译运行各种踩坑解决方案,杜绝弯路,总有你想要的~
这篇博客,只是把自己在开发中经常遇到的打包编译问题以及解决方案给大家稍微分享一下,不求吸睛,但求有用。
1、大家都知道我们常常会遇到dex超出方法数的问题,所以很多人都会采用android.support-multidex进行解决,但是你也许会遇到下面这样的错误,不由得让你冥思苦想,这个出错原因一般是引入了多个相同的包,但是你打开一开,libs下明明就只有一个包呀,让人头疼。
Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'.
> java.util.zip.ZipException: duplicate entry: android/support/multidex/MultiDex.class
解决方案如下:首先删掉libs下面的jar包,并解除依赖,然后在gradle脚本中,加入compile 'com.android.support:multidex:1.0.1'
(当前最新版本是1.0.1),顺利解决。
2、相信下面这个问题也比较常见,至少楼主遇到很多次了,前面没做笔记,搞的每次都要重新去理解,所以这个问题必须总结一下,杂一看又是v4包重复了。
* What went wrong:
Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/annotation/ColorRes.class
具体解决方案为:由于很多第三方包都会用到v4支持包,这样在你导入多个支持的时候难免会出现这样的错误,只需在build.gradle里面添加上
configurations {
all*.exclude group: 'com.android.support', module: 'support-v4'
}
然后clean一下工程再build就好。记住必须先clean,不然还是无法解决!!
3、如果重复的包你并不知道是哪里重复了怎么办?比如这个:
Java.util.zip.ZipException: duplicate entry: com/nineoldandroids/animation/Animator$AnimatorListener.class
这个问题是由于添加的第三方项目依赖中,有多个项目同时依赖了nineoldandroids这个动画库的原因,多出现在as用项目构建工具gradle构建项目的时候。
最简单的解决方法:
在as左侧选择project后,在左侧项目列表中展开external libraries,这里面是gradle为你自动下载好的jar包,依次点击展开依赖的项目,并在其中的classes.jar下找到重复的com.nineoldandroids包,手动delete即可,最后留下一个即可。
4、什么?这还不够狠?给你来个更能节省找问题时间的。大家都知道我们在android开发过程中或多或少会引入module,不仅可以提高项目的开发进度,而且项目管理起来也会相当方便。
但是!!!!你可能会遇到在同一个项目中引入多个module,而这些module又因为引入了同一个jar包或者有冲突的jar包的时候,这样你可能可以通过编译,但是你打包apk会直接报错有木有?如果你一个是module,一个是直接在app下的build.gradle添加的依赖,打包时候看到二次引入,你估计会想:什么?二次引入?你可能根本丈二的和尚摸不着头脑,因为也许你依赖了很多三方的东西,而你竟然不知道哪个用了这个jar包导致了这个异常,的确让人心力交瘁,蓝瘦香菇。
在解决问题之前,我还是想在这里多说几句,说下关于module的集中依赖的区别,如果想直接看解决方案的请跳:
1) compile:它是对所有的build type以及favlors都会参与编译并且打包到最终的apk文件中。
2) provided:它是对所有的build type以及favlors只在编译时使用,类似eclipse中的external-libs,只参与编译,不打包到最终的apk。
3) apk:只会打包到apk文件中,而不参与编译,所以不能在代码中直接调用jar中的类或者方法,否则编译时报错。
4) test compile:它仅仅是针对单元测试代码的编译以及最终打包测试apk时有效,而对正常的debug或者release apk包不起任何作用。
5) debug compile:它仅仅针对debug模式的编译和最终的debug apk打包。
6) release compile:仅仅针对release模式的编译和最终的release apk打包。
回归正题,这样的解决方案是什么:
直接看打包的错误打印,找到module中这个二次引入的jar包,把compile更改为provided,这样在写代码的时候可以在所属的module中正常使用jar包中的类,而生成的apk不会包含该jar包。这样在编译的时候由于只有一个jar包编译进apk,便不会发生上面所说的二次引入的冲突错误了。
【注】使用provided必须删除compile fileTree(include: ['*.jar'], dir: 'libs') 不然lib下的jar均按照compile方式引入到Module。
还是来个例子:我在项目中用了一堆堆的compile,而由于集成了环信的easeui,又因为其使用了glide的jar包,所以导致我在release的时候,glide发生了冲突,所以我采用了上面的解决方案,得到了成功解决。下面是easeui的build文件。我把glide换成了provided。
今天就先讲到这里,后面会持续更新,帮大家踩坑,持续关注吧~
2016/12/07补充
今天遇到一个导入一个新库的时候出现异常
java.lang.UnsatisfiedLinkError: com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader[DexPathList[[dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-support-annotations-25.0.1_90941a77b2b94e164136c426d140cfe0713579d1-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-slice_0-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-rxjava-1.2.0_870337658ae259b4e95c589b707604c2e552ee88-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-retrofit-2.1.0_02cdaa5f093e78b272a8b951b62057cb62740b8d-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-picasso-2.5.2_2428dbd5eabf65ae69bc01abd6e4b72d08e545aa-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-parse-android-1.13.0_4515c5f93c9f181f78d21e114c731820c9c0999c-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-org.apache.http.legacy_e4a662e38e87ba9aba584fba71c26d677575fa22-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-okio-1.9.0_db0545b090bbd931e1cf6e43202e038727277a7d-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-okhttp-3.4.1_a3a718343956c6e4d917a53a4fdd4a4dc134cda5-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-mobAPI-1.0.6_52db92710d9ddfc179b67c21c9dd1fd75c5359b0-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-me.zhanghai.android.materialprogressbar-library-1.3.0_d3d39d36af179081bbaa70f93cbbf294916d6a68-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-me.xiaopan-assemblyadapter-2.2.0_73b132544aaa40f14e5060f665680f347bb97de3-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-me.wangyuwei-ParticleView-1.0.5_4ae89dcc85783878dcc540643b6bdee7b4a10901-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-library-2.4.0_dd460f45d27a359687729c3c169358b1eda3100b-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-leakcanary-watcher-1.5_34a203fec755c3a4cf8b68e6158267ab4379fd5b-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-leakcanary-analyzer-1.5_1c9538df116ffddb5272c7355d65a1d2955ff7ca-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-jp.wasabeef-recyclerview-animators-2.2.3_15d3f8b560ea0845185068ede8fc16fcf2bcb304-classes.dex", dex file "/data/data/com.example.nanchen.aiyaschoolpush/files/instant-run/dex/slice-io.reactivex-rxandroid-1.2.1_ce5cad2fcff3d5d6d5783b67c7bce0a6f3cd5e8c-classes.dex", dex file "/data/data/com.example.nanchen.
经过多番核查,此类错误一般是jniLibs库加载的时候出现了问题,检查发现新库的jniLibs目录下只有armeabi-v7a一个包,而之前项目中依赖的环信有四个包
这样的情况解决方法两种:因为armeabi和armeabi-v7a在一定意义上是可以直接copy的,所以第一种方法是让新库提供方提供支持are64-v8a和x86的so文件;另外一种就是直接删掉之前的arm64-v8a和x86包,不过这样有风险,一旦遇上这样的手机会很难受~
【踩坑速记】二次依赖?android studio编译运行各种踩坑解决方案,杜绝弯路,总有你想要的~的更多相关文章
- android studio编译包真机安装失败解决方案记录
Android studio升级到3.0之后,编译的APK文件无法在真机上安装,提示安装失败,最开始以为是API版本过高,与手机的版本不兼容,然后降低API,结果依然是安装失败. 然后连接手机,直接调 ...
- Android Studio编译运行project报错:····· finished with non-zero exit value 1
错误代码: Error:Execution failed for task ':app:transformClassesWithDexForDebug'. > com.android.ide.c ...
- 手把手图文并茂教你用Android Studio编译FFmpeg库并移植
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52661331 之前曾写过一篇&l ...
- 【Android】Android studio 编译问题:finished with non-zero exit value 2
1.Android studio 编译问题:finished with non-zero exit value 2 问题: Error:Execution failed for task ':andr ...
- Android Studio 开始运行错误
/******************************************************************************** * Android Studio 开 ...
- 安装android Studio和运行react native项目(基础篇)
ANDROID_HOME环境变量 确保ANDROID_HOME环境变量正确地指向了你安装的Android SDK的路径. 打开控制面板 -> 系统和安全 -> 系统 -> 高级系统设 ...
- android studio 编译加速
1. http://www.52codes.net/article/658.html 2.http://my.oschina.net/sammy1990/blog/388846 3.http://st ...
- Android Studio 每次运行都会再下载一遍,修改
Android Studio 每次运行都会再下载一遍 把 gradle 设置 use local gradle distribution
- Android studio 编译失败Error:Could not read entry ':app:processDebugManifest' from cache taskArtifacts.b
Android studio 编译失败 Error:Could not read entry ':app:processDebugManifest' from cache taskArtifacts. ...
随机推荐
- Oracle分析函数入门
一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...
- 使用HTML5开发Kinect体感游戏
一.简介 我们要做的是怎样一款游戏? 在前不久成都TGC2016展会上,我们开发了一款<火影忍者手游>的体感游戏,主要模拟手游章节<九尾袭来 >,用户化身四代,与九尾进行对决, ...
- EntityFramework Core Raw SQL
前言 本节我们来讲讲EF Core中的原始查询,目前在项目中对于简单的查询直接通过EF就可以解决,但是涉及到多表查询时为了一步到位就采用了原始查询的方式进行.下面我们一起来看看. EntityFram ...
- 干货分享:让你分分钟学会 JS 闭包
闭包,是 Javascript 比较重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是ECMA规范给的定义,如果没有实战经验,很难从定义去理解它.因此,本文不会对闭包的概念进行大篇幅描述 ...
- 简单有效的kmp算法
以前看过kmp算法,当时接触后总感觉好深奥啊,抱着数据结构的数啃了一中午,最终才大致看懂,后来提起kmp也只剩下“奥,它是做模式匹配的”这点干货.最近有空,翻出来算法导论看看,原来就是这么简单(先不说 ...
- [算法]——快速排序(Quick Sort)
顾名思义,快速排序(quick sort)速度十分快,时间复杂度为O(nlogn).虽然从此角度讲,也有很多排序算法如归并排序.堆排序甚至希尔排序等,都能达到如此快速,但是快速排序使用更加广泛,以至于 ...
- Python学习
Python基础教程 网易云课堂-零基础入门学习Python
- Lind.DDD.LindMQ~关于持久化到Redis的消息格式
回到目录 关于持久化到Redis的消息格式,主要是说在Broker上把消息持久化的过程中,需要存储哪些类型的消息,因为我们的消息是分topic的,而每个topic又有若干个queue组成,而我们的to ...
- Android中开发工具Android Studio修改created用户(windows环境)
最近经常有朋友反馈说我的安卓项目中,在一些类中会出现Created by panchengjia on 2016/12/30的字样,是如何自动实现的(默认一般为Administrator),如下图: ...
- XAMARIN ANDROID 二维码扫描示例
现在二维码的应用越来越普及,二维码扫描也成为手机应用程序的必备功能了.本文将基于 Xamarin.Android 平台使用 ZXing.Net.Mobile 做一个简单的 Android 条码扫描示 ...