sto cercando di importare https://github.com/Kickflip/kickflip-android-sdk utilizzando Gradle nella mia generazione Android e sto ottenendo:Esclusione di file .class dal Gradle dependecy
IMPREVISTO TOP-LEVEL ECCEZIONE: com.android.dex.DexException: Più file dex definiscono Lorg/apache/commons/codec/binary/Base64;
Commons.codec è una dipendenza del mio progetto, ma non direttamente del progetto kick-flip, penso che provenga da uno dei vasi inclusi. Posso vedere i file .class se apro classes.jar di Kickflip.
Come escludere Base64.class dall'importazione da kickflip nella build finale? Ho cercato di usare ziptree per escludere le cose ma non sono riuscito a far funzionare nulla.
Grazie
mio build.gradle è:
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion "19.0.3"
defaultConfig {
minSdkVersion 10
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1'
exclude 'META-INF/ASL2.0'
}
android.applicationVariants.all{ variant ->
// This is an annoying hack to get around the fact that the Gradle plugin does not support
// having libraries with different minSdkVersions. Play Services has a min version of 9 (Gingerbread)
// but Android Maps Utils supports 8 (Froyo) still
variant.processManifest.doFirst {
File manifestFile = file("${buildDir}/exploded-aar/io.kickflip/sdk/0.9.9/AndroidManifest.xml")
if (manifestFile.exists()) {
println("Replacing minSdkVersion in Android Maps Utils")
String content = manifestFile.getText('UTF-8')
content = content.replaceAll(/minSdkVersion="18"/, 'minSdkVersion=\"10\"')
manifestFile.write(content, 'UTF-8')
println(content)
}
}
}
}
dependencies {
compile 'com.android.support:support-v4:19.1.0'
compile 'io.kickflip:sdk:0.9.9'
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':libs:typeface-textview:library')
compile project(':libs:gpuimage')
compile 'com.google.android.gms:play-services:4.3.23'
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.koushikdutta.urlimageviewhelper:urlimageviewhelper:1.0.4'
compile ('fr.avianey:facebook-android-api:3.14.0') {
exclude module: 'support-v4'
}
compile 'com.github.japgolly.android:svg-android:2.0.1'
compile 'org.scribe:scribe:1.3.5'
compile 'commons-codec:commons-codec:1.8'
}
vedo che il kickflip richiede la versione minima Android SDK 18. E il tuo file di build definisce minSdkVersion 10. Questo potrebbe essere un problema. – Genry
Ho provato anche a costruirlo. Sembrano dire che gli strumenti di build 19.1 devono essere usati e stanno dicendo di compilare da una linea di comando Gradle. Sono su Android Studio quindi gli esempi si lamentano solo del fatto che la versione gradle sia obsoleta per essere supportata. Il pulsante di download semplice per Eclipse è stato rimosso da developer.android.com. – Giuseppe
In Eclipse ho ricevuto più errori di dex che di solito ha a che fare con il linkage della libreria errato o forse una libreria che viene inclusa più volte. Questo è forse il motivo per cui stanno suggerendo l'uso di una build da riga di comando Gradle. – Giuseppe