導入京東open-api-sdk引發的“duplicate files during packaging of APK”錯誤

往工程中導入open-api-sdk-2.0.jar,按照例子寫一個商品搜索:

        final JdClient client = new DefaultJdClient(SERVER_URL, "", APP_KEY, APP_SECRET);
        final WareSearchRequest request = new WareSearchRequest();
        request.setKey("newbalance");
        request.setTimestamp(getTimesTamp());
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    WareSearchResponse response = client.execute(request);
                    Logger.t(TAG).i(response.toString());
                } catch (JdException e) {
                    e.printStackTrace();
                }
            }
        }).start();
運行上面的代碼發現,出錯了??什麼鬼。。。


看到以上錯誤,明白了,沒有找到org.codehaus.jackson.map.ObjectMapper這個類,但是,爲什麼京東開放平臺上沒有提出要依賴這個類的??真的是,五星差評。

既然我們已經找到了錯誤所在,剩下的就是解決問題了,進入工程的Project Structure(Android Studio平臺)找到相應的庫。

          

這時候,我們需要依賴庫:org.codehaus.jackson:jackson-mapper-asl:1.9.13 。

當我們導入這個庫之後,編譯,run起來,我靠,還是有錯誤:


有衝突,解決以上問題也很簡單,只要在app的build.gradle中插入下面這段代碼就可以了:

// 註釋衝突
    packagingOptions {
        exclude 'META-INF/ASL2.0'
        exclude 'META-INF/LICENSE'
    }
LICENSE有衝突,在這裏加入exclude 'META-INF/LICENSE',因爲只加入這個段代碼再進行編譯,發現出現類似錯誤,這次是ASL2.0,所以,需要插入以上兩行代碼,如下:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.0"
    defaultConfig {
        applicationId "com.paxsz.ossdemo"
        minSdkVersion 19
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        ndk {
            abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
        }
    }
    sourceSets {
        main {
            java.srcDirs = ['src/main/java', 'src/main/java-gen']
            jniLibs.srcDirs = ['libs']
        }

        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    // 註釋衝突
    packagingOptions {
        exclude 'META-INF/ASL2.0'
        exclude 'META-INF/LICENSE'
    }
}
repositories {
    flatDir {
        dirs file('libs')

    }
}
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile files('libs/open-api-sdk-2.0.jar')
    compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13'
    compile 'org.codehaus.jackson:jackson-core-asl:1.9.13'
}
加入之後再重新運行,問題應該就解決了。

發佈了35 篇原創文章 · 獲贊 35 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章