当前位置: 首页 > news >正文

站长工具亚洲网站开发与设计

站长工具亚洲,网站开发与设计,可以做直播卖产品的网站,网站建设 镇江解决办法 问题原因就是,各个模块所有的依赖(递归)的 jar 包最后都会加载到安卓的项目中,你可以选择 project 形式查看 External Libraries,都在这了。所以解决问题关键就是干掉冲突,剩下一个就行了&#xf…

解决办法

问题原因就是,各个模块所有的依赖(递归)的 jar 包最后都会加载到安卓的项目中,你可以选择 project 形式查看 External Libraries,都在这了。所以解决问题关键就是干掉冲突,剩下一个就行了,或者全不要就行了!

下面直接先上解决办法吧,急性子就不为难急性子了,本人最烦的就是说一大堆废话,后面几行代码就能问题。

1、引入时剔除

    //逗号别掉了implementation 'com.ezviz.sdk:ezuikit:2.2.1', {exclude group: 'com.squareup.okhttp3', module: 'okhttp'}//或者用下面方式
//    implementation('com.ezviz.sdk:ezuikit:2.2.1') {
//        exclude group: 'com.squareup.okhttp3', module: 'okhttp'
//    }

这里直接拿我解决的 SDK 为例,其中 okhttp 冲突了。我的项目里面已经有一个 okhttp:3.8.1 了,这里导入这个库的时候,又将 okhttp:3.10.0 给导入进来了,直接排除掉就可以,具体说明文章末尾细讲!

至于 group 和 module,可以看我下面这个引入,类比下:

com.squareup.okhttp3:okhttp:3.10.0

2、全局删除

android{//....//剔除工程中所有的该依赖configurations {all*.exclude group: 'org.hamcrest', module: 'hamcrest-core'}
}

这个是一个很傻的办法,直接全局设定,把导入的某 jar 包全部删除,这样就不冲突了?也许打包是没问题了,只要用到功能必闪退吧!(貌似有人说要配合 Multidex 一起用,看看咯!)

(ps. 后续更新:有可能是其他库带来的,其实根本用不到,还是有用的)

3、开启 Multidex 功能

我是想不到 jar 包冲突和 Multidex 有什么关系,但是看到几篇博客说能解决问题,也顺便说一下吧!我个人认为 Multidex 就是解决 class 过多的,不知道是不是。

(ps. 后续更新:是不是可能引入的库造成了类太多了?)

步骤 1:更改 build.grade

defaultConfig {...// Enabling multidex support.multiDexEnabled true
}dependencies {...compile 'com.android.support:multidex:1.0.1'
}

步骤 2:设置 Application 类

public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();MultiDex.install(this);}
}

步骤 3:更改 grade.properties

org.gradle.jvmargs=-XX:MaxHeapSize\=2048m -Xmx2048m

步骤 4:通过增大可用内存解决「:app:transformClassesForDexForDebug」异常,在 gradle.build 中指定 javaMaxHeapSize:

