Aller au contenu

Problème d'excution d'une application lourde


chris2a

Recommended Posts

Bonjour tout le monde,

J'ai développé une application qui pèse plus de 700 Mo. Avec une application du type Apk Installer j'arrive bien à installer mon application sur la carte SD du nexus One (option installLocation avec Froyo).

Ce qui pèse si lourds ce sont des vidéos (placées dans le dossier /raw). Le problème est que mon application plante dès le lancement avec l'erreur suivante :

08-18 11:22:16.179: ERROR/AndroidRuntime(1250): FATAL EXCEPTION: main
08-18 11:22:16.179: ERROR/AndroidRuntime(1250): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.test.media/com.test.media.Welcome}: java.lang.ClassNotFoundException: com.test.media.Welcome in loader dalvik.system.PathClassLoader[/mnt/asec/com.test.media-1/pkg.apk]
08-18 11:22:16.179: ERROR/AndroidRuntime(1250):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
08-18 11:22:16.179: ERROR/AndroidRuntime(1250):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
08-18 11:22:16.179: ERROR/AndroidRuntime(1250):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
08-18 11:22:16.179: ERROR/AndroidRuntime(1250):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
08-18 11:22:16.179: ERROR/AndroidRuntime(1250):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-18 11:22:16.179: ERROR/AndroidRuntime(1250):     at android.os.Looper.loop(Looper.java:123)
08-18 11:22:16.179: ERROR/AndroidRuntime(1250):     at android.app.ActivityThread.main(ActivityThread.java:4627)
08-18 11:22:16.179: ERROR/AndroidRuntime(1250):     at java.lang.reflect.Method.invokeNative(Native Method)
08-18 11:22:16.179: ERROR/AndroidRuntime(1250):     at java.lang.reflect.Method.invoke(Method.java:521)
08-18 11:22:16.179: ERROR/AndroidRuntime(1250):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-18 11:22:16.179: ERROR/AndroidRuntime(1250):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-18 11:22:16.179: ERROR/AndroidRuntime(1250):     at dalvik.system.NativeStart.main(Native Method)
08-18 11:22:16.179: ERROR/AndroidRuntime(1250): Caused by: java.lang.ClassNotFoundException: com.test.media.Welcome in loader dalvik.system.PathClassLoader[/mnt/asec/com.test.media-1/pkg.apk]
08-18 11:22:16.179: ERROR/AndroidRuntime(1250):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
08-18 11:22:16.179: ERROR/AndroidRuntime(1250):     at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
08-18 11:22:16.179: ERROR/AndroidRuntime(1250):     at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
08-18 11:22:16.179: ERROR/AndroidRuntime(1250):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
08-18 11:22:16.179: ERROR/AndroidRuntime(1250):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
08-18 11:22:16.179: ERROR/AndroidRuntime(1250):     ... 11 more

Je ne comprends pas d'où vient cette erreur, surtout que lorsque je réinstalle la même application mais avec des vidéos moins lourdes (250 Mo), l'application fonctionne correctement….

Est ce que quelqu'un a déjà eu ce genre de soucis ? Où est ce que quelqu'un sait si il y a une taille maximale pour les applications ?

Merci pour votre aide !

Lien vers le commentaire
Partager sur d’autres sites

Alors d'où cette erreur peut provenir ?

Parce que quand "j'allège" mon application je modifie juste les ressources, je ne change pas le code....

Peut être que le problème vient de plus haut, c'est peut être lors de la création de l'apk que les ressources lourdes sont dérangeantes ?

Lien vers le commentaire
Partager sur d’autres sites

700 Mo :rolleyes:

1er remarque (qui ne répond pas à ton problème) : si tu met ton application sur le market, vu sa taille personne ne la téléchargera !

2eme remarque (qui ne répond toujours pas à ton problème) : certain téléphone n'ont pas assez de mémoire pour stocker 700Mo d'application. Il me semble que G1 à par exemple 75Mo et le Nexus One à 512Mo. Tu sera donc obligé de te limiter à Froyo avec installation sur SD.

Généralement les applications sont installées sans les données volumineuses. Les données sont ensuite téléchargées si besoin et stockées sur la SD.

Pour ton problème de ClassNotFoundException, ca va pas beaucoup t'aider, mais j'imagine qu'au delà d'une certaine taille d'apk, le ClassLoader a quelques problèmes !

Si tu ouvre ton APK avec winzip (ou autre), à tu le fichier classes.dex qui est présent ?

Lien vers le commentaire
Partager sur d’autres sites

ceci dit c'est pas un peu con une appli de 700MO ????

tu devrais faire une appli sans vidéo, et les faire télécharger au premier lancement sur la sdcard, comme le font les jeux comme asphalt.

du coup ton apk est petite.

Lien vers le commentaire
Partager sur d’autres sites

J'ai regardé rapidement dans les sources java de froyo (classes PathClassLoader et DexFile)

https://android.git.kernel.org/?p=platform/libcore.git;a=blob;f=dalvik/src/main/java/dalvik/system/PathClassLoader.java;h=5d7333e13609a49605ff2dbde703a4619ae2f58a;hb=master

et

https://android.git.kernel.org/?p=platform/libcore.git;a=blob;f=dalvik/src/main/java/dalvik/system/DexFile.java;h=00de314549f28378bf0d8f22057759de72e5c51a;hb=master

Je n'ai pas vu de limite de taille. Mais le chargement des classes dans DexFile est fait en natif. Il y a peux être la solution dans le code c++...

Bref, je ne sais pas si c'est techniquement faisable, désolé.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...