2017-08-07 2 views
0

Je tente d'exécuter une version Android pour mon projet LibGDX et j'obtiens une erreur lorsque la version tente d'exécuter android: transformClassesWithDexForDebug. J'ai cherché une solution à ce problème pendant un moment maintenant et aucune des suggestions ont semblé fonctionner. Je cours une machine Linux avec 16 Go de RAM, donc les prépositions d'un problème de RAM sont très peu probables. J'ai activé Dex pour mon application, ajouté Dex comme dépendance, réduit la version SDK cible, nettoyé et reconstruit le projet, redémarré Android Studio, redémarré mon ordinateur, essayé la dernière version stable d'Android Studio et la version bêta de Canary 9 , Tout en rien. Le message que je reçois pour l'exécution a échoué est:Échec de l'exécution de transformClassesWithDexForDebug dans LibGDX Android deploy

Error:Execution failed for task ':android:transformClassesWithDexForDebug'. 
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/programs/android-studio-preview/jre/bin/java'' finished with non-zero exit value 1 

Ceci est mon fichier en cours de build.gradle pour le module android:

android { 
    buildToolsVersion '21.1.2' 
    compileSdkVersion 21 
    sourceSets { 
     main { 
      manifest.srcFile 'AndroidManifest.xml' 
      java.srcDirs = ['src'] 
      aidl.srcDirs = ['src'] 
      renderscript.srcDirs = ['src'] 
      res.srcDirs = ['res'] 
      assets.srcDirs = ['assets'] 
      jniLibs.srcDirs = ['libs'] 
     } 

     instrumentTest.setRoot('tests') 
    } 
    packagingOptions { 
     exclude 'META-INF/robovm/ios/robovm.xml' 
    } 
    defaultConfig { 
     applicationId "com.bradvok.gravityballz" 
     minSdkVersion 21 
     targetSdkVersion 21 
     multiDexEnabled true 
    } 
    dexOptions { 
     incremental true 
     javaMaxHeapSize "4g" 
    } 
    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_7 
     targetCompatibility JavaVersion.VERSION_1_7 
    } 
} 
// called every time gradle gets executed, takes the native dependencies of 
// the natives configuration, and extracts them to the proper libs/ folders 
// so they get packed with the APK. 
task copyAndroidNatives() { 
    file("libs/armeabi/").mkdirs(); 
    file("libs/armeabi-v7a/").mkdirs(); 
    file("libs/arm64-v8a/").mkdirs(); 
    file("libs/x86_64/").mkdirs(); 
    file("libs/x86/").mkdirs(); 

    configurations.natives.files.each { jar -> 
     def outputDir = null 
     if (jar.name.endsWith("natives-arm64-v8a.jar")) outputDir = file("libs/arm64-v8a") 
     if (jar.name.endsWith("natives-armeabi-v7a.jar")) outputDir = file("libs/armeabi-v7a") 
     if (jar.name.endsWith("natives-armeabi.jar")) outputDir = file("libs/armeabi") 
     if (jar.name.endsWith("natives-x86_64.jar")) outputDir = file("libs/x86_64") 
     if (jar.name.endsWith("natives-x86.jar")) outputDir = file("libs/x86") 
     if (outputDir != null) { 
      copy { 
       from zipTree(jar) 
       into outputDir 
       include "*.so" 
      } 
     } 
    } 
} 
task run(type: Exec) { 
    def path 
    def localProperties = project.file("../local.properties") 
    if (localProperties.exists()) { 
     Properties properties = new Properties() 
     localProperties.withInputStream { instr -> 
      properties.load(instr) 
     } 
     def sdkDir = properties.getProperty('sdk.dir') 
     if (sdkDir) { 
      path = sdkDir 
     } else { 
      path = "$System.env.ANDROID_HOME" 
     } 
    } else { 
     path = "$System.env.ANDROID_HOME" 
    } 

    def adb = path + "/platform-tools/adb" 
    commandLine "$adb", 'shell', 'am', 'start', '-n', 'com.bradvok.gravityballz/com.bradvok.gravityballz.AndroidLauncher' 
} 
// sets up the Android Eclipse project, using the old Ant based build. 
eclipse { 
    // need to specify Java source sets explicitly, SpringSource Gradle Eclipse plugin 
    // ignores any nodes added in classpath.file.withXml 
    sourceSets { 
     main { 
      java.srcDirs "src", 'gen' 
     } 
    } 

    jdt { 
     sourceCompatibility = 1.8 
     targetCompatibility = 1.8 
    } 

    classpath { 
     plusConfigurations += [project.configurations.compile] 
     containers 'com.android.ide.eclipse.adt.ANDROID_FRAMEWORK', 'com.android.ide.eclipse.adt.LIBRARIES' 
    } 

    project { 
     name = appName + "-android" 
     natures 'com.android.ide.eclipse.adt.AndroidNature' 
     buildCommands.clear(); 
     buildCommand "com.android.ide.eclipse.adt.ResourceManagerBuilder" 
     buildCommand "com.android.ide.eclipse.adt.PreCompilerBuilder" 
     buildCommand "org.eclipse.jdt.core.javabuilder" 
     buildCommand "com.android.ide.eclipse.adt.ApkBuilder" 
    } 
} 
// sets up the Android Idea project, using the old Ant based build. 
idea { 
    module { 
     sourceDirs += file("src"); 
     scopes = [COMPILE: [plus: [project.configurations.compile]]] 

     iml { 
      withXml { 
       def node = it.asNode() 
       def builder = NodeBuilder.newInstance(); 
       builder.current = node; 
       builder.component(name: "FacetManager") { 
        facet(type: "android", name: "Android") { 
         configuration { 
          option(name: "UPDATE_PROPERTY_FILES", value: "true") 
         } 
        } 
       } 
      } 
     } 
    } 
} 
dependencies { 
    compile 'com.android.support:multidex:1.0.1' 
} 

