diff --git a/glance/glance-wear-tiles-preview/src/androidMain/kotlin/androidx/glance/wear/tiles/preview/GlanceTileServiceViewAdapter.kt b/glance/glance-wear-tiles-preview/src/androidMain/kotlin/androidx/glance/wear/tiles/preview/GlanceTileServiceViewAdapter.kt
index 6ed80ec..00d0f71 100644
--- a/glance/glance-wear-tiles-preview/src/androidMain/kotlin/androidx/glance/wear/tiles/preview/GlanceTileServiceViewAdapter.kt
+++ b/glance/glance-wear-tiles-preview/src/androidMain/kotlin/androidx/glance/wear/tiles/preview/GlanceTileServiceViewAdapter.kt
@@ -87,6 +87,7 @@
             .build()
         val layout = tile.timeline?.timelineEntries?.get(0)?.layout
 
+        @Suppress("DEPRECATION")
         if (layout != null) {
             val renderer = TileRenderer(
                 context,
diff --git a/glance/glance-wear-tiles/src/androidAndroidTest/kotlin/androidx/glance/wear/tiles/ScreenshotTests.kt b/glance/glance-wear-tiles/src/androidAndroidTest/kotlin/androidx/glance/wear/tiles/ScreenshotTests.kt
index 13e0b39..8f4be28 100644
--- a/glance/glance-wear-tiles/src/androidAndroidTest/kotlin/androidx/glance/wear/tiles/ScreenshotTests.kt
+++ b/glance/glance-wear-tiles/src/androidAndroidTest/kotlin/androidx/glance/wear/tiles/ScreenshotTests.kt
@@ -399,6 +399,7 @@
                 CompositionResult(errorUiLayout(), ResourceBuilders.Resources.Builder())
             }
 
+        @Suppress("DEPRECATION")
         val renderer = TileRenderer(
             context,
             LayoutElementBuilders.Layout.Builder().setRoot(translatedComposition.layout).build(),
@@ -407,6 +408,7 @@
         ) {}
 
         val frame = FrameLayout(getApplicationContext())
+        @Suppress("DEPRECATION")
         val firstChild = renderer.inflate(frame)
 
         requireNotNull(firstChild) {
diff --git a/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/testapp/GoldenTestActivity.java b/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/testapp/GoldenTestActivity.java
index 3fd63b3..ecab954 100644
--- a/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/testapp/GoldenTestActivity.java
+++ b/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/testapp/GoldenTestActivity.java
@@ -33,11 +33,11 @@
 
 import androidx.annotation.Nullable;
 import androidx.core.content.ContextCompat;
-import androidx.wear.tiles.LayoutElementBuilders;
-import androidx.wear.tiles.LayoutElementBuilders.Layout;
-import androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId;
-import androidx.wear.tiles.ResourceBuilders.ImageResource;
-import androidx.wear.tiles.ResourceBuilders.Resources;
+import androidx.wear.protolayout.LayoutElementBuilders;
+import androidx.wear.protolayout.LayoutElementBuilders.Layout;
+import androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId;
+import androidx.wear.protolayout.ResourceBuilders.ImageResource;
+import androidx.wear.protolayout.ResourceBuilders.Resources;
 import androidx.wear.tiles.material.R;
 import androidx.wear.protolayout.proto.LayoutElementProto.LayoutElement;
 import androidx.wear.tiles.renderer.TileRenderer;
@@ -62,7 +62,7 @@
         }
 
         LayoutElementBuilders.LayoutElement rootLayoutElement =
-                LayoutElementBuilders.LayoutElement.fromLayoutElementProto(layoutElementProto);
+                LayoutElementBuilders.layoutElementFromProto(layoutElementProto);
 
         Context appContext = getApplicationContext();
         FrameLayout root = new FrameLayout(appContext);
@@ -75,9 +75,9 @@
 
         Resources resources = generateResources();
         TileRenderer renderer =
-                new TileRenderer(appContext, layout, resources, mainExecutor, i -> {});
+                new TileRenderer(appContext, mainExecutor, i -> {});
 
-        View firstChild = renderer.inflate(root);
+        View firstChild = renderer.inflate(layout, resources, root);
 
         // Simulate what the thing outside the renderer should do. Center the contents.
         LayoutParams layoutParams = (LayoutParams) firstChild.getLayoutParams();
diff --git a/wear/tiles/tiles-renderer/api/current.txt b/wear/tiles/tiles-renderer/api/current.txt
index a162ceb..670ef3a 100644
--- a/wear/tiles/tiles-renderer/api/current.txt
+++ b/wear/tiles/tiles-renderer/api/current.txt
@@ -42,13 +42,15 @@
 package androidx.wear.tiles.renderer {
 
   public final class TileRenderer {
-    ctor public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
-    ctor public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, @StyleRes int, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
-    method public android.view.View? inflate(android.view.ViewGroup);
+    ctor @Deprecated public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
+    ctor @Deprecated public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, @StyleRes int, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
+    ctor public TileRenderer(android.content.Context, java.util.concurrent.Executor, java.util.function.Consumer<androidx.wear.protolayout.StateBuilders.State!>);
+    method @Deprecated public android.view.View? inflate(android.view.ViewGroup);
+    method public android.view.View? inflate(androidx.wear.protolayout.LayoutElementBuilders.Layout, androidx.wear.protolayout.ResourceBuilders.Resources, android.view.ViewGroup);
   }
 
-  public static interface TileRenderer.LoadActionListener {
-    method public void onClick(androidx.wear.tiles.StateBuilders.State);
+  @Deprecated public static interface TileRenderer.LoadActionListener {
+    method @Deprecated public void onClick(androidx.wear.tiles.StateBuilders.State);
   }
 
 }
diff --git a/wear/tiles/tiles-renderer/api/public_plus_experimental_current.txt b/wear/tiles/tiles-renderer/api/public_plus_experimental_current.txt
index a162ceb..670ef3a 100644
--- a/wear/tiles/tiles-renderer/api/public_plus_experimental_current.txt
+++ b/wear/tiles/tiles-renderer/api/public_plus_experimental_current.txt
@@ -42,13 +42,15 @@
 package androidx.wear.tiles.renderer {
 
   public final class TileRenderer {
-    ctor public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
-    ctor public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, @StyleRes int, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
-    method public android.view.View? inflate(android.view.ViewGroup);
+    ctor @Deprecated public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
+    ctor @Deprecated public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, @StyleRes int, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
+    ctor public TileRenderer(android.content.Context, java.util.concurrent.Executor, java.util.function.Consumer<androidx.wear.protolayout.StateBuilders.State!>);
+    method @Deprecated public android.view.View? inflate(android.view.ViewGroup);
+    method public android.view.View? inflate(androidx.wear.protolayout.LayoutElementBuilders.Layout, androidx.wear.protolayout.ResourceBuilders.Resources, android.view.ViewGroup);
   }
 
-  public static interface TileRenderer.LoadActionListener {
-    method public void onClick(androidx.wear.tiles.StateBuilders.State);
+  @Deprecated public static interface TileRenderer.LoadActionListener {
+    method @Deprecated public void onClick(androidx.wear.tiles.StateBuilders.State);
   }
 
 }
diff --git a/wear/tiles/tiles-renderer/api/restricted_current.txt b/wear/tiles/tiles-renderer/api/restricted_current.txt
index a162ceb..670ef3a 100644
--- a/wear/tiles/tiles-renderer/api/restricted_current.txt
+++ b/wear/tiles/tiles-renderer/api/restricted_current.txt
@@ -42,13 +42,15 @@
 package androidx.wear.tiles.renderer {
 
   public final class TileRenderer {
-    ctor public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
-    ctor public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, @StyleRes int, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
-    method public android.view.View? inflate(android.view.ViewGroup);
+    ctor @Deprecated public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
+    ctor @Deprecated public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, @StyleRes int, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
+    ctor public TileRenderer(android.content.Context, java.util.concurrent.Executor, java.util.function.Consumer<androidx.wear.protolayout.StateBuilders.State!>);
+    method @Deprecated public android.view.View? inflate(android.view.ViewGroup);
+    method public android.view.View? inflate(androidx.wear.protolayout.LayoutElementBuilders.Layout, androidx.wear.protolayout.ResourceBuilders.Resources, android.view.ViewGroup);
   }
 
-  public static interface TileRenderer.LoadActionListener {
-    method public void onClick(androidx.wear.tiles.StateBuilders.State);
+  @Deprecated public static interface TileRenderer.LoadActionListener {
+    method @Deprecated public void onClick(androidx.wear.tiles.StateBuilders.State);
   }
 
 }
diff --git a/wear/tiles/tiles-renderer/src/androidTest/java/androidx/wear/tiles/renderer/test/TileRendererGoldenTest.java b/wear/tiles/tiles-renderer/src/androidTest/java/androidx/wear/tiles/renderer/test/TileRendererGoldenTest.java
index 8b6ef65..8d16cea 100644
--- a/wear/tiles/tiles-renderer/src/androidTest/java/androidx/wear/tiles/renderer/test/TileRendererGoldenTest.java
+++ b/wear/tiles/tiles-renderer/src/androidTest/java/androidx/wear/tiles/renderer/test/TileRendererGoldenTest.java
@@ -30,8 +30,8 @@
 import androidx.test.filters.LargeTest;
 import androidx.test.screenshot.AndroidXScreenshotTestRule;
 import androidx.test.screenshot.matchers.MSSIMMatcher;
-import androidx.wear.tiles.LayoutElementBuilders;
-import androidx.wear.tiles.ResourceBuilders;
+import androidx.wear.protolayout.LayoutElementBuilders;
+import androidx.wear.protolayout.ResourceBuilders;
 import androidx.wear.protolayout.proto.LayoutElementProto.Layout;
 import androidx.wear.protolayout.proto.LayoutElementProto.LayoutElement;
 import androidx.wear.protolayout.proto.ResourceProto.AndroidImageResourceByResId;
@@ -236,13 +236,12 @@
         TileRenderer renderer =
                 new TileRenderer(
                         appContext,
-                        LayoutElementBuilders.Layout.fromProto(
-                                Layout.newBuilder().setRoot(rootElement).build()),
-                        ResourceBuilders.Resources.fromProto(generateResources()),
                         ContextCompat.getMainExecutor(getApplicationContext()),
                         i -> {});
 
-        View firstChild = renderer.inflate(mainFrame);
+        View firstChild = renderer.inflate(LayoutElementBuilders.Layout.fromProto(
+                Layout.newBuilder().setRoot(rootElement).build()),
+                ResourceBuilders.Resources.fromProto(generateResources()), mainFrame);
 
         if (firstChild == null) {
             throw new RuntimeException("Failed to inflate " + expectedKey);
diff --git a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/manager/TileUiClient.kt b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/manager/TileUiClient.kt
index f814499..525dfcf6 100644
--- a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/manager/TileUiClient.kt
+++ b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/manager/TileUiClient.kt
@@ -31,10 +31,10 @@
 import androidx.concurrent.futures.await
 import androidx.core.content.ContextCompat
 import androidx.wear.tiles.DeviceParametersBuilders
-import androidx.wear.tiles.LayoutElementBuilders
+import androidx.wear.protolayout.LayoutElementBuilders
+import androidx.wear.protolayout.ResourceBuilders
+import androidx.wear.protolayout.StateBuilders
 import androidx.wear.tiles.RequestBuilders
-import androidx.wear.tiles.ResourceBuilders
-import androidx.wear.tiles.StateBuilders
 import androidx.wear.tiles.TimelineBuilders
 import androidx.wear.tiles.checkers.TimelineChecker
 import androidx.wear.tiles.connection.DefaultTileClient
@@ -140,7 +140,7 @@
         withContext(Dispatchers.Main) {
             val tileRequest = RequestBuilders.TileRequest
                 .Builder()
-                .setState(state)
+                .setState(androidx.wear.tiles.StateBuilders.State.fromProto(state.toProto()))
                 .setDeviceParameters(buildDeviceParameters())
                 .build()
 
@@ -155,7 +155,9 @@
                     .setDeviceParameters(buildDeviceParameters())
                     .build()
 
-                tileResources = tilesConnection.requestResources(resourcesRequest).await()
+                tileResources = ResourceBuilders.Resources.fromProto(
+                    tilesConnection.requestResources(resourcesRequest).await().toProto()
+                )
             }
 
             timelineManager?.apply {
@@ -189,17 +191,19 @@
         }
     }
 
-    private fun updateContents(layout: LayoutElementBuilders.Layout) {
+    private fun updateContents(layout: androidx.wear.tiles.LayoutElementBuilders.Layout) {
         parentView.removeAllViews()
 
         val renderer = TileRenderer(
             context,
-            layout,
-            tileResources!!,
             ContextCompat.getMainExecutor(context),
             { state -> coroutineScope.launch { requestTile(state) } }
         )
-        renderer.inflate(parentView)?.apply {
+        renderer.inflate(
+            LayoutElementBuilders.Layout.fromProto(layout.toProto()),
+            tileResources!!,
+            parentView
+        )?.apply {
             (layoutParams as FrameLayout.LayoutParams).gravity = Gravity.CENTER
         }
     }
diff --git a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/renderer/TileRenderer.java b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/renderer/TileRenderer.java
index 0cc77dc..dec1ce9 100644
--- a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/renderer/TileRenderer.java
+++ b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/renderer/TileRenderer.java
@@ -26,13 +26,12 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.StyleRes;
 import androidx.wear.protolayout.LayoutElementBuilders;
+import androidx.wear.protolayout.ResourceBuilders;
+import androidx.wear.protolayout.StateBuilders;
 import androidx.wear.protolayout.expression.pipeline.ObservableStateStore;
 import androidx.wear.protolayout.proto.LayoutElementProto;
 import androidx.wear.protolayout.proto.ResourceProto;
-import androidx.wear.protolayout.proto.StateProto;
 import androidx.wear.protolayout.renderer.impl.ProtoLayoutViewInstance;
-import androidx.wear.tiles.ResourceBuilders;
-import androidx.wear.tiles.StateBuilders;
 import androidx.wear.tiles.TileService;
 
 import com.google.common.collect.ImmutableMap;
@@ -41,6 +40,7 @@
 
 import java.util.concurrent.Executor;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Consumer;
 
 /**
  * Renderer for Wear Tiles.
@@ -51,7 +51,11 @@
     /**
      * Listener for clicks on Clickable objects that have an Action to (re)load the contents of a
      * tile.
+     *
+     * @deprecated Use {@link Consumer<StateBuilders.State>} with {@link #TileRenderer(Context,
+     *     Executor, Consumer)}.
      */
+    @Deprecated
     public interface LoadActionListener {
 
         /**
@@ -59,12 +63,12 @@
          *
          * @param nextState The state that the next tile should be in.
          */
-        void onClick(@NonNull StateBuilders.State nextState);
+        void onClick(@NonNull androidx.wear.tiles.StateBuilders.State nextState);
     }
 
     @NonNull private final ProtoLayoutViewInstance mInstance;
-    @NonNull private final LayoutElementProto.Layout mLayout;
-    @NonNull private final ResourceProto.Resources mResources;
+    @Nullable private final LayoutElementProto.Layout mLayout;
+    @Nullable private final ResourceProto.Resources mResources;
     @NonNull private final ListeningExecutorService mUiExecutor;
 
     /**
@@ -73,8 +77,13 @@
      * @param uiContext A {@link Context} suitable for interacting with the UI.
      * @param layout The portion of the Tile to render.
      * @param resources The resources for the Tile.
+     * @param loadActionExecutor Executor for {@code loadActionListener}.
      * @param loadActionListener Listener for clicks that will cause the contents to be reloaded.
+     * @deprecated Use {@link #TileRenderer(Context, Executor, Consumer)} which accepts Layout and
+     *     Resources in {@link #inflate(LayoutElementBuilders.Layout, ResourceBuilders.Resources,
+     *     ViewGroup)} method.
      */
+    @Deprecated
     public TileRenderer(
             @NonNull Context uiContext,
             @NonNull androidx.wear.tiles.LayoutElementBuilders.Layout layout,
@@ -83,11 +92,10 @@
             @NonNull LoadActionListener loadActionListener) {
         this(
                 uiContext,
-                layout,
-                /* tilesTheme= */ 0,
-                resources,
                 loadActionExecutor,
-                loadActionListener);
+                toStateConsumer(loadActionListener),
+                layout.toProto(),
+                resources.toProto());
     }
 
     /**
@@ -98,8 +106,13 @@
      * @param tilesTheme The theme to use for this Tile instance. This can be used to customise
      *     things like the default font family. Pass 0 to use the default theme.
      * @param resources The resources for the Tile.
+     * @param loadActionExecutor Executor for {@code loadActionListener}.
      * @param loadActionListener Listener for clicks that will cause the contents to be reloaded.
+     * @deprecated Use {@link #TileRenderer(Context, Executor, Consumer)} which accepts Layout and
+     *     Resources in {@link #inflate(LayoutElementBuilders.Layout, ResourceBuilders.Resources,
+     *     ViewGroup)} method.
      */
+    @Deprecated
     public TileRenderer(
             @NonNull Context uiContext,
             @NonNull androidx.wear.tiles.LayoutElementBuilders.Layout layout,
@@ -107,16 +120,51 @@
             @NonNull androidx.wear.tiles.ResourceBuilders.Resources resources,
             @NonNull Executor loadActionExecutor,
             @NonNull LoadActionListener loadActionListener) {
-        this.mLayout = fromTileLayout(layout);
-        this.mResources = fromTileResources(resources);
+        // TODO(b/272527869): Enable setting theme.
+        this(
+                uiContext,
+                loadActionExecutor,
+                toStateConsumer(loadActionListener),
+                layout.toProto(),
+                resources.toProto());
+    }
+
+    /**
+     * @param uiContext A {@link Context} suitable for interacting with the UI.
+     * @param loadActionExecutor Executor for {@code loadActionListener}.
+     * @param loadActionListener Listener for clicks that will cause the contents to be reloaded.
+     */
+    public TileRenderer(
+            @NonNull Context uiContext,
+            @NonNull Executor loadActionExecutor,
+            @NonNull Consumer<StateBuilders.State> loadActionListener) {
+        this(
+                uiContext,
+                loadActionExecutor,
+                loadActionListener,
+                /* layout= */ null,
+                /* resources= */ null);
+    }
+
+    private TileRenderer(
+            @NonNull Context uiContext,
+            @NonNull Executor loadActionExecutor,
+            @NonNull Consumer<StateBuilders.State> loadActionListener,
+            @Nullable LayoutElementProto.Layout layout,
+            @Nullable ResourceProto.Resources resources) {
+        this.mLayout = layout;
+        this.mResources = resources;
         this.mUiExecutor = MoreExecutors.newDirectExecutorService();
         ProtoLayoutViewInstance.LoadActionListener instanceListener =
-                nextState -> loadActionExecutor.execute(
-                        () -> loadActionListener.onClick(fromProtoLayoutState(nextState)));
+                nextState ->
+                        loadActionExecutor.execute(
+                                () ->
+                                        loadActionListener.accept(
+                                                StateBuilders.State.fromProto(nextState)));
 
         ProtoLayoutViewInstance.Config.Builder config =
-                new ProtoLayoutViewInstance.Config.Builder(uiContext, mUiExecutor, mUiExecutor,
-                        TileService.EXTRA_CLICKABLE_ID)
+                new ProtoLayoutViewInstance.Config.Builder(
+                                uiContext, mUiExecutor, mUiExecutor, TileService.EXTRA_CLICKABLE_ID)
                         .setAnimationEnabled(true)
                         .setIsViewFullyVisible(true)
                         .setStateStore(new ObservableStateStore(ImmutableMap.of()))
@@ -124,35 +172,61 @@
         this.mInstance = new ProtoLayoutViewInstance(config.build());
     }
 
-    @NonNull private ResourceProto.Resources fromTileResources(
-            @NonNull androidx.wear.tiles.ResourceBuilders.Resources resources) {
-        return checkNotNull(
-                ResourceBuilders.Resources
-                        .fromByteArray(resources.toByteArray())).toProto();
-    }
-
-    @NonNull private LayoutElementProto.Layout fromTileLayout(
-            @NonNull androidx.wear.tiles.LayoutElementBuilders.Layout layout) {
-        return checkNotNull(
-                LayoutElementBuilders.Layout
-                        .fromByteArray(layout.toByteArray())).toProto();
-    }
-
-    @NonNull StateBuilders.State fromProtoLayoutState(@NonNull StateProto.State state) {
-        return StateBuilders.State.fromProto(state);
+    @NonNull
+    private static Consumer<StateBuilders.State> toStateConsumer(
+            @NonNull LoadActionListener loadActionListener) {
+        return nextState ->
+                loadActionListener.onClick(
+                        androidx.wear.tiles.StateBuilders.State.fromProto(nextState.toProto()));
     }
 
     /**
      * Inflates a Tile into {@code parent}.
      *
      * @param parent The view to attach the tile into.
-     * @return The first child that was inflated. This may be null if the proto is empty the
+     * @return The first child that was inflated. This may be null if the Layout is empty or the
+     *     top-level LayoutElement has no inner set, or the top-level LayoutElement contains an
+     *     unsupported inner type.
+     * @deprecated Use {@link #inflate(LayoutElementBuilders.Layout, ResourceBuilders.Resources,
+     *     ViewGroup)} instead. Note: This method only works with the deprecated constructors that
+     *     accept Layout and Resources.
+     */
+    @Deprecated
+    @Nullable
+    public View inflate(@NonNull ViewGroup parent) {
+        String errorMessage =
+                "This method only works with the deprecated constructors that accept Layout and"
+                    + " Resources.";
+        return inflateLayout(
+                checkNotNull(mLayout, errorMessage),
+                checkNotNull(mResources, errorMessage),
+                parent);
+    }
+
+    /**
+     * Inflates a Tile into {@code parent}.
+     *
+     * @param layout The portion of the Tile to render.
+     * @param resources The resources for the Tile.
+     * @param parent The view to attach the tile into.
+     * @return The first child that was inflated. This may be null if the Layout is empty or the
      *     top-level LayoutElement has no inner set, or the top-level LayoutElement contains an
      *     unsupported inner type.
      */
     @Nullable
-    public View inflate(@NonNull ViewGroup parent) {
-        mInstance.renderAndAttach(mLayout, mResources, parent);
+    public View inflate(
+            @NonNull LayoutElementBuilders.Layout layout,
+            @NonNull ResourceBuilders.Resources resources,
+            @NonNull ViewGroup parent) {
+        return inflateLayout(layout.toProto(), resources.toProto(), parent);
+    }
+
+    @Nullable
+    private View inflateLayout(
+            @NonNull LayoutElementProto.Layout layout,
+            @NonNull ResourceProto.Resources resources,
+            @NonNull ViewGroup parent) {
+        mInstance.renderAndAttach(layout, resources, parent);
         boolean finished;
         try {
             mUiExecutor.shutdown();
diff --git a/wear/tiles/tiles-tooling/build.gradle b/wear/tiles/tiles-tooling/build.gradle
index 90cf6f0..85252f5 100644
--- a/wear/tiles/tiles-tooling/build.gradle
+++ b/wear/tiles/tiles-tooling/build.gradle
@@ -8,6 +8,7 @@
 }
 
 dependencies {
+    implementation(project(":wear:protolayout:protolayout-proto"))
     implementation(project(":wear:tiles:tiles"))
     implementation(project(":wear:tiles:tiles-renderer"))
 
diff --git a/wear/tiles/tiles-tooling/src/main/java/androidx/wear/tiles/tooling/TileServiceViewAdapter.kt b/wear/tiles/tiles-tooling/src/main/java/androidx/wear/tiles/tooling/TileServiceViewAdapter.kt
index 9ec2000..20202d9 100644
--- a/wear/tiles/tiles-tooling/src/main/java/androidx/wear/tiles/tooling/TileServiceViewAdapter.kt
+++ b/wear/tiles/tiles-tooling/src/main/java/androidx/wear/tiles/tooling/TileServiceViewAdapter.kt
@@ -22,10 +22,10 @@
 import android.view.Gravity
 import android.widget.FrameLayout
 import androidx.core.content.ContextCompat
+import androidx.wear.protolayout.LayoutElementBuilders
+import androidx.wear.protolayout.ResourceBuilders
 import androidx.wear.tiles.DeviceParametersBuilders
-import androidx.wear.tiles.LayoutElementBuilders
 import androidx.wear.tiles.RequestBuilders
-import androidx.wear.tiles.ResourceBuilders
 import androidx.wear.tiles.StateBuilders
 import androidx.wear.tiles.TileBuilders
 import androidx.wear.tiles.TileService
@@ -118,18 +118,19 @@
                 .findMethod("onResourcesRequest", RequestBuilders.ResourcesRequest::class.java)
                 .apply { isAccessible = true }
         val resources =
-            (onResourcesRequestMethod.invoke(tileService, resourceRequest) as
-                ListenableFuture<ResourceBuilders.Resources>).get(1, TimeUnit.SECONDS)
+            ResourceBuilders.Resources.fromProto(
+                (onResourcesRequestMethod.invoke(tileService, resourceRequest) as
+                    ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources>)
+                    .get(1, TimeUnit.SECONDS).toProto()
+            )
 
         val layout = tile.timeline?.getCurrentLayout()
         if (layout != null) {
             val renderer = TileRenderer(
                 context,
-                layout,
-                resources,
                 ContextCompat.getMainExecutor(context)
             ) { }
-            renderer.inflate(this)?.apply {
+            renderer.inflate(layout, resources, this)?.apply {
                 (layoutParams as FrameLayout.LayoutParams).gravity = Gravity.CENTER
             }
         }
@@ -141,7 +142,9 @@
     return this?.let {
         val cache = TilesTimelineCache(it)
         cache.findTimelineEntryForTime(now) ?: cache.findClosestTimelineEntry(now)
-    }?.layout
+    }?.layout?.let {
+        LayoutElementBuilders.Layout.fromProto(it.toProto())
+    }
 }
 
 /**