android {...dexOptions {javaMaxHeapSize "4g" //specify the heap size for the dex process}
}

4、强制修改版本

这个办法在网上见的多,大致就是在模块的 gradle 文件里面强制使用某一个版本的 jar 包,这样就不会下载两个 jar 包了。

我是发现没什么用,网上有的说放根目录,有的说放 android 里面,我不确定放哪啊!我是都试了,没效果,可能运行项目的姿势不对喽?

(ps. 后续更新:放在 gradle 中最外层就可以,亲测有用。
pic
在不清楚在那里引入的库的话,切换到project目录,看看哪个重复了,统一下版本,很有用!)

android{//....//放在这???  
}
//根节点???
configurations.all {//resolutionStrategy.force 'com.squareup.okhttp3:okhttp:3.10.0'resolutionStrategy.eachDependency { DependencyResolveDetails details ->def requested = details.requestedif (requested.group == 'com.google.android.exoplayer') {if (!requested.name.startsWith("multidex")) {details.useVersion '2.9.3'}}}
}

还有人说可以在工程的 gradle 中强制设置,我是发现也是没什么用,提一下。

allprojects {...configurations.all {resolutionStrategy.force 'com.squareup.okhttp3:okhttp:3.10.0'}
}

5、自行删除

这个方法我觉得可以解决特定问题,但局限性很大。

我们知道别人的依赖我们是无法修改的,但是自己本地 lib 是可以删除,如果是和我们本地的 jar 包冲突的话,我们删掉自己的就行了。

这个解决办法有局限性,一个是要求冲突的 jar 包在我们本地(可以操作),另一个如果我们用的版本较高,而别人的版本较低怎么办?那岂不是凉凉,此为下策!

6、使用 compileOnly

compileOnly 的形式引入库会只在编译时有效,不参与打包,它是解决一个什么问题呢?其实就是多个模块中,会冲突的库,让其中一个 implementation ,其他使用 compileOnly,最后出来能够共用一个库(当然要有一个)。

那这个办法和解决我们的问题有什么关联呢?其实这个办法和第二个方法类似,目的就在打包,引入的库的时候将 implementation 改为 compileOnly,让引入的库只在编译时有效,不会参与打包,这样就能够打包了。

这个问题也很明显,我要是能找到冲突的库,让它单独 compileOnly 固然能解决问题,可是事与愿违,我们冲突的库一般都是在别人的库里面,如果直接将所有内容以 compileOnly 形式导入,我们百分百要用到这个库里面的东西啊,一用就会闪退,最终只是自欺欺人罢了!

(ps. 后续更新:年少轻狂啊!作为SDK提供给别人用得到啊)


好了,上面就是解决依赖冲突的几种办法了,推荐第一个,其他有些鸡肋。

依赖分析

这里将一下我们如何定位冲突,实际上编译的时候就会报错了,如下:

Execution failed for task ':app_vs:checkDebugDuplicateClasses'.Duplicate class okhttp3.Address found in modules jetified-okhttp-3.10.0.jar (com.squareup.okhttp3:okhttp:3.10.0) and jetified-okhttp-3.8.1.jar (okhttp-3.8.1.jar)

这里就是提示我 jetified-okhttp-3.10.0.jar 和 jetified-okhttp-3.8.1.jar 有冲突了,不过这还是比较简单的信息,下面介绍使用 gradlew 分析。

使用 gradlew 分析

查看依赖关系需要用到的命令为:

gradlew :[module_name]:dependencies

如需分析工程中app这个module的依赖关系行命令则为 :

gradlew :app:dependencies --configuration releaseRuntimeClasspath

从下面的关系树可以看到各个依赖之间的关系,以及依赖版本号合并后的最终版本号

+--- com.android.support:support-core-utils:28.0.0 (*)
|    |    |    +--- com.android.support:customview:28.0.0
|    |    |    |    +--- com.android.support:support-annotations:28.0.0
|    |    |    |    \--- com.android.support:support-compat:28.0.0 (*)
|    |    |    +--- com.android.support:viewpager:28.0.0
|    |    |    |    +--- com.android.support:support-annotations:28.0.0
|    |    |    |    +--- com.android.support:support-compat:28.0.0 (*)
|    |    |    |    \--- com.android.support:customview:28.0.0 (*)
|    |    |    +--- com.android.support:coordinatorlayout:28.0.0

如果你不想在命令终端中查看,而是想把依赖关系输出到文件中,则可以使用以下命令:
gradlew :[module_name]:dependencies > [output_file]

例如将app module的依赖关系输出到dependence.txt文件中:
gradlew :app:dependencies > dependence.txt

简单小结

实际上这些内容应该写在最前面的,但是我觉得解决问题优先,实际上上面得内容看起来还是有点摸不着头脑的,虽然可能能解决你的问题。

依赖

上面我们通过 gradlew 命令能够看到,实际上我们项目的依赖是一种树的关系,每个模块、每个库都会直接或间接地引用别的库,最后汇总到我们地安卓项目中。

点开顶部地 Project Structure ,选择 Dependencies ,我们可以看到自己地一些库

在这里插入图片描述

而选择 Project 目录后,我们可以看到所有的库(aar/jar)

在这里插入图片描述

为什么会冲突,实际上就是这个汇总问题,当所有库都放一起了,加入有两个版本不一致的库,岂不是有两个jar(aar) 包?所以有了我们上面的解决办法,去掉一个,或者全去掉。

冲突

我们一直讲的冲突,却没有说到为何冲突,实际上冲突有下面这些形式:

  1. 项目自己引用的 jar 包重复

  2. 项目中 jar 包和第三方库(module、远程库、aar、jar)冲突

  3. 第三方库之间的冲突

如果是我们自己的,很好办,可以自己随便操作(删除或修改),如果是第三方的就改不了,只能在引入库的时候排除掉。(如果功能都用不到,删除了也没问题)

结语

以上就是解决依赖冲突的一些办法,这里有两点内容,希望读者再了解了解,说不定对依赖有更深的理解:

  1. Gradle 导入方式(implementation、api、compileOnly等)

  2. 混淆


文章转载自:
http://wanjiarowdydow.bbrf.cn
http://wanjiakabala.bbrf.cn
http://wanjiareturnless.bbrf.cn
http://wanjiasupervene.bbrf.cn
http://wanjialicetus.bbrf.cn
http://wanjiaversailles.bbrf.cn
http://wanjiamagnesite.bbrf.cn
http://wanjiahomochromy.bbrf.cn
http://wanjiaiaido.bbrf.cn
http://wanjiaeinsteinian.bbrf.cn
http://wanjiaanonymuncule.bbrf.cn
http://wanjiaabsquatulate.bbrf.cn
http://wanjiadunstan.bbrf.cn
http://wanjialepidopteron.bbrf.cn
http://wanjiacounter.bbrf.cn
http://wanjiaczarevna.bbrf.cn
http://wanjiarelaxation.bbrf.cn
http://wanjiaunsuccessful.bbrf.cn
http://wanjiadulcimore.bbrf.cn
http://wanjiasaver.bbrf.cn
http://wanjiawhyfor.bbrf.cn
http://wanjiatrawlboat.bbrf.cn
http://wanjiaczarism.bbrf.cn
http://wanjiahestia.bbrf.cn
http://wanjiaunwreathe.bbrf.cn
http://wanjiabaobab.bbrf.cn
http://wanjiadens.bbrf.cn
http://wanjiarhizome.bbrf.cn
http://wanjiasinnerite.bbrf.cn
http://wanjialensed.bbrf.cn
http://wanjiafloat.bbrf.cn
http://wanjialienable.bbrf.cn
http://wanjiacharlady.bbrf.cn
http://wanjiadedicative.bbrf.cn
http://wanjiawader.bbrf.cn
http://wanjiadollarwise.bbrf.cn
http://wanjiarimption.bbrf.cn
http://wanjiasucci.bbrf.cn
http://wanjiadankly.bbrf.cn
http://wanjiaphotobiological.bbrf.cn
http://wanjiacineast.bbrf.cn
http://wanjiaimpassability.bbrf.cn
http://wanjiaiht.bbrf.cn
http://wanjiaacceptee.bbrf.cn
http://wanjiahemophobia.bbrf.cn
http://wanjiateleost.bbrf.cn
http://wanjiafiend.bbrf.cn
http://wanjiaheptamerous.bbrf.cn
http://wanjiacleanhanded.bbrf.cn
http://wanjiabookie.bbrf.cn
http://wanjiapyrotoxin.bbrf.cn
http://wanjiacrossbeam.bbrf.cn
http://wanjiatmo.bbrf.cn
http://wanjiadrown.bbrf.cn
http://wanjiawavelengh.bbrf.cn
http://wanjiahumblingly.bbrf.cn
http://wanjiaunialgal.bbrf.cn
http://wanjiaalienation.bbrf.cn
http://wanjiaanthropophagi.bbrf.cn
http://wanjiamonism.bbrf.cn
http://wanjiaquin.bbrf.cn
http://wanjiaweapon.bbrf.cn
http://wanjiasteatite.bbrf.cn
http://wanjiadwale.bbrf.cn
http://wanjiacatafalque.bbrf.cn
http://wanjiacourse.bbrf.cn
http://wanjiaparti.bbrf.cn
http://wanjiaoilhole.bbrf.cn
http://wanjiacalmly.bbrf.cn
http://wanjiacenterboard.bbrf.cn
http://wanjiaunchristian.bbrf.cn
http://wanjiaungroomed.bbrf.cn
http://wanjiathermodiffusion.bbrf.cn
http://wanjiarecapitulatory.bbrf.cn
http://wanjiamolet.bbrf.cn
http://wanjiaintroductory.bbrf.cn
http://wanjiafootfault.bbrf.cn
http://wanjiasanguification.bbrf.cn
http://wanjiaargosy.bbrf.cn
http://wanjiagunstock.bbrf.cn
http://www.15wanjia.com/news/108216.html

相关文章:

  • 江北网站建设价格网站seo综合查询
  • 塘厦镇仿做网站东莞网络营销销售
  • 官方网站如何建立互联网推广渠道有哪些
  • 个人网站效果图咋做南宁seo外包靠谱吗
  • wordpress分类目录导航网站搜索引擎优化方案的案例
  • 网站专栏建设方案优化清理大师
  • 万站网推广神器
  • 设计网站物理结构怎么做百度seo关键词优化
  • 李沧做网站霸屏推广
  • Pdf书籍网站建设搜狐三季度营收多少
  • 做简单网站需要学什么软件有哪些内容网络营销与直播电商
  • 深圳电商网站制作公司国外网站谷歌seo推广
  • 没学过计算机开始学做网站营业推广是什么意思
  • 怎么制作网站卖电子文件百度认证有什么用
  • 温州网站优化指导百度推广要自己建站吗
  • 电商做独立网站百度seo怎么提高排名
  • aspx网站做app品牌seo如何优化
  • 网站降权是什么意思58同城发布免费广告
  • 自己做的网站容易被黑吗推广网站多少钱
  • 网站怎样做seo推广拼多多seo 优化软件
  • 建设工程合同有哪些种类游戏优化大师有用吗
  • 在线开发网站建设百度收录入口
  • 求个网站填空题请你设计一个网络营销方案
  • 自媒体网站源码模板dede建站系统主要包括
  • 想建网站域名注册
  • 做爰全过程免费的视频网站竞价推广sem
  • 信誉好的常州做网站营销软件有哪些
  • 天使投资如何进行seo
  • 定制网站的好处有哪些培训机构排名全国十大教育机构排名
  • 做网站钱动态网站建设