J'ai un problème depuis que j'ai mis à jour mon application sur Playstore. Depuis cette mise à jour, l’exception est levée, mais je n’ai rien changé en ce qui concerne cette exception.
Trace de la pile:
Java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{de.opiatefuchs.onthejobtimerlight/de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity}: Java.lang.ClassNotFoundException: Didn't find class "de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity" on path: DexPathList[[Zip file "/data/app/de.opiatefuchs.onthejobtimerlight-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2236)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2387)
at Android.app.ActivityThread.access$800(ActivityThread.Java:151)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1303)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:135)
at Android.app.ActivityThread.main(ActivityThread.Java:5254)
at Java.lang.reflect.Method.invoke(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:372)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:903)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:698)
Caused by: Java.lang.ClassNotFoundException: Didn't find class "de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity" on path: DexPathList[[Zip file "/data/app/de.opiatefuchs.onthejobtimerlight-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
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:1066)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2226)
... 10 more
Suppressed: Java.lang.ClassNotFoundException: de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity
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)
... 13 more
Caused by: Java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
Le problème, c’est que ma version d’application s’exécute sans problème auparavant et que je n’ai rien changé en ce qui concerne cette activité. Je viens d'ajouter une nouvelle boîte de dialogue d'informations qui n'a rien à voir avec cette activité. Cette application est une version allégée gratuite, j’ai fait exactement les mêmes modifications sur la version pro et rien n’est jeté. Cela fonctionne comme prévu. La seule différence entre pro et lite est que j’ai intégré Admob (sur le nouveau chemin) dans la version lite et la licence Google Play dans la version pro. Mais c’est ce que j’ai intégré depuis le début et je n’ai apporté aucune modification à cette . Je n’ai également apporté aucune modification au manifeste, j’ai lu de nombreux articles ici mais rien n’aide.
Il semble que cela se produise sur les versions Android depuis la version 5.0. Quelqu'un a-t-il une idée de ce que ce problème pourrait causer ou a-t-il vécu les mêmes expériences? Est-il possible que proguard ait juste détruit quoi que ce soit en obscurcissant (également ici, aucun changement)?
Je n’ai posté aucun code, car ce n’est pas important pour ce problème, comme je l’ai dit, je n’ai pas apporté de modifications liées à cette exception.
Cette Question est marquée comme étant en double, mais ce n’est pas le cas. Le commentaire avec le lien ne résout pas mon problème, toutes les bibliothèques sont vérifiées et intégrées de la bonne façon. De plus, je n’utilise pas NDK.
Après un long moment, il s'est avéré que cela devait avoir quelque chose à voir avec proguard. Je ne peux pas vraiment dire exactement ce que l'erreur provoque, mais j'ai essayé un peu et c'est ce que j'ai remarqué (c'est le cas avec Eclipse IDE):
Ce sont les quatre points que j'ai faits et puis ça a fonctionné. Cela semble suspect, mais je pense qu’il ya un problème d’obscurcissement. Parce que sans ces points, je peux simplement compiler mon apk et l’installer à partir d’Eclipse. Pour moi, il n'y a pas de raison évidente à ce comportement .. De plus, le nom du paquet fonctionne sans changement si je l'installe uniquement à partir d'Eclipse. J'espère que ces points peuvent aider quelqu'un.
Si vous manifestez le nom du paquet est ok, Si vous avez bloqué le projet, et, dans File Explorer, a renommé votre projet mais après l’importation de celui-ci, vous rencontrez à nouveau ce problème le seul moyen ici est de
SUPPRIMER CE DOSSIER .gradle .
Celui-ci se trouve dans le dossier du projet à l'aide de l'explorateur de fichiers . Il contient des fichiers d'artefact contenant le nom de l'ancien projet . Après la réouverture du projet dans Android Studio, le dossier sera automatiquement recréé.
Je viens de changer mon titre de com.Android.tools.build:gradle:2.2.2 à com.Android.tools.build:gradle:2.2.0,et le problème est bon
Pour moi, cela s'est produit lorsque le nom du package (nom du répertoire) a été modifié.
J'ai réalisé que le dossier "build" conserve comme par magie des fichiers intermédiaires pour la construction du projet. J'ai supprimé le dossier "build" sous le dossier "app" . Maintenant, le diplômé devait refaire tous les fichiers avec le nouveau nom du paquet. Maintenant cela fonctionne correctement.
Je pense que cela a quelque chose à voir avec multidex et plusieurs noms de paquet si vous avez plusieurs modules. Nettoyez le projet et supprimez tous les build/dossiers.
tl; dr: Cela semble être dû au mélange des déclarations relatives et absolues dans le AndroidManifest.xml
. Je pense que la meilleure solution consiste à utiliser la notation relative lors de la déclaration de <application .../>
, <activity .../>
, <receiver .../>
et <service .../>
dans votre AndroidManifest.xml
.
J’avais ce problème pour TOO LONG, c’est parce que j’utilisais les déclarations <application .../>
, <activity .../>
, <receiver .../>
et <service .../>
relatives et absolues dans mon AndroidManifest.xml
. Voici ce que j'ai fait pour le réparer:
Dans votre AndroidManifest.xml
, assurez-vous que la propriété <manifest .../>
a sa propriété package:
spécifiée correctement. Il doit s'agir du chemin absolu exact, comme suit:
<manifest
package="com.my.absolute.package.path"
xmlns:Android="http://schemas.Android.com/apk/res/Android">...</manifest>
Maintenant que le chemin absolu correct est spécifié dans votre section <manifest .../>
, vous devez utiliser un chemin relatif pour tous les <application .../>
, <activity .../>
, <receiver .../>
et <service .../>
définis dans votre AndroidManifest.xml
.
Exemples:
<application
Android:name=".BaseApplication"
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:supportsRtl="true"
Android:theme="@style/AppTheme">
<activity
Android:name=".activity.SomeActivity"
Android:configChanges="orientation"
Android:label="@string/app_name"
Android:parentActivityName=".activity.ParentActivity"
Android:screenOrientation="portrait"
Android:theme="@style/AppTheme">
<meta-data
Android:name="Android.support.PARENT_ACTIVITY"
Android:value=".activity.ParentActivity"/>
</activity>
<activity
Android:name=".activity.MyActivity"
Android:configChanges="orientation"
Android:label="@string/app_name"
Android:parentActivityName=".activity.ParentActivity"
Android:screenOrientation="portrait"
Android:theme="@style/AppTheme"
/>
<receiver
Android:name=".receivers.MyReceiver"
Android:enabled="true"
Android:exported="false">
</receiver>
<service
Android:name=".services.MyService"
Android:enabled="true"
Android:exported="false"
/>
</application>
Bien sûr, veillez également à nettoyer votre projet.
Parfois, lorsque nous générons un fichier apk signé, si nous rencontrons un problème de bibliothèque de dépendances (bibliothèque jar en double), cette erreur peut se produire. Veuillez vérifier le chemin de génération et supprimer la bibliothèque en double, et vérifier si une bibliothèque n’est pas cochée dans l’onglet Ordre et Export.
La raison en est qu'Android n'est pas en mesure de trouver l'activité spécifique dans le trajet dexpath.
Nous devrions donc fournir le chemin complet des activités dans le "fichier manifeste".
par exemple, le nom de votre activité est "SplashActivity" et vous le trouverez dans "com.packagename.package". Nous devrions donc fournir le nom complet de cette activité.
com.packagename.package.SplashActivity
J'ai ajouté
compile "com.Android.support:support-core-utils:25.3.1"
compile 'com.Android.support:support-v4:25.3.1'
J'ai eu un problème similaire, voici ma solution:
J'ai eu une erreur similaire après avoir changé mon nom de répertoire en renommant simplement le nom de répertoire et l'importation. Impossible d'installer plus. Ne réactivez pas le débogage USB ni le travail de reconstruction du projet.
Je le résous en créant un nouveau projet et en copiant manuellement tout le contenu pertinent dans le nouveau projet.