diff --git a/packages/flutter_tools/lib/executable.dart b/packages/flutter_tools/lib/executable.dart
index 6cb4996..b42040e 100644
--- a/packages/flutter_tools/lib/executable.dart
+++ b/packages/flutter_tools/lib/executable.dart
@@ -23,7 +23,7 @@
 import 'src/commands/inject_plugins.dart';
 import 'src/commands/install.dart';
 import 'src/commands/logs.dart';
-import 'src/commands/materialize.dart';
+import 'src/commands/make_host_app_editable.dart';
 import 'src/commands/packages.dart';
 import 'src/commands/precache.dart';
 import 'src/commands/run.dart';
@@ -68,7 +68,7 @@
     InjectPluginsCommand(hidden: !verboseHelp),
     InstallCommand(),
     LogsCommand(),
-    MaterializeCommand(),
+    MakeHostAppEditableCommand(),
     PackagesCommand(),
     PrecacheCommand(),
     RunCommand(verboseHelp: verboseHelp),
diff --git a/packages/flutter_tools/lib/src/commands/make_host_app_editable.dart b/packages/flutter_tools/lib/src/commands/make_host_app_editable.dart
new file mode 100644
index 0000000..9ae153d
--- /dev/null
+++ b/packages/flutter_tools/lib/src/commands/make_host_app_editable.dart
@@ -0,0 +1,78 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:async';
+import 'package:meta/meta.dart';
+import '../base/common.dart';
+import '../project.dart';
+import '../runner/flutter_command.dart';
+
+class MakeHostAppEditableCommand extends FlutterCommand {
+  MakeHostAppEditableCommand() {
+    addSubcommand(MakeHostAppEditableAndroidCommand());
+    addSubcommand(MakeHostAppEditableIosCommand());
+  }
+
+  @override
+  final String name = 'make-host-app-editable';
+
+  @override
+  final String description = 'Commands for making host apps editable within a Flutter project';
+
+  @override
+  bool get hidden => true;
+
+  @override
+  Future<Null> runCommand() async { }
+}
+
+abstract class MakeHostAppEditableSubCommand extends FlutterCommand {
+  MakeHostAppEditableSubCommand() {
+    requiresPubspecYaml();
+  }
+
+  FlutterProject _project;
+
+  @override
+  @mustCallSuper
+  Future<Null> runCommand() async {
+    await _project.ensureReadyForPlatformSpecificTooling();
+  }
+
+  @override
+  Future<Null> validateCommand() async {
+    await super.validateCommand();
+    _project = await FlutterProject.current();
+    if (!_project.isModule)
+      throw ToolExit("Only projects created using 'flutter create -t module' can have their host apps made editable.");
+  }
+}
+
+class MakeHostAppEditableAndroidCommand extends MakeHostAppEditableSubCommand {
+  @override
+  String get name => 'android';
+
+  @override
+  String get description => 'Make an Android host app editable within a Flutter project';
+
+  @override
+  Future<Null> runCommand() async {
+    await super.runCommand();
+    await _project.android.makeHostAppEditable();
+  }
+}
+
+class MakeHostAppEditableIosCommand extends MakeHostAppEditableSubCommand {
+  @override
+  String get name => 'ios';
+
+  @override
+  String get description => 'Make an iOS host app editable within a Flutter project';
+
+  @override
+  Future<Null> runCommand() async {
+    await super.runCommand();
+    await _project.ios.makeHostAppEditable();
+  }
+}
diff --git a/packages/flutter_tools/lib/src/commands/materialize.dart b/packages/flutter_tools/lib/src/commands/materialize.dart
deleted file mode 100644
index c785ea4..0000000
--- a/packages/flutter_tools/lib/src/commands/materialize.dart
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'dart:async';
-import 'package:meta/meta.dart';
-import '../base/common.dart';
-import '../project.dart';
-import '../runner/flutter_command.dart';
-
-class MaterializeCommand extends FlutterCommand {
-  MaterializeCommand() {
-    addSubcommand(MaterializeAndroidCommand());
-    addSubcommand(MaterializeIosCommand());
-  }
-
-  @override
-  final String name = 'materialize';
-
-  @override
-  final String description = 'Commands for materializing host apps for a Flutter Module';
-
-  @override
-  bool get hidden => true;
-
-  @override
-  Future<Null> runCommand() async { }
-}
-
-abstract class MaterializeSubCommand extends FlutterCommand {
-  MaterializeSubCommand() {
-    requiresPubspecYaml();
-  }
-
-  FlutterProject _project;
-
-  @override
-  @mustCallSuper
-  Future<Null> runCommand() async {
-    await _project.ensureReadyForPlatformSpecificTooling();
-  }
-
-  @override
-  Future<Null> validateCommand() async {
-    await super.validateCommand();
-    _project = await FlutterProject.current();
-    if (!_project.isModule)
-      throw ToolExit("Only projects created using 'flutter create -t module' can be materialized.");
-  }
-}
-
-class MaterializeAndroidCommand extends MaterializeSubCommand {
-  @override
-  String get name => 'android';
-
-  @override
-  String get description => 'Materialize an Android host app';
-
-  @override
-  Future<Null> runCommand() async {
-    await super.runCommand();
-    await _project.android.materialize();
-  }
-}
-
-class MaterializeIosCommand extends MaterializeSubCommand {
-  @override
-  String get name => 'ios';
-
-  @override
-  String get description => 'Materialize an iOS host app';
-
-  @override
-  Future<Null> runCommand() async {
-    await super.runCommand();
-    await _project.ios.materialize();
-  }
-}
diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart
index 6f41908..ed8258c 100644
--- a/packages/flutter_tools/lib/src/project.dart
+++ b/packages/flutter_tools/lib/src/project.dart
@@ -258,8 +258,8 @@
     }
   }
 
