2016-07-26 15 views
2

Hier ist das Rezept des Problems:Grant-ACCESS_MOCK_LOCATION Erlaubnis für die Verwendung von adb Prüfung nicht in Eibisch

  1. hinzufügen Erlaubnis Mock Lage im Debug-Manifest <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
  2. Installieren Debug-Version der Anwendung im Telefon (in Gradle: debug { debuggable true })
  3. Versuchen Erlaubnis mit adb zu geben: adb shell pm grant com.myapp.name android.permission.ACCESS_MOCK_LOCATION

Das Ergebnis des Befehls lautet:

Betrieb nicht erlaubt: java.lang.SecurityException: Permission android.permission.ACCESS_MOCK_LOCATION ist kein veränderbare Berechtigungstyp“

Wenn ich an Entwickler Optionen auf dem Telefon gehen und setzen Setting >> Developer Option >> Select Mock location app es funktioniert.

Ich brauche das für automatisierte Tests, also ist die Option, zu den Telefoneinstellungen zu gehen, nicht gültig, weil es bei jeder Installation der App zurückgesetzt wird, also brauche ich die adb Option, um zu funktionieren.

Antwort

4

ich die Lösung innerhalb des Calabash Update für dieses gleiche Problem gefunden: https://github.com/calabash/calabash-android/commit/b31be97953325383b9295ff52234a0121cc27e27

adb shell appops set com.myapp.name 58 allow 

Um dies von gradle automatisch tun Sie den Befehl für die Installation von Aufgaben hinzufügen:

def adb = android.getAdbExe().toString() 
tasks.whenTaskAdded { task -> 
    if (task.name.startsWith('install')) { 
     task.doLast { 
      android.applicationVariants.all { variant -> 
       "${adb} devices".execute().text.eachLine { 
        if (it.endsWith("device")) { 
         def device = it.split()[0] 
         println "Granting test permissions on device ${device}\n" 
         "${adb} shell appops set ${variant.applicationId} 58 allow".execute() 
        } 
       } 
      } 
     } 
    } 
} 

Aber Sie müssen die Installationsaufgabe explizit vor der connectedTest-Task aufrufen, z. B .:

gradlew installMyAppDebug connectedMyAppDebugAndroidTest 
0

Alternativ können Sie Test-Butler-Plugin verwenden Test-Berechtigungen unter anderem https://github.com/linkedin/test-butler

Beispielprojekt zu verwalten, wo ich konfiguriert und verwenden Test-Butler: https://github.com/sebaslogen/Blendletje/

public class TestRunner extends AndroidJUnitRunner { 
    @Override 
    public void onStart() { 
     TestButler.setup(InstrumentationRegistry.getTargetContext()); 
     super.onStart(); 
    } 

    @Override 
    public void finish(final int resultCode, final Bundle results) { 
     TestButler.teardown(InstrumentationRegistry.getTargetContext()); 
     super.finish(resultCode, results); 
    } 
} 
@Before 
public void setUp() throws Exception { 
    final Context targetContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); 
    TestButler.verifyAnimationsDisabled(targetContext); 
} 

Sie können sehen, wie es automatisch installiert ist wenn Tests ausgeführt werden: https://github.com/sebaslogen/Blendletje/blob/master/app/build.gradle#L107