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

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. 详解树莓派Model B+控制蜂鸣器演奏乐曲

    步进电机以及无源蜂鸣器这些都需要脉冲信号才能够驱动,这里将用GPIO的PWM接口驱动无源蜂鸣器弹奏乐曲,本文基于树莓派Mode B+,其他版本树莓派实现时需参照相关资料进行修改! 1 预备知识 1.1 ...

  2. JS核心系列:浅谈函数的作用域

    一.作用域(scope) 所谓作用域就是:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的. function scope(){ var foo = "global&quo ...

  3. 从零开始编写自己的C#框架(24)——测试

    导航 1.前言 2.不堪回首的开发往事 3.测试推动开发的成长——将Bug消灭在自测中 4.关于软件测试 5.制定测试计划 6.编写测试用例 7.执行测试用例 8.发现并提交Bug 9.开发人员修复B ...

  4. Hawk 4.7 单步调试

    单步调试的意义 已经编写的工作流,可能会因为某些外界环境的变化而出错,此时需要排除错误,我们可以使用单步调试. 单步调试的本质,相当于只使用前n个模块,这样就能看到每个步骤下,流的改变. 例子 还是上 ...

  5. Consul 服务注册与服务发现

    上一篇:Mac OS.Ubuntu 安装及使用 Consul 1. 服务注册 对 Consul 进行服务注册之前,需要先部署一个服务站点,我们可以使用 ASP.NET Core 创建 Web 应用程序 ...

  6. node中的Stream-Readable和Writeable解读

    在node中,只要涉及到文件IO的场景一般都会涉及到一个类-Stream.Stream是对IO设备的抽象表示,其在JAVA中也有涉及,主要体现在四个类-InputStream.Reader.Outpu ...

  7. 著名ERP厂商的SSO单点登录解决方案介绍一

          SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一个用户 ...

  8. Oracle 分页

    --1:无ORDER BY排序的写法.(效率最高) --(经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT * FROM (SELECT ...

  9. 高级渲染技巧和代码示例 GPU Pro 7

    下载代码示例 移动设备正呈现着像素越来越高,屏幕尺寸越来越小的发展趋势. 由于像素着色的能耗非常大,因此 DPI 的增加以及移动设备固有的功耗受限环境为降低像素着色成本带来了巨大的压力. MSAA 有 ...

  10. Quartz

    Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中.它提供了巨大的灵 活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度. eg: ja ...