国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

關(guān)于 OkHttp 依賴沖突問(wèn)題的解決過(guò)程

myeveryheart / 3571人閱讀

摘要:由于使用了的遠(yuǎn)程依賴形式,故直接刪除沖突的內(nèi)容無(wú)效,須轉(zhuǎn)為使用本地依賴的形式。根據(jù)官方文檔的指示,刪除的倉(cāng)庫(kù)依賴,使用本地包形式的依賴,去除對(duì)的包的引用,即可順利解決問(wèn)題。

「博客搬家」  原地址: CSDN  原發(fā)表時(shí)間: 2016-11-18

OkHttp 是一個(gè)流行的開(kāi)源網(wǎng)絡(luò)請(qǐng)求庫(kù)。許多第三方庫(kù)的底層都是使用 OkHttp 實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求,所以 OkHttp 相關(guān)的依賴沖突問(wèn)題就變得很難避免,下文是我所遇到的一次關(guān)于 OkHttp 的依賴沖突問(wèn)題,通過(guò)對(duì) Gradle 工具及 Android Studio 的靈活使用,解決了此問(wèn)題。

1. 關(guān)于 OkHttp 的依賴沖突

我的項(xiàng)目中, build.gradle 文件中設(shè)置的主要依賴:

dependencies {
    compile "com.android.support:appcompat-v7:24.0.0"
    compile "cn.bmob.android:bmob-sdk:3.5.2"
    compile "com.squareup.okhttp3:okhttp:3.4.2"
    compile "com.facebook.fresco:imagepipeline-okhttp3:0.12.0"
    compile "com.facebook.fresco:fresco:0.12.0"
}

在寫(xiě)該 App 的過(guò)程中,出現(xiàn)了較為詭異的情況:

使用 Run "app" 命令可以在 Android 6.0「API 23」環(huán)境中成功運(yùn)行 App

使用 Run "app" 命令針對(duì) Android 4.4「API 19」環(huán)境的虛擬機(jī),進(jìn)行 Gradle 構(gòu)建時(shí)報(bào)錯(cuò)

使用「Generate Signed APK」,在進(jìn)行 Gradle 構(gòu)建時(shí)報(bào)錯(cuò)

在 cmd 或 Windows PowerShell 中執(zhí)行如下 Gradle 指令:

gradle clean
gradle build

報(bào)錯(cuò),所報(bào)錯(cuò)誤分別如下 :

Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Lokhttp3/Address;

Error:Execution failed for task ":app:transformClassesWithDexForDebug".
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: java.lang.UnsupportedOperationException
:app:transformClassesWithDexForDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ":app:transformClassesWithDexForDebug".
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: java.lang.Unsu
pportedOperationException

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

通過(guò)打印的異常信息,可以確定問(wèn)題是在于 OkHttp 的依賴沖突。

2. 依賴沖突問(wèn)題的探究 2.1 使用 Gradle 工具對(duì)依賴沖突進(jìn)行探究

Gradle 相關(guān)簡(jiǎn)介:

「一」Gradle位置:

C:Users< 用戶名 >.gradlewrapperdistsgradle- < 版本號(hào) > -all<一串識(shí)別碼>gradle- < 版本號(hào) >

< Android Studio 目錄 > gradlegradle- < 版本號(hào) >

「二」Gradle 環(huán)境變量配置:

在環(huán)境變量里添加用戶變量: GRADLE_HOME

在環(huán)境變量 path 中增加: %GRADLE_HOME%bin;

此時(shí),我直接使用 Gradle 工具檢查此項(xiàng)目的依賴,進(jìn)入項(xiàng)目目錄,執(zhí)行如下指令進(jìn)行依賴檢查:

cd app
gradle dependencies

打印出如下圖所示的依賴樹(shù),依賴樹(shù)顯示了你 build 腳本聲明的頂級(jí)依賴和它們的傳遞依賴:

箭頭所指的地方為與 OkHttp 相關(guān)的庫(kù),從依賴樹(shù)可知,我自行引入的 OkHttp 庫(kù)替換掉了 Fresco 中的低版本庫(kù),但仍舊提示依賴沖突。

經(jīng)過(guò)多次嘗試,發(fā)現(xiàn)只有同時(shí)去掉這兩個(gè)對(duì) OkHttp 的依賴時(shí),問(wèn)題得到解決,build.gradle 文件修改如下:

dependencies {
    compile "com.android.support:appcompat-v7:24.0.0"
    compile "cn.bmob.android:bmob-sdk:3.5.2"
    //compile "com.squareup.okhttp3:okhttp:3.4.2"
    compile("com.facebook.fresco:imagepipeline-okhttp3:0.12.0", {
        exclude module: "okhttp"
    })
    compile "com.facebook.fresco:fresco:0.12.0"
}
2.2 對(duì)解決依賴沖突問(wèn)題的嘗試