Manifest actuel:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.xxxxxxx.xxxxxxxxxxxx" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="25" android:targetSdkVersion="25" /> 

    <application 
     android:name="android.support.multidex.MultiDexApplication" 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/GdxTheme" > 
     <activity 
      android:name="com.xxxxxxx.xxxxxxxxxxxx.AndroidLauncher" 
      android:label="@string/app_name" 
      android:screenOrientation="landscape" 
      android:configChanges="keyboard|keyboardHidden|orientation|screenSize"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

Je essayé avec pratiquement toutes les combinaisons de versions de SDK de compilation, les versions de SDK cible et les versions de SDK minimum de 21-25. Le téléphone sur lequel je suis en train de tester est un API HTC One de niveau 21 et aucune mise à jour n'est disponible. Cela dit, le problème pourrait-il être avec mon téléphone? Il est également intéressant de mentionner que j'ai été capable de lancer la construction avec succès il y a un certain temps sur une version antérieure de l'application, et quand je suis revenu à cette version, le même problème s'est produit. Encore une fois, j'ai fait référence à tous les autres threads StackOverflow liés à ce problème, mais aucune des solutions à ce jour n'a été capable de résoudre le problème que j'ai. Y at-il autre chose que je peux essayer?

+0

montrent toute dépendance pour le module android qui peut être à l'intérieur du fichier 'build.gradle' de la racine – Aryan

+0

J'ai eu ce problème une fois quand j'ai fait un refactoring de champ/variable qui a également changé quelque chose gradle indésirable. –

Répondre

1

Selon Android doc:

android { 
    compileSdkVersion 26 
    buildToolsVersion "21.1.2" 

    defaultConfig { 
     ... 
     minSdkVersion 15 
     targetSdkVersion 21 
     ... 

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

dependencies { 
    compile 'com.android.support:multidex:1.0.1' <-- Not required when minimum sdk is >=21 
} 

Outre la modification de build.gradle vous devez modifier votre fichier Manifest pour définir android:name dans la balise <application> comme suit:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.myapp"> 
     <application 
     android:name="android.support.multidex.MultiDexApplication" > 
     ... 
    </application> 
</manifest> 
+0

J'ai essayé ces changements, et il donne toujours la même erreur. J'ai mis à jour ma question avec mon manifeste actuel. –

+0

Hmm, j'ai baissé le niveau de langue et maintenant il semble fonctionner. –

+0

@ZodiacZubeda supprime la balise ' Aryan