Come abilitare il permesso di lettura / scrittura dei contatti quando eseguire il test Android collegato?

Compito:

Lasciate che i test Android collegati funzionino bene su Android M.

  • Qual è l'altezza della barra degli strumenti di progettazione del materiale consigliato nel paesaggio
  • Immagine in ImageView è allungata - Android
  • Come cancellare automaticamente la cache volley?
  • Come posso disabilitare esplicitamente la modalità di streaming in blocchi per le connessioni HTTP in Android?
  • Metodo non trovato utilizzando DigestUtils in Android
  • Come gonfiare più istanze di un layout con lo stesso ID all'interno di un layout gonfiato
  • Domanda:

    Come abilitare il permesso di lettura / scrittura dei contatti quando eseguire il test Android collegato?

    Problema:

    So che il command pm potrebbe consentire l'authorization di apk.

    adb shell pm grant <PACKAGE_NAME> <PERMISSION_NAME> 

    Voglio eseguire le prove che potrebbero essere eseguite sia su apis reali che su muss apis. Se non riesco a triggersre il command pm in gradle DSL, il codice di prova non è in grado di toccare l'api reale per motivi di sicurezza.

    Cerco di aggiungere il passo come prima delle attività connectedAndroidTest (connectedInstrumentTest) . Non funziona perché l'apk di destinazione non è ancora stato installato. Le righe di command vengono chiamate con codice di errore.

     android.testVariants.all { variant -> variant.connectedInstrumentTest.doFirst { def adb = android.getAdbExe().toString() exec { commandLine 'echo', "hello, world testVariants" } exec { commandLine adb, 'shell', 'pm', 'grant', variant.testedVariant.applicationId, 'android.permission.READ_ACCOUNTS' } } } 

    Cerco di aggiungere il passo come ultimo passo dell'attività di installazione. Non è chiamato quando inizio con connectedAndroidTest .

     android.applicationVariants.all { variant -> if (variant.getBuildType().name == "debug") { variant.install.doLast { def adb = android.getAdbExe().toString() exec { commandLine 'echo', "hello, world applicationVariants" } exec { commandLine adb, 'shell', 'pm', 'grant', variant.applicationId, 'android.permission.READ_ACCOUNTS' } } } } 

    Il mio piano è quello di abilitare le autorizzazioni prima che i test vengano avviati. Non so quale task sia quello giusto. Sembra connectedVariantAndroidTest non dipende da installVariant , anche se entrambi chiamano l' adb install .

    Cerco di eseguire la pm grant di pm grant per i casi di prova. Non riesce come previsto.

    Accetterò altre soluzioni per eseguire correttamente i test android.

    One Solution collect form web for “Come abilitare il permesso di lettura / scrittura dei contatti quando eseguire il test Android collegato?”

    Penso che dovrai creare il tuo proprio task a seconda di installDebug e quindi fare connectedDebugAndroidTest dipendere dal tuo task.

    La gente lo fa per distriggersre le animazioni e le opere, forzate l'installazione dell'app e concedi la tua specifica authorization prima che i test android siano eseguiti così:

     def adb = android.getAdbExe().toString() task nameofyourtask(type: Exec, dependsOn: 'installDebug') { // or install{productFlavour}{buildType} group = 'nameofyourtaskgroup' description = 'Describe your task here.' def mypermission = 'android.permission.READ_ACCOUNTS' commandLine "$adb shell pm grant ${variant.applicationId} $mypermission".split(' ') } tasks.whenTaskAdded { task -> if (task.name.startsWith('connectedDebugAndroidTest')) { // or connected{productFlavour}{buildType}AndroidTest task.dependsOn nameofyourtask } } 

    È ansible aggiungere questo codice a un nuovo file di yourtask.gradle e aggiungere la row successiva nella parte inferiore del file build.gradle :

     apply from: "yourtask.gradle" 

    E dichiarare il tuo permesso nel manifesto appropriato

     <uses-permission android:name="android.permission.READ_ACCOUNTS" /> 

    Aggiornare:

    Comando commandLine fisso come hai fatto sulla versione per varie varianti , grazie.

     android.applicationVariants.all { variant -> if (variant.getBuildType().name == "debug") { task "configDevice${variant.name.capitalize()}" (type: Exec){ dependsOn variant.install group = 'nameofyourtaskgroup' description = 'Describe your task here.' def adb = android.getAdbExe().toString() def mypermission = 'android.permission.READ_ACCOUNTS' commandLine "$adb shell pm grant ${variant.applicationId} $mypermission".split(' ') } variant.testVariant.connectedInstrumentTest.dependsOn "configDevice${variant.name.capitalize()}" } } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.