J'essaie de tester en utilisant la structure de répertoires suivante (qui a été configurée par Android Studio):
Je peux exécuter certains tests très bien, et même le AllTests.Java
fonctionne correctement sans que le fichier AndroidManifest.xml
soit présent. Le problème est que, pour l'un de mes nouveaux tests, j'ai besoin de l'autorisation Android.permission.INTERNET
. J'ai donc ajouté ce qui suit au fichier AndroidManifest.xml
situé dans le répertoire androidTest
:
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.core"
Android:versionCode="2"
Android:versionName="2.0" >
<uses-sdk Android:minSdkVersion="8" />
<uses-permission Android:name="Android.permission.INTERNET" />
</manifest>
Malheureusement, ça ne marche pas. L'erreur suivante persiste lorsque j'effectue l'un de mes tests:
E/RestAPIRequestTest ﹕ Autorisation refusée (autorisation INTERNET manquante?)
J'ai essayé de définir package
pour qu'il soit com.example.core.test
dans mon fichier AndroidManifest.xml
(car c'est ce qui apparaît dans la liste Paramètres-> Applications), mais sans joie.
Je pense que le fichier AndroidManifest.xml
n'est même pas reconnu, car le numéro de version ne s'affiche pas non plus dans les paramètres de l'application de test.
Comment puis-je injecter les autorisations correctes pour mon projet de test?
Je devais faire quelque chose de similaire. J'ai créé un dossier nommé "debug" à côté d'AndroidTest, qui correspond à la variante de débogage de l'application, et ai placé un fichier AndroidManifest.xml avec l'autorisation correspondante dans ce dossier. L'autorisation fonctionne alors sous test puisque l'application de test utilise la variante de débogage. Ce n'est pas idéal car cela brouille la limite entre test et débogage, ce qui n'est pas tout à fait la même chose.
Je pense que ce qui se passe, c'est que les autorisations dans androidTest/AndroidManifest.xml vont à l'application de test, pas à l'application cible, même si ce n'est pas tout à fait clair pour moi s'il existe réellement deux APK différents ou quoi.
Dans les versions antérieures d'Android Studio et du plug-in Android Gradle, le fichier androidTest/AndroidManifest.xml était ignoré. Cela a été documenté sur le site tools.Android.com à l'époque.
Avec le lancement du plug-in Android Studio 1.0+ et Android Gradle 1.0+ en décembre 2014, le fichier AndroidManifest.xml doit maintenant être fusionné avec les fichiers principaux/AndroidManifest.xml (en plus des fichiers de manifeste de débogage et de libération s'ils existent). Plus de détails concernant la fusion de manifestes les règles sont ici .
Si vous rencontrez toujours des problèmes ou si vous êtes en train de déboguer des problèmes de test liés au manifeste, essayez ceci (Adaptez-le légèrement pour Windows):
cd MyApplication
./gradlew assembleDebugTest
ls app/build/intermediates/manifests/test/debug/AndroidManifest.xml
ls app/build/intermediates/manifests/full/debug/AndroidManifest.xml
ls app/build/outputs/apk/manifest-merger-debug-report.txt
Quelques notes supplémentaires:
Une solution serait comme construire principal apk et tester apk en une seule exécution . Exemple: ./gradlew clean :main:assembleDebug :main:assembleDebugAndroidTest
.
Cela créera une nouvelle application principale instrumentée disposant de toutes les autorisations supplémentaires requises pour l'application de test.