diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index dc60913..fa9cd55 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -20,8 +20,19 @@
     <uses-permission android:name="android.permission.INTERNET"/>
 
     <!--
+        Install the activity and disable battery optimization (so the KeyChainServiceTest can be
+        run in the background):
+        adb install out/target/product/${TARGET_PRODUCT}/data/app/KeyChainTests/KeyChainTests.apk
+        Then navigate to Settings -> Battery -> ... -> Battery optimization -> select All Apps
+        Find com.android.keychain.tests and select Do Not Optimize.
+
+        Alternatively, the following command can be used to exclude the test services from
+        the background execution restriction for 2 minutes:
+        adb shell cmd deviceidle tempwhitelist -d 120000 com.android.keychain.tests
+
         To run service:
         adb shell am startservice -n com.android.keychain.tests/.KeyChainServiceTest
+        One has to inspect the ADB log to find out about test failures.
 
         To run activity:
         adb shell am start -n com.android.keychain.tests/com.android.keychain.tests.KeyChainTestActivity
diff --git a/tests/src/com/android/keychain/tests/KeyChainServiceTest.java b/tests/src/com/android/keychain/tests/KeyChainServiceTest.java
index 1f3f7de..7e4008a 100644
--- a/tests/src/com/android/keychain/tests/KeyChainServiceTest.java
+++ b/tests/src/com/android/keychain/tests/KeyChainServiceTest.java
@@ -21,6 +21,8 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
 import android.os.IBinder;
 import android.security.Credentials;
 import android.security.IKeyChainService;
@@ -75,16 +77,36 @@
         }
     };
 
+    private static void addComponentToIntent(PackageManager pm, Intent intent) {
+        ResolveInfo service = pm.resolveService(intent, 0);
+        if (service == null) {
+            Log.w(TAG, String.format("No service found for intent: %s", intent.getAction()));
+        } else {
+            Log.d(TAG, String.format("Found service: %s %s for action %s",
+                        service.serviceInfo.packageName, service.serviceInfo.name,
+                        intent.getAction()));
+            ComponentName comp = new ComponentName(
+                    service.serviceInfo.packageName, service.serviceInfo.name);
+            intent.setComponent(comp);
+        }
+    }
+
     private void bindSupport() {
-        mIsBoundSupport = bindService(new Intent(IKeyChainServiceTestSupport.class.getName()),
+        Intent serviceIntent = new Intent(IKeyChainServiceTestSupport.class.getName());
+        addComponentToIntent(getPackageManager(), serviceIntent);
+        mIsBoundSupport = bindService(serviceIntent,
                                       mSupportConnection,
                                       Context.BIND_AUTO_CREATE);
+        Log.d(TAG, String.format("Finished bindSupport with result: %b", mIsBoundSupport));
     }
 
     private void bindService() {
-        mIsBoundService = bindService(new Intent(IKeyChainService.class.getName()),
+        Intent serviceIntent = new Intent(IKeyChainService.class.getName());
+        addComponentToIntent(getPackageManager(), serviceIntent);
+        mIsBoundService = bindService(serviceIntent,
                                       mServiceConnection,
                                       Context.BIND_AUTO_CREATE);
+        Log.d(TAG, String.format("Finished bindService with result: %b", mIsBoundService));
     }
 
     private void unbindServices() {
