Après avoir ajouté la dépendance à Facebook dans Gradle, j'obtiens cette erreur d'exécution:
compile 'com.facebook.Android:facebook-Android-sdk:4.6.0'
Veuillez noter que j'utilise aussi okhttp:
compile 'com.squareup.okhttp:okhttp:2.5.0'
et le journal des erreurs est:
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
Remarque: je reçois cette erreur sur Samsung Mobile 4.4, mais sur l'émulateur et sur moto g 5.0
, cela fonctionne.
Vous obtenez
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
Émis si la machine virtuelle Java ou une instance de ClassLoader essaie de load dans la définition d'une classe (dans le cadre d'un appel de méthode normal ou dans le cadre de la création d'une nouvelle instance à l'aide de la nouvelle expression) et no définition de la classe pourrait être trouvé.
Citation de NoClassDefFoundError
Tu devrais utiliser
compile 'com.facebook.Android:facebook-Android-sdk:4.10.0'
Après cela, vous pouvez obtenir cette erreur fini avec une valeur de sortie non nulle 2
Ensuite
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'
}
Ajouter multiDexEnabled true
Appelez implementation'com.Android.support:multidex:1.0.2'
OkHttp persévère lorsque le réseau est gênant: il restera silencieux récupérer des problèmes de connexion courants. Si votre service a plusieurs Adresses IP OkHttp va tenter d’autres adresses si le premier la connexion échoue. Cela est nécessaire pour IPv4 + IPv6 et pour les services hébergés dans les centres de données redondants.
Vous pouvez appeler la dernière version
implementation'com.squareup.okhttp3:okhttp:3.2.0'
Ensuite
Clean and Re-Build & Sync
Votre projet. J'espère que cela t'aides .
La dernière version de Piccasso utilise une ancienne version de Okhttp, vous devez utiliser une nouvelle dépendance.
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'
Exemple:
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");
}
Vous devez activer multidex pour résoudre ce problème.
Dans 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
}
Dans votre projet Application class
public class SampleApp extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(base);
}
}
Voici le lien officiel [ http://developer.Android.com/tools/building/multidex.html] .
https://developer.Android.com/tools/building/multidex.html
Prise en charge Multidex pour Android 5.0 et versions ultérieures
Android 5.0 et versions ultérieures utilisent un environnement d'exécution appelé ART qui, en mode natif prend en charge le chargement de plusieurs fichiers dex à partir de fichiers d'application APK. ART effectue une pré-compilation au moment de l'installation de l'application qui recherche classes (.. N) .dex et les compile dans un seul fichier .oat pour exécution par l'appareil Android. Pour plus d'informations sur Android 5.0, voir Présentation de ART. Cela signifie que votre application fonctionnerait correctement au niveau 21 ou supérieur de l'API.
Prise en charge Multidex antérieure à Android 5.0
Les versions antérieures à Android 5.0 de la plate-forme utilisent le runtime Dalvik pour exécuter du code d'application. Par défaut, Dalvik limite les applications à un seul fichier bytecode classes.dex par APK. Afin de contourner cela limite, vous pouvez utiliser la bibliothèque de support multidex, qui devient partie du fichier DEX principal de votre application, puis gère l’accès à les fichiers DEX supplémentaires et le code qu'ils contiennent.
Essayez d'ajouter ceci
dependencies {
compile 'com.Android.support:multidex:1.0.0'
}
Dans votre manifeste, ajoutez la classe MultiDexApplication de la bibliothèque de support multidex à l'élément application.
<?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>
Si votre application étend la classe Application, vous pouvez également remplacer la méthode attachBaseContext () et appeler MultiDex.install (this) pour activer multidex.
public void onCreate(Bundle arguments) {
MultiDex.install(getTargetContext());
super.onCreate(arguments);
...
}
Enfin, vous devrez mettre à jour votre fichier build.gradle comme ci-dessous en ajoutant multiDexEnabled true:
defaultConfig {
applicationId '{Project Name}'
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
}
J'espère que cela vous aidera.
On dirait que vous avez activé proguard . Si vous n'avez pas besoin de proguard dans votre application, vous pouvez le désactiver dans votre build.gradle (app).
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
Et si vous avez besoin de proguard dans votre application, suivez ceci link où M. Jake Wharton a résolu ce problème.