這個(gè)問(wèn)題很奇葩,去掉對(duì) OkHttp 的依賴怎么可以呢?對(duì)著錯(cuò)誤代碼查遍了 Google 和 Stack Overflow,提到的解決方法有如下兩條:

2.2.1 使用 Multidex support library 開(kāi)啟 Multidex 功能

步驟 1:更改 build.grade

defaultConfig {
    ...
    // Enabling multidex support.
    multiDexEnabled true
}

dependencies {
    ...
    compile "com.android.support:multidex:1.0.1"
}

步驟 2:設(shè)置 Application 類

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

步驟 3:更改 grade.properties

org.gradle.jvmargs=-XX:MaxHeapSize=2048m -Xmx2048m
2.2.2 通過(guò)增大可用內(nèi)存解決「:app:transformClassesForDexForDebug」異常

在 gradle.build 中指定 javaMaxHeapSize:

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

不過(guò),這兩種辦法都無(wú)益于解決問(wèn)題。

3. 追根溯源解決依賴沖突 3.1 問(wèn)題的精確定位

通過(guò)中文搜索引擎搜索之后,在一篇文章中獲得了靈感:

對(duì)于如下異常:

2.Execution failed for task ":app:transformClassesWithJarMergingForDebug".

com.android.build.api.transform.TransformException: 
java.util.zip.ZipException: duplicate
entry: android/support/v4/app/BackStackState$1.class

原因:在所添加的 jar 包或 aar 包中也引用了 support-V4 , 與工程中引用的相沖突

Ctrl+N –> 在搜索框中輸入 BackStackState –> 查找到所有引用該類的類,這些類即為引起沖突的類

去掉本工程中 gradle 中用于引用有沖突的包的代碼或者將沖突的代碼從 jar 包或 aar 包中移除,確保一個(gè) module 中只引用了一份相同的第三方包

根據(jù)這份解決思路,進(jìn)行問(wèn)題的最終解決。

首先獲取如下異常的關(guān)鍵信息:

Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Lokhttp3/Address;

由異常信息可知,OkHttp 下的 Address 類有沖突,執(zhí)行如下步驟:

Ctrl + N

在搜索框中輸入 Address

查找到所有引用該類的類

搜索到的內(nèi)容,如下圖所示。可知,Bmob 和 OkHttp 中均有該類。

3.2 刪掉沖突的 Jar 包

將項(xiàng)目的顯示樹(shù)由 Android 切換到 Project,查看 Bmob 的 Jar 包的結(jié)構(gòu),發(fā)現(xiàn)其中依賴了一個(gè) OkHttp 的 Jar 包。

由于使用了 Gradle 的遠(yuǎn)程依賴形式,故直接刪除沖突的內(nèi)容無(wú)效,須轉(zhuǎn)為使用本地依賴的形式。

根據(jù) Bmob 官方文檔的指示,刪除 Bmob 的 Maven 倉(cāng)庫(kù)依賴,使用本地 Jar 包形式的依賴,去除對(duì) OkHttp 的 Jar 包的引用,即可順利解決問(wèn)題。當(dāng)然也可以只使用 Bmob 的遠(yuǎn)程依賴而在 build.gradle 中去掉其他相關(guān)「如 OkHttp,Gson,RxJava 等」的依賴。

4. 參考資料

問(wèn)題預(yù)備

Android OkHttp 完全解析 是時(shí)候來(lái)了解 OkHttp 了

Gradle 實(shí)戰(zhàn)「1」 - 配置環(huán)境變量

Gradle 系列教程之依賴管理

MultiDex

Android分包 MultiDex 原理詳解

How to enable multidexing with the new Android Multidex support library

問(wèn)題解決

Android Studio 編譯中的一些問(wèn)題解決辦法

Android Studio 中如何解決重復(fù)依賴導(dǎo)致的 app:transformClassesWithJarMergingForDebug

Bmob的開(kāi)發(fā)文檔

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/68255.html

相關(guān)文章

  • Android框架 - 收藏集 - 掘金

    摘要:說(shuō)好的分類集合來(lái)啦,采用標(biāo)簽云的方式來(lái)展示掘金閱讀提示點(diǎn)擊下文中返回到頂部有分類不合理的地方請(qǐng)?zhí)帷7淳幾g這個(gè)后發(fā)現(xiàn)其使用個(gè)優(yōu)質(zhì)的開(kāi)源項(xiàng)目掘金是由的開(kāi)源的一個(gè)庫(kù),用于構(gòu)建可預(yù)期的和聲明式的用戶界面。 想不想通過(guò)一線互聯(lián)網(wǎng)公司面試? - Android - 掘金國(guó)內(nèi)一線互聯(lián)網(wǎng)公司內(nèi)部面試題庫(kù) 以下面試題來(lái)自于百度、小米、樂(lè)視、美團(tuán)、58、獵豹、360、新浪、搜狐內(nèi)部題庫(kù) 熟悉本文中列出的知...

    zengdongbao 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<