Restore "Merge downstream branch 'developers-dev' into 'klp-dev'"

This reverts commit ec985147ec781dfff9a229c6b794ee4eac0ced91.
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..b895091
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,55 @@
+List<String> samples = [
+"security/keystore/BasicAndroidKeyStore",
+"connectivity/sync/BasicSyncAdapter",
+"connectivity/network/NetworkConnect",
+"connectivity/network/BasicNetworking",
+"connectivity/bluetooth/BluetoothLeGatt",
+"content/multiuser/AppRestrictions",
+"content/contacts/BasicContactables",
+"content/documentsUi/StorageClient",
+"views/TextLinkify",
+"input/gestures/BasicGestureDetect",
+"input/multitouch/BasicMultitouch",
+"testing/ActivityInstrumentation",
+"media/BasicMediaRouter",
+"media/BasicMediaDecoder",
+"ui/holo/BorderlessButtons",
+"ui/accessibility/BasicAccessibility",
+"ui/lists/CustomChoiceList",
+"ui/views/TextSwitcher",
+"ui/views/HorizontalPaging",
+"ui/actionbarcompat/Styled",
+"ui/actionbarcompat/ListPopupMenu",
+"ui/actionbarcompat/ShareActionProvider",
+"ui/actionbarcompat/Basic",
+"ui/notifications/BasicNotifications",
+"ui/notifications/CustomNotifications",
+"ui/actionbar/DoneBar",
+"ui/window/BasicImmersiveMode",
+"ui/window/AdvancedImmersiveMode",
+"ui/window/ImmersiveMode",
+"background/alarms/repeatingAlarm"
+]
+
+List<String> taskNames = [
+    "clean",
+    "refresh",
+    "build",
+    "emitAnt",
+    "emitGradle",
+    "emitBrowseable",
+]
+
+taskNames.each { taskName ->
+    def task = project.hasProperty(taskName) ? project.tasks[taskName] : project.task(taskName)
+    println task
+    samples.each { sample ->
+        File sampleDir = new File(sample)
+        task.dependsOn project.task([type: GradleBuild], "${sample}_${taskName}", {
+            buildFile = "${sample}/build.gradle"
+            dir = sample
+            tasks = [taskName]
+        })
+    }
+}
+