这篇博客,只是把自己在开发中经常遇到的打包编译问题以及解决方案给大家稍微分享一下,不求吸睛,但求有用。

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编译运行各种踩坑解决方案,杜绝弯路,总有你想要的~的更多相关文章

  1. android studio编译包真机安装失败解决方案记录

    Android studio升级到3.0之后,编译的APK文件无法在真机上安装,提示安装失败,最开始以为是API版本过高,与手机的版本不兼容,然后降低API,结果依然是安装失败. 然后连接手机,直接调 ...

  2. Android Studio编译运行project报错:····· finished with non-zero exit value 1

    错误代码: Error:Execution failed for task ':app:transformClassesWithDexForDebug'. > com.android.ide.c ...

  3. 手把手图文并茂教你用Android Studio编译FFmpeg库并移植

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52661331 之前曾写过一篇&l ...

  4. 【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 ...

  5. Android Studio 开始运行错误

    /******************************************************************************** * Android Studio 开 ...

  6. 安装android Studio和运行react native项目(基础篇)

    ANDROID_HOME环境变量 确保ANDROID_HOME环境变量正确地指向了你安装的Android SDK的路径. 打开控制面板 -> 系统和安全 -> 系统 -> 高级系统设 ...

  7. android studio 编译加速

    1. http://www.52codes.net/article/658.html 2.http://my.oschina.net/sammy1990/blog/388846 3.http://st ...

  8. Android Studio 每次运行都会再下载一遍,修改

    Android Studio 每次运行都会再下载一遍 把 gradle 设置 use local gradle distribution

  9. 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. ...

随机推荐

  1. ExtJS 4.2 评分组件

    上一文章是扩展ExtJS自带的Date组件.在这里将创建一个评分组件. 目录 1. 介绍 2. 示例 3. 资源下载 1. 介绍 代码参考的是 Sencha Touch 2上的一个RatingStar ...

  2. nodejs进阶(6)—连接MySQL数据库

    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...

  3. Connect() 2016 大会的主题 ---微软大法好

    文章首发于微信公众号"dotnet跨平台",欢迎关注,可以扫页面左面的二维码. 今年 Connect 大会的主题是 Big possibilities. Bold technolo ...

  4. 通往全栈工程师的捷径 —— react

    腾讯Bugly特约作者: 左明 首先,我们来看看 React 在世界范围的热度趋势,下图是关键词“房价”和 “React” 在 Google Trends 上的搜索量对比,蓝色的是 React,红色的 ...

  5. HTML中上传与读取图片或文件(input file)----在路上(25)

    input file相关知识简例 在此介绍的input file相关知识为: 上传照片及文件,其中包括单次上传.批量上传.删除照片.增加照片.读取图片.对上传的图片或文件的判断,比如限制图片的张数.限 ...

  6. bootstrap-datetimepicker 进一步跟进~~~开始时间和结束时间的样式显示

    上次简单介绍了一下:05.LoT.UI 前后台通用框架分解系列之——漂亮的时间选择器(http://www.cnblogs.com/dunitian/p/5524019.html) 这次深入再介绍一下 ...

  7. iOS逆向工程之App脱壳

    本篇博客以微信为例,给微信脱壳."砸壳"在iOS逆向工程中是经常做的一件事情,,因为从AppStore直接下载安装的App是加壳的,其实就是经过加密的,这个“砸壳”的过程就是一个解 ...

  8. PHP之用户验证和标签推荐的简单使用

    本篇主要是讲解一些最简单的验证知识 效果图 bookmark_fns.php <?php require_once('output_fns.php'); require_once('db_fns ...

  9. Collection集合

    一些关于集合内部算法可以查阅这篇文章<容器类总结>. (Abstract+) Collection 子类:List,Queue,Set 增: add(E):boolean addAll(C ...

  10. Zookeeper常用命令

    http://www.cnblogs.com/chengxin1982/p/3997706.html