2017-10-14 22 views
0

Je suis nouveau dans le développement Android. Pas très nouveau en EE Java et Gradle. Donc, j'essaye de construire une application de consommateur REST pour Android. J'ai un (1) fichier .jar dont j'ai besoin (contient des DTO et des consommateurs api). Ce (1) .jar a des dépendances sur les autres (2) pots de Nexus repo. Ces (2) dépendent d'autres (3) jars (par exemple apache commons lang3, etc.) de maven repos. La chose drôle est que ... L'application compile et installe très bien. Mais à l'exécution, il a parfois tendance à perdre quelques classes de (1) (au moins (1) - ne sais pas encore (2) et (3)).Dépendances d'applications Android ClassNotFoundException

Je sais que SO n'aime pas les photos dans les questions, mais dans ce cas, je crois que les photos = la clarté.

Voir ci-dessous. Même exécution, même pot. Sauf qu'une des classes n'est pas chargée, et une autre, assise juste à côté, est disponible.

Some classes are not seen by the classloader

And some are seen

Pourquoi est-ce donc? Qu'ai-je fait de mal? Une chose de plus ... Si je tente d'instancier l'une des classes manquantes (il y en a plus d'une) dans l'activité principale (inside onCreate()), cette classe apparaît parfois dans le classpath et crée un objet très bien. Mais aussi ridicule que cela puisse paraître, une autre classe disparaît! On dirait que Classloader a un nombre limité d'emplacements pour les classes qu'il pourrait gérer.

EDIT: Bon, ça va mieux. Il semble que pour une raison quelconque, Gradle a décidé de ne pas inclure certains fichiers de (1) .jar dans le fichier .apk généré ... Des idées pourquoi?

Gradle 4.1. Linux Mint 18. Android Studio 3.0 Canary 8

Structure du fichier APK décompilé à gauche; droite - pot d'origine enter image description here

Répondre

0

Vous avez probablement activé ProGuard. ProGuard supprime du dernier .apk les classes inutilisées. ProGuard

+0

'minifyEnabled' est défini sur 'false'. Essayé de commenter l'ensemble du bloc 'release' - toujours pas de chance – netikras