web-dev-qa-db-fra.com

Android de Studio ne s'arrête pas aux points d'arrêt des modules de la bibliothèque.

Pour le moment, je développe une application Android qui est basée sur du code tiers. J'ai commencé à définir des points d'arrêt pour comprendre le code et j'ai rapidement rencontré un problème. Soudain, je n'ai pas pu obtenir = Android Studio pour arrêter plus aux points d'arrêt.

J'ai essayé de définir les points d'arrêt dans les méthodes onCreate, dans les boutons 'OnClickListeners - rien ne fonctionnait. Maintenant, j'ai découvert que le seul endroit où cela fonctionne est à l'intérieur du module d'application. Comme le projet n'a qu'une seule classe d'activité dans le module d'application et que tout le reste est fourni dans les modules de bibliothèque, en fait, je ne peux pas déboguer du tout.

Je suppose qu'il y a quelque chose qui ne va pas dans le fichier AndroidManifest.xml ou plus probablement dans le fichier build.gradle. Comme je viens de passer d’Eclipse à Android Studio, tout ce contenu est bien nouveau pour moi.

Si je survole un point d'arrêt de la bibliothèque alors que l'application est en cours d'exécution, cela m'indique qu '"aucun code exécutable n'est trouvé à la ligne ...". Je suppose que c'est la cause de mon problème, mais je ne sais pas comment le résoudre.

Y at-il des "suspects habituels" parmi les entrées dans build.gradle qui pourraient causer mon problème?

J'ai déjà nettoyé mon projet et invalidé le cache sans succès. J'ai même essayé la suggestion d'ajouter <activity> entrées dans le module de bibliothèque pour les fragments à l'intérieur.

Edit: J'utilise la version la plus récente de Android Studio (version 1.1.0 du 18 février) qui devrait avoir le même bug qui existait il y a quelque temps. .

Le contenu de build.gradle dans le module d'application:

apply plugin: 'com.Android.application'

Android {
    compileSdkVersion 19
    buildToolsVersion project.Android_BUILD_TOOLS_VERSION

    defaultConfig {
        minSdkVersion Integer.parseInt(project.MIN_SDK)
        targetSdkVersion  Integer.parseInt(project.Android_BUILD_TARGET_SDK_VERSION)
    }

    signingConfigs {
        release {
            keyAlias 'xxx'
            keyPassword 'xxx'
            storeFile file('xxx')
            storePassword 'xxx'
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.txt'
            signingConfig signingConfigs.release
            debuggable false
            jniDebuggable false
            zipAlignEnabled true
        }
        debug {
            minifyEnabled false
            debuggable true
        }
    }

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':firebase_plugin')
}

Et le build.gradle du module de bibliothèque:

apply plugin: 'com.Android.library'
Android {

    compileSdkVersion 19
    buildToolsVersion project.Android_BUILD_TOOLS_VERSION
    defaultConfig {
        minSdkVersion Integer.parseInt(project.MIN_SDK)
        targetSdkVersion Integer.parseInt(project.Android_BUILD_TARGET_SDK_VERSION)
    }

    buildTypes {
        release {
            minifyEnabled true
            zipAlignEnabled true
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.txt'
        }
        debug {
            minifyEnabled false
            debuggable true
        }
    }

    productFlavors {
    }

}

