Ich begann Android-Entwicklung vor kurzem, so dass ich mich immer noch daran gewöhnen. Ich habe eine API gefunden, die ich in einer Android-App verwenden möchte. Ich fügte das externe Glas meinem libs
-Ordner hinzu und stellte sicher, es als eine Bibliothek hinzuzufügen und kompilierte es in der build.gradle
-Datei. Wenn ich gehe, um die App zu laufen bekomme ich einen Fehler während der gradle Build:Hinzufügen einer externen JAR mit mehr als 65K Methoden für Android-Anwendung
Error:Execution failed for task ':app:preDexDebug'.
> com.android.ide.common.process.ProcessException:
org.gradle.process.internal.ExecException: Process 'command 'C:\Program
Files\Java\jdk1.7.0_51\bin\java.exe'' finished with non-zero exit value 1
Ich suchte online rund um und entdecken, war dies, weil mein äußerees Glas zu groß war, und enthielt mehr als die Grenze 65K Methoden. Ich habe versucht, viele verschiedene Lösungen zu finden, die ich online gefunden habe. Ich habe versucht, Multidexing und befolgte alle Anweisungen auf der offiziellen Android-Website. Hier ist meine build.gradle
:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
...
multiDexEnabled true
}
buildTypes {
...
}
}
dependencies {
testCompile 'junit:junit:4.12'
compile 'com.android.support:multidex:1.0.0'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile files('libs/my-external-jar.jar')
}
Und auch meine AndroidManifest.xml
geändert:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp.app" >
...
<application
...
android:name="android.support.multidex.MultiDexApplication">
<activity
...
</activity>
</application>
</manifest>
Ich habe nicht meine Anwendung Dateien java ändern MultiDexApplication zu erweitern, da ich nicht die Application-Klasse verwenden, aber MainActivity. Wie auch immer, das hat nicht funktioniert und ich habe den gleichen Fehler. Ich habe dann gelernt, dass ich ProGuard
verwenden sollte, um mein Glas zu verkleinern, so dass alle nicht verwendeten Klassen und Methoden keine Probleme verursachen (zumindest habe ich das verstanden, korrigiere mich, wenn ich falsch liege). Also habe ich auch ProGuard
wie auf der Android-Website angewiesen konfiguriert. Hier ist meine build.gradle
:
apply plugin: 'com.android.application'
android {
...
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
dependencies {
...
}
ich auch die proguard-rules.pro
Datei bearbeitet, so dass es alle Klassen hält ich verwenden möchten:
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in C:\Users\neelz_000\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
-keep public class com.myexternalapi.Class1
-keep public class com.myexternalapi.Class2
-keep public class com.myexternalapi.Class3
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
Dies hat nicht funktioniert entweder, und ich bekam die gleiche Fehlermeldung .
Ich fühle mich wie ich muss etwas falsch gemacht haben beim Einrichten Proguard
oder MultiDex
. Wenn ich etwas falsch gemacht habe oder etwas vergessen habe, könnte mir jemand genau erklären, was ich tun sollte, um es zu reparieren? Wenn nicht, gibt es noch andere Möglichkeiten, wie ich die API verwenden kann, obwohl sie über mehr als 65K-Methoden verfügt? Vielen Dank: D
Können Sie mit gradlew auf der Kommandozeile mit --debug und --stacktrace laufen die ausführlichsten Informationen des Fehlers zu bekommen? –
Einzelheiten hier zur Verfügung gestellt konfigurieren multidex http://developer.android.com/tools/building/multidex.html – USKMobility
diese Abhängigkeiten try { Kompilierung 'com.android.support:multidex:1.0.1' } –