Mon application fonctionne correctement lorsque je teste un périphérique réel avec USB dans un studio Android. Mais lorsque j'envoie l'apk sur un autre périphérique et que je l'installe là-bas, cela ne fonctionne pas.App se bloque. Les erreurs sont données ci-dessous:
FATAL EXCEPTION: main Process: com.w3xplorers.cmch,PID: 17715 Java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.w3xplorers.cmch/com.w3xplorers.cmch.MainActivity}: Java.lang.ClassNotFoundException: Didn't find class "com.w3xplorers.cmch.MainActivity" on path: DexPathList[[Zip file "/data/app/com.w3xplorers.cmch-1/base.apk"],nativeLibraryDirectories=[/data/app/com.w3xplorers.cmch-1/lib/arm, /system/lib, /vendor/lib, system/vendor/lib, system/vendor/lib/egl, system/lib/hw]]
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2395)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2544)
at Android.app.ActivityThread.access$900(ActivityThread.Java:150)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1394)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:168)
at Android.app.ActivityThread.main(ActivityThread.Java:5845)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.Java:797)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:687)
Caused by: Java.lang.ClassNotFoundException: Didn't find class "com.w3xplorers.cmch.MainActivity" on path: DexPathList[[Zip file "/data/app/com.w3xplorers.cmch-1/base.apk"],nativeLibraryDirectories=[/data/app/com.w3xplorers.cmch-1/lib/arm, /system/lib, /vendor/lib, system/vendor/lib, system/vendor/lib/egl, system/lib/hw]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:56)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:511)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:469)
at Android.app.Instrumentation.newActivity(Instrumentation.Java:1085)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2385)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2544)
at Android.app.ActivityThread.access$900(ActivityThread.Java:150)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1394)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:168)
at Android.app.ActivityThread.main(ActivityThread.Java:5845)
at Java.lang.reflect.Method.invoke(Native Method)
atcom.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:797)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:687) Suppressed: Java.lang.ClassNotFoundException: com.w3xplorers.cmch.MainActivity
at Java.lang.Class.classForName(Native Method)
at Java.lang.BootClassLoader.findClass(ClassLoader.Java:781)
at Java.lang.BootClassLoader.loadClass(ClassLoader.Java:841)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:504) ... 12 more
Caused by: Java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
Mes manifestes est ci-dessous:
`<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.w3xplorers.cmch">
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.READ_PHONE_STATE" />
<uses-permission Android:name="Android.permission.READ_CONTACTS" />
<uses-permission Android:name="Android.permission.WRITE_CONTACTS" />
<uses-permission Android:name="Android.permission.SEND_SMS" />
<application
Android:name="com.w3xplorers.cmch.EnableMultiDex"
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:roundIcon="@mipmap/ic_launcher_round"
Android:supportsRtl="true"
Android:theme="@style/AppTheme" >
<activity
Android:name="com.w3xplorers.cmch.MainActivity"
Android:screenOrientation="portrait"
Android:theme="@style/AppTheme.NoActionBar" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
Android:name="com.w3xplorers.cmch.HomeActivity"
Android:screenOrientation="portrait"
Android:theme="@style/AppTheme.NoActionBar" />
<activity
Android:name="com.w3xplorers.cmch.QuickSms"
Android:screenOrientation="portrait"
Android:theme="@style/AppTheme.NoActionBar" />
<activity
Android:name="com.w3xplorers.cmch.GroupSms"
Android:screenOrientation="portrait"
Android:theme="@style/AppTheme.NoActionBar" />
<activity
Android:name="com.w3xplorers.cmch.SelfSms"
Android:screenOrientation="portrait"
Android:theme="@style/AppTheme.NoActionBar" />
<activity
Android:name="com.w3xplorers.cmch.Contact"
Android:screenOrientation="portrait"
Android:theme="@style/AppTheme.NoActionBar" />
<activity
Android:name="com.w3xplorers.cmch.Favourite"
Android:screenOrientation="portrait"
Android:theme="@style/AppTheme.NoActionBar" />
<activity
Android:name="com.w3xplorers.cmch.Info"
Android:screenOrientation="portrait"
Android:theme="@style/AppTheme.NoActionBar" />
<activity Android:name="com.w3xplorers.cmch.Dialog" />
</application>
</manifest>`
Gradé ci-dessous:
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.w3xplorers.cmch"
minSdkVersion 13
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.Android.support.test.espresso:espresso-core:2.2.2',
{
exclude group: 'com.Android.support', module: 'support-annotations'
})
compile 'com.Android.support:appcompat-v7:25.3.0'
compile 'com.Android.support.constraint:constraint-layout:1.0.0-alpha5'
compile 'com.Android.support:design:25.3.0'
compile 'com.andreabaccega:Android-form-edittext:1.0.3'
compile 'com.Android.volley:volley:1.0.0'
compile 'com.squareup.okhttp3:okhttp:3.3.1'
compile 'com.Android.support:multidex:1.0.1'
testCompile 'junit:junit:4.12'
}
Je n'ai pas trouvé de solution parfaite à mon problème.Mais quand je télécharge mon apk sur google play et que je télécharge à partir de là, l'application fonctionne très bien. C'est la solution la plus bizarre que j'ai jamais trouvée.
Accédez au fichier project build.gradle et réduisez la version de la dépendance de gradle à une valeur inférieure à 2.3.0 , par exemple, utilisez 2.2.3
dependencies {
classpath 'com.Android.tools.build:gradle:2.2.3'
....
}
Puis nettoyez -> compilez -> installez apk sur un autre périphérique -> cela peut êtreOKthen!
Je pense que le problème est que AndroidStudio est lié à l'utilisation de "Instant Run" au lieu de compiler et d'installer un nouveau APK.
Désactivez "Exécution instantanée" à partir de Fichier -> Paramètres -> Construction, exécution, déploiement -> Exécution instantanée.
dans votre tag d'application, changez
Android:name="com.w3xplorers.cmch.EnableMultiDex"
avec
Android:name="Android.support.multidex.MultiDexApplication"
J'espère que cela t'aides :)
plus d'informations à:
Comme vous l'avez dit, vous construisez l'application et transmettez-la à votre téléphone via USB, je crois que vous avez ensuite copié l'apk à partir de votre répertoire de construction et essayez de pousser et de l'exécuter sur un autre appareil. S'il vous plaît essayez de construire votre apk sans cibler ou connecter aucun appareil ou émulateur ce que je veux dire qui construisent votre apk depuis un terminal sans connecter votre appareil. Soit ça va marcher ou ça va montrer quelque chose.
Vous devez suivre la documentation officielle: https://developer.Android.com/studio/build/multidex.html#mdex-gradle
build.gradle:
dependencies {
compile 'com.Android.support:multidex:1.0.1'
}
Android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 26
multiDexEnabled true
}
...
}
Votre classe App
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
Dans votre build.gradle ajouter
defaultConfig {
multiDexEnabled true
}
Ajoutez également une dépendance en tant que
dependencies {
compile 'com.Android.support:multidex:1.0.0'}
C'est peut-être parce que vous avez activé la fonction Instant Run, essayez donc de Désactiver Instant Run .
Fichier -> Paramètres -> Construction, exécution, déploiement -> Exécution instantanée -> Décochez la case pour l'exécution instantanée
J'ai également fait face à un problème similaire. Dans mon cas, j'ai résolu le problème en ajoutant ceci ci-dessous buildTypes
dexOptions {
javaMaxHeapSize "4g"
}
également utilisé
defaultConfig {
multiDexEnabled true
}
et
dependencies {
compile 'com.Android.support:multidex:1.0.0'
}
defaultConfig {
minSdkVersion 14
targetSdkVersion 21
multiDexEnabled true
}
dependencies {
compile 'com.Android.support:multidex:1.0.1'
}
Android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile 'com.Android.support:multidex:1.0.1'
}
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
Peut-être que vous ne faites pas votre application Multidex.install (this);
It worked like a charm for me :)
Pour les personnes qui rencontrent cela et qui utilisent Kotlin pour leurs tests d’instrumentation:
N'oubliez pas que les espaces dans les noms de méthode ne fonctionnent que pour les tests JVM et les non tests d'instrumentation Android (comme noté par Jake Wharton , il a également déclaré que cela pourrait être corrigé à l'avenir)
Pour le moment, quand j'essaye de faire un test comme:
@Test
fun `spaces should work in names`() {
}
La sortie de test dit:
Aucun test n'a été trouvé
Et le journal dit:
A commencé à exécuter des tests
Échec du test en cours: L'exécution de l'instrumentation a échoué en raison de la «défaillance du processus».
Suite de test vide.
Alors que Logcat génère cette exception:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example, PID: 5424
Java.lang.RuntimeException: Unable to instantiate instrumentation
ComponentInfo{com.example.test/Android.support.test.runner.AndroidJUnitRunner}:
Java.lang.ClassNotFoundException: Didn't find class
"Android.support.test.runner.AndroidJUnitRunner"
on path: DexPathList[[],nativeLibraryDirectories=[/system/lib, /vendor/lib]]
at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:5730)
at Android.app.ActivityThread.-wrap1(Unknown Source:0)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1661)
at Android.os.Handler.dispatchMessage(Handler.Java:105)
at Android.os.Looper.loop(Looper.Java:164)
at Android.app.ActivityThread.main(ActivityThread.Java:6541)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.Java:240)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:767)
Caused by: Java.lang.ClassNotFoundException: Didn't find class
"Android.support.test.runner.AndroidJUnitRunner" on path:
DexPathList[[],nativeLibraryDirectories=[/system/lib, /vendor/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:93)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:379)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:312)
at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:5728)
at Android.app.ActivityThread.-wrap1(Unknown Source:0)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1661)
at Android.os.Handler.dispatchMessage(Handler.Java:105)
at Android.os.Looper.loop(Looper.Java:164)
at Android.app.ActivityThread.main(ActivityThread.Java:6541)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.Java:240)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:767)
Comme vous pouvez le constater, les erreurs ne sont pas très utiles ici. J'espère donc que les gens trouveront cette réponse maintenant. La solution est simple, utilisez des noms valides comme:
@Test
fun spaces_dontWorkInNames() {
}
Il me semble aléatoire de résoudre ce problème. Je change simplement le nom Android: le nom du MultiDex à partir d'Android, je l'exécute, puis je le replace dans ma propre application.
Effacez votre projet et Invalidate caches/restart dans votre section de fichiers de studio Android, cela fonctionne pour moi.