dependencies {
    // Facebook SDK
    compile project(':facebook')

    // Used for StringUtils
    compile files('libs/commons-lang3-3.3.2.jar')
    // Bug tracking
    compile files('libs/bugsense-3.6.1.jar')
    compile fileTree(include: ['*.jar'], dir: 'libs')
    //Google Play Services - For Google Maps
    compile('com.google.Android.gms:play-services:5.0.89') {
        exclude group: 'com.google.Android', module: 'support-v4'
    }
    // Support Library.
    compile 'com.Android.support:support-v13:18.0.+'

    compile('com.Android.support:appcompat-v7:19.1.0') {
        exclude group: 'com.google.Android', module: 'support-v4'
    }
    // Volley - Networking library from google.
    compile('com.mcxiaoke.volley:library:1.0.0') {
        exclude group: 'com.google.Android', module: 'support-v4'
    }
    // Has is own support library in it so need to exclude it so no TOP_LEVEL_EXCEPTION will occur.
    compile('de.greenrobot:greendao:1.3.0') {
        exclude group: 'com.google.Android', module: 'support-v4'
    }
    // Firebase
    compile('com.firebase:firebase-simple-login:1.4.2') {
        exclude group: 'com.Android.support', module: 'support-v4'
    }
    // Super Toast
    compile('com.github.johnpersano:supertoasts:1.3.4@aar') {
        exclude group: 'com.Android.support', module: 'support-v4'
    }
    // Croping images
    compile('com.soundcloud.Android:android-crop:0.9.10@aar') {
        exclude group: 'com.Android.support', module: 'support-v4'
    }
    compile('com.github.chrisbanes.actionbarpulltorefresh:library:0.9.9') {
        exclude group: 'com.Android.support', module: 'support-v4'
    }
}


    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':firebase_plugin')
}

enter image description here

63
olik79

Comme indiqué dans les commentaires de ce problème, la meilleure pratique consiste à définir minifyEnabled false Dans la version de débogage. En définissant cette variable dans le module d'application, vous désactivez l'intégralité du processus de construction de proguard. C'est utile pour optimiser la version de la version, mais donne quelques problèmes si vous testez et développez.

84
droidpl

Je l'ai en quelque sorte résolu, même si je ne le comprends pas encore complètement. Le problème était que ProGuard était toujours actif, comme l'a suggéré @Feantury. Je ne sais pas pourquoi c'était le cas comme je l'avais précisé minifyEnabled false à chaque position de build.gradle que je pouvais imaginer, mais il semble que cela n’a eu aucun effet.

Comme je suis tombé en panne il y a quelques minutes à peine, j'ai vu dans le stacktrace des lignes qui ressemblaient à ceci:

Java.lang.NullPointerException
        at com.example.MyClass(Unknown Source)
        ...

Cela a fait de ProGuard le principal suspect pour moi. Après quelques recherches, j'ai trouvé n autre SO question qui traite de la source inconnue J'ai essayé la solution suggérée pour le débogage avec ProGuard activé et voilà, cela a fonctionné!

Ajoutez simplement les lignes suivantes à proguard-rules.txt:

-renamesourcefileattribute SourceFile    
-keepattributes SourceFile,LineNumberTable
15
olik79

en plus de la réponse de olik79, j'aimerais ajouter que, ces deux lignes feront en sorte que votre application atteigne des points d'arrêt par fragments. sinon il peut passer des fragments

-keep public class * extends Android.support.v4.** {*;}
-keep public class * extends Android.app.Fragment

voici mon édition complète sur proguard-Android.txt dans sdk\tools\proguard

# The support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version.  We know about them, and they are safe.
-dontwarn Android.support.**

-keep class !Android.support.v7.internal.view.menu.**,Android.support.** {*;}
-ignorewarnings
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable

-keep public class * extends Android.support.v4.** {*;}
-keep public class * extends Android.app.Fragment
9
smoothumut

J'ai eu un problème avec essayer de déboguer le code Kotlin. Le débogueur ne s'est arrêté à aucun des points d'arrêt. Il s'avère que c'était un problème avec Instant Run. J'ai supprimé tous les répertoires de construction de mon projet, puis j'ai désinstallé l'application après avoir désactivé l'exécution instantanée.

Pour désactiver l'exécution instantanée , accédez à Fichier> Paramètres> Construction, exécution, déploiement> Exécution instantanée> Décochez la case Activer l'exécution instantanée

2
vovahost

En fait, il existe un problème connu dans Android Studio: le plug-in Gradle ne transmet pas le débogage/la publication aux dépendances) . Cela semble se produire dans A Studio 1.4 et 1.5 au moins. .

Lorsqu'une application est compilée en mode débogage, ses modules sont en fait compilés en version. C'est pourquoi proguard peut être activé dans le débogage.

Je recommande ceci réponse cela a fonctionné pour moi.

1
Hartok