2015-07-06 89 views
7

我一直在嘗試將亞馬遜SNS客戶端與一個android項目集成。與android包衝突 - 亞馬遜SNS

我使用以下依賴包括庫命令

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:22.2.0' 
    compile 'com.amazonaws:aws-java-sdk-sns:1.10.+' 
    compile 'com.google.android.gms:play-services:7.5.0' 
} 

因此它自動包括上述庫(和它的相關性: aws_java_sdk_coreaws_java_sdk_sqs)。所有3個庫都有版本1.10.2

的問題是,在AWS芯具有兩個模塊

  1. 共享記錄(共享記錄:共享記錄:1.1.3)
  2. 的HttpClient(org.apache.httpcomponents:HttpClient的:4.3 .6)

由於android在內部具有相同的包,因此它不包括這些模塊 以避免任何衝突。結果是,當aws代碼嘗試從這些模塊訪問某些類時。 Tt期待它的不同版本,沒有找到預期的方法,並使應用程序崩潰。

有什麼辦法可以重寫android的排除嗎? (或者是有一個更好的方式來處理這種情況?)

編輯:新增gradle這個日誌:

WARNING: Dependency commons-logging:commons-logging:1.1.3 is ignored for debug as it may be conflicting with the internal version provided by Android. 
     In case of problem, please repackage it with jarjar to change the class packages 
WARNING: Dependency org.apache.httpcomponents:httpclient:4.3.6 is ignored for debug as it may be conflicting with the internal version provided by Android. 
     In case of problem, please repackage it with jarjar to change the class packages 
WARNING: Dependency commons-logging:commons-logging:1.1.3 is ignored for release as it may be conflicting with the internal version provided by Android. 
     In case of problem, please repackage it with jarjar to change the class packages 
WARNING: Dependency org.apache.httpcomponents:httpclient:4.3.6 is ignored for release as it may be conflicting with the internal version provided by Android. 
     In case of problem, please repackage it with jarjar to change the class packages 
+0

扮演魔鬼的代言人,你的項目中是否會有一些代碼需要這些Apache JAR的Android版本? –

+0

添加gradle日誌! –

+0

你能否發佈崩潰日誌以及 –

回答

0

因爲你是在Android項目的工作,請考慮使用AWS SDK for Android。它針對Android平臺進行了優化。它具有更小的庫,更少的依賴關係和其他優化。它應該解決矛盾的問題。檢查出developer guide

這和更新依賴關係來編譯'com.amazonaws:aws-android-sdk-sns:2.2。+'一樣簡單。它的使用應該與Java SDK的兼容。

+0

對於延遲的歉意,我們試圖通過包括核心,這並沒有解決問題。使用SDK本身是不可能的,因爲這個應用程序已經接近完成了! –

+0

不確定爲什麼使用適用於Android的AWS開發工具包已被排除。這與更新依賴來編譯'com.amazonaws:aws-android-sdk-sns:2.2。+'一樣簡單。它的使用應該與Java SDK的兼容。 – Yangfan

0

您是否嘗試排除衝突的依賴關係?由於它們在兩個庫中均可用,因此可以選擇忽略一個,並且應該可以正常工作。

dependencies { 

     ... 
     compile ('com.amazonaws:aws-java-sdk-sns:1.10.2') { 
      exclude group: 'commons-logging', module: 'commons-logging' 
     } 
     compile ('com.amazonaws:aws-java-sdk-sns:1.10.2') { 
      exclude group: 'org.apache.httpcomponents', module: 'httpclient' 
     } 
     .... 
} 

(我已經使用了groupsmodules指示名排除,你可以嘗試確切名稱,認爲它應該工作)

Very useful link that shows how to exclude using, Artifact name, module and both module & artifact.

Check this reference answer as well

+0

這不起作用。適用於Java的AWS SDK具有Apache HttpClient 4.3或更高版本的硬依賴性,這在Android上不可用。您可能會編譯它,但是當您運行該應用程序時,您將看到ClassNotFoundException。 – Yangfan

+0

該死!這是棘手的..讓我看看這是如何工作的。 – Darpan

+0

我已經提出瞭解決方案。最好使用適用於Android的AWS SDK http://aws.amazon.com/mobile/sdk/。它消除了依賴性問題。只是不確定爲什麼原作者想要堅持Java版本。 – Yangfan