ClassNotFoundException bei veröffentlichten Apps

  • Antworten:8
Dark Blood Studios
  • Forum-Beiträge: 203

11.04.2012, 09:35:59 via Website

Hi, vor ein paar Tagen habe ich zwei Fehlermeldungen in der Entwicklerkonsole bekommen, beide waren "ClassNotFoundException"s.

Ich habe auch von anderen gehört, die seit kurzem auch dieses Problem haben. Kann es sein, dass bei irgendeiner neuen Android Version etwas verändert wurde, dass diese Exceptions auslöst?

Und was kann man dagegen machen?

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

11.04.2012, 10:18:24 via Website

Wäre interessant zu wissen bei welcher Operation das passiert.

Wenn du irgendwas dynamisch instanzierst UND Proguard einsetzt, könnte das zu Problemen führen.
Wenn du bestimmte externe Bibliotheken integrierst kann es unter blöden Umständen auch passieren, dass die beim produktiven Build nicht mitgezogen werden. Ist mir nach einem ADT Update passiert...gab auch prompt negative Bewertungen :D
Ich meine es hatte auch was mit der Proguard Konfiguration zu tun.

Kopier doch mal das signierte apk auf dein Gerät und installier es manuell.
Vielleicht stößt du dann schon selbst auf den Fehler.

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

11.04.2012, 10:21:32 via Website

Hast du die Exceptions, also Namen der Klassen die da fliegen ?

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Dark Blood Studios
  • Forum-Beiträge: 203

11.04.2012, 10:36:12 via Website

Ja, ich nutze ProGuard. Ich habe die App vor dem veröffentlichen auf meinem Handy getestet und auch auf anderen, der Fehler scheint auch nur bei wenigen Leuten aufzutreten. Die einzige Bibliothek die ich neben Android selbst nutze ist AdMob. Ich habe auch schon irgendwo gelesen, dass es manchmal was mit der AndroidManifest zu tun hat.

Die Fehlermeldung:
1java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{de.darkbloodstudios.hiphopdrumpads/de.darkbloodstudios.hiphopdrumpads.Game}: java.lang.ClassNotFoundException: de.darkbloodstudios.hiphopdrumpads.Game in loader dalvik.system.PathClassLoader[/mnt/asec/de.darkbloodstudios.hiphopdrumpads-1/pkg.apk]
2at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
3at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
4at android.app.ActivityThread.access$2300(ActivityThread.java:125)
5at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
6at android.os.Handler.dispatchMessage(Handler.java:99)
7at android.os.Looper.loop(Looper.java:123)
8at android.app.ActivityThread.main(ActivityThread.java:4627)
9at java.lang.reflect.Method.invokeNative(Native Method)
10at java.lang.reflect.Method.invoke(Method.java:521)
11at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893)
12at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:651)
13at dalvik.system.NativeStart.main(Native Method)
14Caused by: java.lang.ClassNotFoundException: de.darkbloodstudios.hiphopdrumpads.Game in loader dalvik.system.PathClassLoader[/mnt/asec/de.darkbloodstudios.hiphopdrumpads-1/pkg.apk]
15at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
16at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
17at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
18at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
19at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
20... 11 more

AndroidManifeste:
1<?xml version="1.0" encoding="utf-8"?>
2<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="de.darkbloodstudios.hiphopdrumpads"
4 android:versionCode="1"
5 android:versionName="1.0"
6 android:installLocation="auto">
7 <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
8 <uses-permission android:name="android.permission.INTERNET"/>
9 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
10
11 <application android:icon="@drawable/icon" android:label="@string/app_name">
12 <activity android:name=".Game"
13 android:screenOrientation="portrait">
14 <intent-filter>
15 <action android:name="android.intent.action.MAIN" />
16 <category android:name="android.intent.category.LAUNCHER" />
17 </intent-filter>
18 </activity>
19 <activity android:name="com.google.ads.AdActivity"
20 android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
21 </application>
22</manifest>

Vieleicht sollte ich <activity android:name="de.darkbloodstudios.hiphopdrumpads.Game" statt <activity android:name=".Game" hin schreiben? Aber wenn ich es ändere weis ich ja immer noch nicht ob der Fehler damit gelöst ist, da er bei mir ja nie aufgedrehten ist.

Antworten
Dark Blood Studios
  • Forum-Beiträge: 203

11.04.2012, 10:51:03 via Website

Rafael K.
Laut Google könnte es auch daran liegen, dass der User die SD Karte wechselt, oder sie grade am PC als Laufwerk gemounted ist.
Vorausgesetzt deine App bietet App2SD an.
Sie bietet App2SD an, aber es ist schon seltsam, dass das gleich zweimal passiert sein soll.

Antworten
Dark Blood Studios
  • Forum-Beiträge: 203

11.04.2012, 20:08:37 via Website

Rafael K.
Probier doch einfach den Fehler auf die Art und Weise nachzustellen.
Die Karte mit dem Pc verbinden wärend ich das App nutze geht bei mir garnicht, ich muss dafür ja auf den Homescreen und dann wird die App automatisch beendet.

Kann da irgendetwas am Handy oder der SD Karte kaput gehen wenn ich die bei laufendem Betrieb entferne? Weil mein eigenes Handy verfügt nicht über App2SD und ich will nicht das Handy/die SD Karte oder die Daten von meinem Kumpel zerstören.

Antworten
reiti.net
  • Forum-Beiträge: 339

12.04.2012, 14:44:22 via Website

Ich habe solche Fehler auch - allerdings sehr selten in Verhältnis zu den aktiven Installationen. Woran es liegt, dass eine Bibliothek mal schon mal nicht gefunden wird konnte ich bisher nicht herausfinden - auch, weil diese Libs ja in der apk mitgeliefert sind (in meinem Fall).

Die apk scheint in irgendein verzeichnis gechached zu werden wo dann eventuell etwas fehlt - ich hab da zu wenig Ahnung von der internen Technik, jedenfalls irgendwas mit /data/data/<pckgname>-2/pkg .. diese pfade variieren immer ein wenig.

Wie man dieses Problem beheben könnte (falls man es beheben könnte) weiß ich allerdings nicht. Dummerweise sieht der User nur einen Absturz und gibt natürlich der App die schuld - die in diesem Fall aber glaub ich gar nichts dafür kann .. schade.

Antworten