-  Future<void> materialize() async {
-    throwToolExit('flutter materialize has not yet been implemented for iOS');
+  Future<void> makeHostAppEditable() async {
+    throwToolExit('making host app editable has not yet been implemented for iOS');
   }
 
   File get generatedXcodePropertiesFile => directory.childDirectory('Flutter').childFile('Generated.xcconfig');
@@ -301,18 +301,18 @@
   /// containing the `app/` subdirectory and the `settings.gradle` file that
   /// includes it in the overall Gradle project.
   Directory get hostAppGradleRoot {
-    if (!isModule || _materializedDirectory.existsSync())
-      return _materializedDirectory;
+    if (!isModule || _editableHostAppDirectory.existsSync())
+      return _editableHostAppDirectory;
     return _ephemeralDirectory;
   }
 
   /// The Gradle root directory of the Android wrapping of Flutter and plugins.
   /// This is the same as [hostAppGradleRoot] except when the project is
-  /// a Flutter module with a materialized host app.
-  Directory get _flutterLibGradleRoot => isModule ? _ephemeralDirectory : _materializedDirectory;
+  /// a Flutter module with an editable host app.
+  Directory get _flutterLibGradleRoot => isModule ? _ephemeralDirectory : _editableHostAppDirectory;
 
   Directory get _ephemeralDirectory => parent.directory.childDirectory('.android');
-  Directory get _materializedDirectory => parent.directory.childDirectory('android');
+  Directory get _editableHostAppDirectory => parent.directory.childDirectory('android');
 
   /// True, if the parent Flutter project is a module.
   bool get isModule => parent.isModule;
@@ -346,8 +346,8 @@
   Future<void> ensureReadyForPlatformSpecificTooling() async {
     if (isModule && _shouldRegenerateFromTemplate()) {
       _regenerateLibrary();
-      // Add ephemeral host app, if a materialized host app does not already exist.
-      if (!_materializedDirectory.existsSync()) {
+      // Add ephemeral host app, if an editable host app does not already exist.
+      if (!_editableHostAppDirectory.existsSync()) {
         _overwriteFromTemplate(fs.path.join('module', 'android', 'host_app_common'), _ephemeralDirectory);
         _overwriteFromTemplate(fs.path.join('module', 'android', 'host_app_ephemeral'), _ephemeralDirectory);
       }
@@ -363,16 +363,16 @@
         || Cache.instance.isOlderThanToolsStamp(_ephemeralDirectory);
   }
 
-  Future<void> materialize() async {
+  Future<void> makeHostAppEditable() async {
     assert(isModule);
-    if (_materializedDirectory.existsSync())
-      throwToolExit('Android host app already materialized. To redo materialization, delete the android/ folder.');
+    if (_editableHostAppDirectory.existsSync())
+      throwToolExit('Android host app is already editable. To start fresh, delete the android/ folder.');
     _regenerateLibrary();
-    _overwriteFromTemplate(fs.path.join('module', 'android', 'host_app_common'), _materializedDirectory);
-    _overwriteFromTemplate(fs.path.join('module', 'android', 'host_app_materialized'), _materializedDirectory);
-    _overwriteFromTemplate(fs.path.join('module', 'android', 'gradle'), _materializedDirectory);
-    gradle.injectGradleWrapper(_materializedDirectory);
-    gradle.writeLocalProperties(_materializedDirectory.childFile('local.properties'));
+    _overwriteFromTemplate(fs.path.join('module', 'android', 'host_app_common'), _editableHostAppDirectory);
+    _overwriteFromTemplate(fs.path.join('module', 'android', 'host_app_editable'), _editableHostAppDirectory);
+    _overwriteFromTemplate(fs.path.join('module', 'android', 'gradle'), _editableHostAppDirectory);
+    gradle.injectGradleWrapper(_editableHostAppDirectory);
+    gradle.writeLocalProperties(_editableHostAppDirectory.childFile('local.properties'));
     await injectPlugins(parent);
   }
 
diff --git a/packages/flutter_tools/templates/module/README.md b/packages/flutter_tools/templates/module/README.md
index 8e976a0..bae329d 100644
--- a/packages/flutter_tools/templates/module/README.md
+++ b/packages/flutter_tools/templates/module/README.md
@@ -37,7 +37,7 @@
 Executing `./gradlew app:assembleDebug` in the target folder produces
 an `.apk` archive.
 
-Used with either `android_host_ephemeral` or `android_host_materialized`.
+Used with either `android_host_ephemeral` or `android_host_editable`.
 
 #### host_app_ephemeral
 
@@ -47,11 +47,11 @@
 under Flutter tooling control) Android host app with a dependency on the
 `.android/Flutter` library.
 
-#### host_app_materialized
+#### host_app_editable
 
 Written to `android/` on top of `android_host_common`.
 
-Combined contents define a *materialized* (visible, one-time generated,
+Combined contents define an *editable* (visible, one-time generated,
 under app author control) Android host app with a dependency on the
 `.android/Flutter` library.
 
diff --git a/packages/flutter_tools/templates/module/android/host_app_materialized/settings.gradle.copy.tmpl b/packages/flutter_tools/templates/module/android/host_app_editable/settings.gradle.copy.tmpl
similarity index 100%
rename from packages/flutter_tools/templates/module/android/host_app_materialized/settings.gradle.copy.tmpl
rename to packages/flutter_tools/templates/module/android/host_app_editable/settings.gradle.copy.tmpl
diff --git a/packages/flutter_tools/test/project_test.dart b/packages/flutter_tools/test/project_test.dart
index aa737b0..b0efc88 100644
--- a/packages/flutter_tools/test/project_test.dart
+++ b/packages/flutter_tools/test/project_test.dart
@@ -89,22 +89,22 @@
       });
     });
 
