diff --git a/src/com/android/tradefed/targetprep/AddWhitelistPackage.java b/src/com/android/tradefed/targetprep/AddWhitelistPackage.java
new file mode 100644
index 0000000..491f9e4
--- /dev/null
+++ b/src/com/android/tradefed/targetprep/AddWhitelistPackage.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.tradefed.targetprep;
+
+import com.android.tradefed.build.IBuildInfo;
+import com.android.tradefed.config.Option;
+import com.android.tradefed.device.DeviceNotAvailableException;
+import com.android.tradefed.device.ITestDevice;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Add packages to whitelist to allow it to run in the background.
+ */
+public class AddWhitelistPackage extends BaseTargetPreparer implements ITargetCleaner {
+
+    @Option(
+            name = "whitelist-package-time",
+            description = "Duration to put package in whitelist",
+            isTimeVal = true
+    )
+    private long mDurationMillis;
+
+    @Option(
+            name = "whitelist-package-name",
+            description = "Name of package to put in whitelist"
+    )
+    private List<String> mPackages = new ArrayList<>();
+
+    @Override
+    public void setUp(ITestDevice device, IBuildInfo buildInfo)
+            throws TargetSetupError, BuildError, DeviceNotAvailableException {
+        for (String pkg : mPackages) {
+            device.executeShellCommand(
+                    String.format("dumpsys deviceidle tempwhitelist -d %d %s", mDurationMillis,
+                            pkg));
+        }
+    }
+
+    @Override
+    public void tearDown(ITestDevice device, IBuildInfo buildInfo, Throwable e)
+            throws DeviceNotAvailableException {
+        for (String pkg : mPackages) {
+            device.executeShellCommand(
+                    String.format("dumpsys deviceidle tempwhitelist -r %s", pkg));
+        }
+    }
+}
