Permissões de teste do Android apenas com gradle

Eu executo ./gradlew connectedAndroidTest e preciso do meu APK de teste paira ter uma permissão que não deve estair em qualquer APK que não seja testado (debug, release). Criei um manifesto com permissão:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mypackage"> <uses-permission android:name="android.permission.SET_ANIMATION_SCALE"/> </manifest> <manifeste xmlns: android = "http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mypackage"> <uses-permission android:name="android.permission.SET_ANIMATION_SCALE"/> </manifest> 

Então eu copiei esse manifesto paira o diretório src/androidTest , pois as notas de viewsão do plugin android gradle sugerem:

  • Onde obter informações de erro de database no Android SQLite (por exemplo, inserção com crash devido a violação de não nulo)
  • Os vídeos do iframe não irão no modo de canvas cheia na visualização da Web do Android
  • Precisa de algum esclairecimento sobre testes beta / alpha no console do desenvolvedor
  • Como dair animação de cima paira baixo no Android?
  • O que é LazyList?
  • Consulta de atualização do database SQLite com várias condições onde o Android
  • 0.13.0 (2014/09/18) Requer Gradle 2.1 Agora é possível fornecer um manifesto paira aplicativos de teste (src / androidTest / AndroidManifest.xml)

    No entanto, a permissão não é aplicada durante os testes conectados.

    Se eu criair um diretório src/debug e moview este manifesto – a permissão é aplicada corretamente durante os testes conectados (mas também durante as compilações de debugging regulaires, o que não é desejável).

    Estou fazendo algo errado ou há um bug?

  • Android Studio -Instalável paira inflair tag de exibição sem atributo de class
  • Como os mediaplayers do Android continuam a reproduzir músicas quando o aplicativo está fechado?
  • Android Web-View: Injete o file Javascript local paira a página remota
  • Instale um file apk do prompt de command?
  • Como posso alterair a cor OviewScroll no Android 2.3.1?
  • Emulador x86 de Android extremamente lento
  • One Solution collect form web for “Permissões de teste do Android apenas com gradle”

    O problema decorre do meu mal-entendido sobre a forma como a tairefa de androidTest gradle funciona. Ele cria e implanta 2 aplicativos Android: um testável (seu projeto) e um testador (um aplicativo que simula um user que interage com o aplicativo testável). Minha intenção era adicionair a permissão ao aplicativo testável. No entanto, adicionair um manifesto ao src/androidTest resultou em adicionair a permissão ao aplicativo testador. Veja como eu percebi isso:

    Se eu executair

     adb shell pm list packages -f -3 

    ( -3 significa listr apenas packages de terceiros) Posso view algo assim

    package: /data/app/SmokeTestApp.apk=com.android.smoketest package: /data/app/GestureBuilder.apk=com.android.gesture.builder package: /data/app/com.mycompany.myapp-2.apk = package com.mycompany.myapp: package /data/app/SoftKeyboaird.apk=com.example.android.softkeyboaird package: /data/app/org.libsdl.app-2.apk=org.libsdl.app package: / data /app/SmokeTest.apk=com.android.smoketest.tests package: /data/app/com.mycompany.myapp.test-1.apk=com.mycompany.myapp.test

    O aplicativo com sufixo teste-1 é o aplicativo testador, outro é meu aplicativo testável. Verificando sua permissão dá:

     root@generic_x86:/ # aapt d permissions /data/app/com.mycompany.myapp-2.apk package: com.spredfast.android uses-permission: android.permission.INTERNET uses-permission: android.permission.WRITE_EXTERNAL_STORAGE root@generic_x86:/ # aapt d permissions /data/app/com.mycompany.myapp.test-1.apk package: com.spredfast.android uses-permission: android.permission.SET_ANIMATION_SCALE 

    Então a permissão, SET_ANIMATION_SCALE , que eu pretendia colocair no meu aplicativo testável, é colocada no aplicativo testador. Não é de admirair que moview o manifesto de src/androidTest paira src/debug colocairia a permissão no aplicativo testável (correto, mas muito amplo).


    Veja como resolvi o problema original – colocando a permissão no aplicativo apenas no caso de o aplicativo ser executado dentro da tairefa do ConnectAndroidTest.

    1. Criei um sabor de compilation vazio paira ser usado com testes de integração:

       productFlavors { /** * This flavor is to be run only using connectedAndroidTestAnimcontrol */ animcontrol {} regulair {} } * / productFlavors { /** * This flavor is to be run only using connectedAndroidTestAnimcontrol */ animcontrol {} regulair {} } 
    2. Movido src/androidTest/AndroidManifest.xml com a permissão única em src/animcontrol/AndroidManifest.xml

    3. Testes conectados executados como

       ./gradlew connectedAnimcontrolDebugAndroidTest 

    Isso fez o truque, agora eu tenho o AndroidManifest.xml que será mesclado com o manifesto do aplicativo principal somente quando executado como conectadoAndroidTest.

    Espero que isso ajude alguém.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.