Nachdem ich die Facebook-Abhängigkeit in gradle hinzugefügt habe, erhalte ich diesen Laufzeitfehler:
compile 'com.facebook.Android:facebook-Android-sdk:4.6.0'
Bitte beachten Sie, dass ich auch okhttp verwende:
compile 'com.squareup.okhttp:okhttp:2.5.0'
und Fehlerprotokoll ist:
E/AndroidRuntime: FATAL EXCEPTION: Thread-109754
Process: com.venkat.project, PID: 4453
Java.lang.NoClassDefFoundError: com.squareup.okhttp.internal.Util
at com.squareup.okhttp.OkHttpClient.<clinit>(OkHttpClient.Java:57)
at com.venkat.project.http.MyHTTPThread.run(MyHTTPThread.Java:127)
at com.venkat.project.http.MyHTTPThread.run(MyHTTPThread.Java:61)
at Java.lang.Thread.run(Thread.Java:841)
02-23 18:11:02.729 4453-4573/com.venkat.project I/dalvikvm: Rejecting re-init on previously-failed class Lcom/squareup/okhttp/OkHttpClient; v=0x0
Hinweis: Ich bekomme diesen Fehler auf Samsung Mobile 4.4, aber auf dem Emulator und auf moto g 5.0
funktioniert es.
Sie bekommen
Java.lang.NoClassDefFoundError: com.squareup.okhttp.internal.Util
at com.squareup.okhttp.OkHttpClient.<clinit>(OkHttpClient.Java:57)
at com.venkat.project.http.MyHTTPThread.run(MyHTTPThread.Java:127)
at com.venkat.project.http.MyHTTPThread.run(MyHTTPThread.Java:61)
public class NoClassDefFoundError extends LinkageError
Wird ausgelöst, wenn die Java Virtual Machine oder eine ClassLoader-Instanz versucht, load in der Definition einer Klasse (als Teil eines normalen Methodenaufrufs oder beim Erstellen einer neuen Instanz mit dem neuen Ausdruck) und Nr Definition der Klasse konnte gefunden werden.
Zitat aus NoClassDefFoundError
Du solltest benutzen
compile 'com.facebook.Android:facebook-Android-sdk:4.10.0'
Danach können Sie diesen Fehler erhalten beendet mit Nicht-Null-Exit-Wert 2
Dann
defaultConfig {
...
minSdkVersion 14 //lower than 14 doesn't support multidex
targetSdkVersion //Yours
// Enabling multidex support.
multiDexEnabled true
}
dependencies {
implementation 'com.Android.support:multidex:1.0.0'
}
Hinzufügen von multiDexEnabled true
Aufruf implementation'com.Android.support:multidex:1.0.2'
OkHttp bleibt bestehen, wenn das Netzwerk Probleme bereitet: Es wird still Erholen Sie sich von den üblichen Verbindungsproblemen. Wenn Ihr Dienst mehrere .__ hat. IP-Adressen OkHttp versucht alternative Adressen, wenn die erste Verbindung schlägt fehl Dies ist für IPv4 + IPv6 und für gehostete Dienste erforderlich in redundanten Rechenzentren.
Sie können die neueste Version aufrufen
implementation'com.squareup.okhttp3:okhttp:3.2.0'
Dann
Clean and Re-Build & Sync
Ihr Projekt. Hoffe das hilft .
Die neueste Version von Piccasso verwendet eine ältere Version von Okhttp. Sie müssen eine neue Abhängigkeit verwenden
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.0.2'
Beispiel:
File httpCacheDirectory = new File(getCacheDir(), "picasso-cache");
Cache cache = new Cache(httpCacheDirectory, 10 * 1024 * 1024);
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().cache(cache);
Picasso.Builder picassoBuilder = new Picasso.Builder(getApplicationContext());
picassoBuilder.downloader(new OkHttp3Downloader(clientBuilder.build()));
Picasso picasso = picassoBuilder.build();
try {
Picasso.setSingletonInstance(picasso);
} catch (IllegalStateException ignored) {
Log.e(LOG_TAG, "Picasso instance already used");
}
Sie sollten multidex aktivieren, um dieses Problem zu beheben.
In build.gradle
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 23
buildToolsVersion '23.0.2'
dexOptions {
incremental true
javaMaxHeapSize "4g"
}
defaultConfig {
applicationId "com.example.app"
minSdkVersion 17
targetSdkVersion 22
versionCode 1
versionName "1.0"
// Enabling multidex support.
multiDexEnabled true
}
buildTypes {
debug {
shrinkResources true
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
// Enabling multidex support.
compile 'com.Android.support:multidex:1.0.1'
//Other Libraries
}
In Ihrem Projekt Application Class
public class SampleApp extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(base);
}
}
Hier ist der offizielle Link [ http://developer.Android.com/tools/building/multidex.html] .
https://developer.Android.com/tools/building/multidex.html
Multidex-Unterstützung für Android 5.0 und höher
Android 5.0 und höher verwendet eine Laufzeitumgebung namens ART, die nativ unterstützt das Laden mehrerer Dex-Dateien aus Anwendungs-APK-Dateien. KUNST führt die Kompilierung zum Zeitpunkt der Anwendungsinstallation durch, wobei nach .__ gesucht wird. classes (.. N) .dex-Dateien und kompiliert sie in eine einzige OAT-Datei für Ausführung durch das Android-Gerät. Weitere Informationen zu Android 5.0 Laufzeit, siehe Einführung in ART. Das bedeutet, dass Ihre App auf API-Ebene 21 oder höher gut funktionieren würde.
Multidex-Unterstützung vor Android 5.0
Versionen der Plattform vor Android 5.0 verwenden die Dalvik-Laufzeitumgebung zum Ausführen von App-Code. Standardmäßig beschränkt Dalvik Apps auf ein einzelnes classes.dex-Bytecode-Datei pro APK. Um dies zu umgehen Einschränkung können Sie die Multidex-Unterstützungsbibliothek verwenden, die zu .__ wird. Teil der primären DEX-Datei Ihrer App und verwaltet dann den Zugriff auf die zusätzlichen DEX-Dateien und den darin enthaltenen Code.
Versuchen Sie, dies hinzuzufügen
dependencies {
compile 'com.Android.support:multidex:1.0.0'
}
Fügen Sie in Ihrem Manifest die MultiDexApplication-Klasse aus der Multidex-Unterstützungsbibliothek zum Anwendungselement hinzu.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.Android.multidex.myapplication">
<application
...
Android:name="Android.support.multidex.MultiDexApplication">
...
</application>
</manifest>
Alternativ dazu: Wenn Ihre App die Application-Klasse erweitert, können Sie die Methode attachBaseContext () überschreiben und MultiDex.install (this) aufrufen, um Multidex zu aktivieren.
public void onCreate(Bundle arguments) {
MultiDex.install(getTargetContext());
super.onCreate(arguments);
...
}
Schließlich müssen Sie die Datei build.gradle wie folgt aktualisieren, indem Sie multiDexEnabled true hinzufügen:
defaultConfig {
applicationId '{Project Name}'
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
}
Ich hoffe es wird dir helfen.
Sie haben den Eindruck, dass Sie proguard aktiviert haben. Wenn Sie in Ihrer Anwendung keinen proguard benötigen, können Sie ihn in Ihrem build.gradle (app) deaktivieren.
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
Und wenn Sie in Ihrer Anwendung Proguard benötigen, folgen Sie diesem Link wo Mr. Jake Wharton das Problem gelöst hat.