2011-07-06 5 views
1

J'essaie d'exporter une application Android qui utilise un couple de bibliothèques différentes. Deux des bibliothèques sont des fichiers jar mais les autres bibliothèques sont des projets liés. Par exemple, l'une des bibliothèques est une vue en plan mapview. Pour utiliser la bibliothèque, j'ai ajouté le projet à mon espace de travail, allez dans les propriétés du projet et sous Android j'ai marqué le projet comme "use as library". Et puis dans l'application que je construis, j'ai lié la bibliothèque du projet en utilisant son chemin (dans le menu Android). L'application exporte correctement cependant quand j'essaye d'exécuter l'application sur mon téléphone de dev il se bloque avec l'erreur suivante:Android proguard ayant du mal à exécuter un fichier APK avec des bibliothèques de projets liés

07-06 13: 50: 00.238: ERROR/AndroidRuntime (3282): Causé par: java.lang. ClassNotFoundException: com.markupartist.android.widget.ScrollingTextView dans le chargeur dalvik.system.PathClassLoader [/system/framework/com.google.android.maps.jar:/data/app/com.alltrails-1.apk]

Mon fichier proguard contient les éléments suivants:

-dontwarn -dontnote -dontskipnonpubliclibraryclasses -libraryjars libs/osmdroid-android-3.0.4.jar -libraryjars libs/osmdroid-google-3.0.4.jar -libraryjars libs/slf4j-android-1.5.8.jar -libraryjars/Applications/android-sdk-mac_x86/add-ons/addon_google_apis_google_inc_4/libs/maps. pot

Merci d'avance!

Répondre

0

La classe com.markupartist.android.widget.ScrollingTextView est manquante dans votre application. S'il se trouve dans l'un des fichiers de bibliothèque, vous devez spécifier ce fichier en tant que jar de programme (-injars), car le contenu des fichiers de bibliothèque n'est pas copié dans le fichier de sortie.

+2

Merci Eric pour la réponse. J'ai effectivement résolu le problème. Le paquet markupartist était un "projet de bibliothèque" (un projet dans mon espace de travail et j'ai lié mon projet réel à celui-ci) donc j'ai dû ajouter ce qui suit dans mon proguard.cfg: -keep public class com.markupartist.android. ** { public protégé *; } – kevin78925

+0

Dans ce cas, il peut suffire de conserver la classe ScrollingTextView (et peut-être un constructeur autre que celui par défaut). Le code de la bibliothèque est juste un code de programme ordinaire, en ce qui concerne ProGuard. Conserver toutes les classes de bibliothèques publiques et tous les membres de la classe n'est nécessaire que si le code traité doit être utilisé comme bibliothèque générale. –

Questions connexes