-    group('materialize Android', () {
+    group('editable Android host app', () {
       testInMemory('fails on non-module', () async {
         final FlutterProject project = await someProject();
         await expectLater(
-          project.android.materialize(),
+          project.android.makeHostAppEditable(),
           throwsA(isInstanceOf<AssertionError>()),
         );
       });
-      testInMemory('exits on already materialized module', () async {
+      testInMemory('exits on already editable module', () async {
         final FlutterProject project = await aModuleProject();
-        await project.android.materialize();
-        return expectToolExitLater(project.android.materialize(), contains('already materialized'));
+        await project.android.makeHostAppEditable();
+        return expectToolExitLater(project.android.makeHostAppEditable(), contains('already editable'));
       });
       testInMemory('creates android/app folder in place of .android/app', () async {
         final FlutterProject project = await aModuleProject();
-        await project.android.materialize();
+        await project.android.makeHostAppEditable();
         expectNotExists(project.directory.childDirectory('.android').childDirectory('app'));
         expect(
           project.directory.childDirectory('.android').childFile('settings.gradle').readAsStringSync(),
@@ -119,7 +119,7 @@
       });
       testInMemory('retains .android/Flutter folder and references it', () async {
         final FlutterProject project = await aModuleProject();
-        await project.android.materialize();
+        await project.android.makeHostAppEditable();
         expectExists(project.directory.childDirectory('.android').childDirectory('Flutter'));
         expect(
           project.directory.childDirectory('android').childFile('settings.gradle').readAsStringSync(),
@@ -128,9 +128,9 @@
       });
       testInMemory('can be redone after deletion', () async {
         final FlutterProject project = await aModuleProject();
-        await project.android.materialize();
+        await project.android.makeHostAppEditable();
         project.directory.childDirectory('android').deleteSync(recursive: true);
-        await project.android.materialize();
+        await project.android.makeHostAppEditable();
         expectExists(project.directory.childDirectory('android').childDirectory('app'));
       });
     });
