fix build errors
diff --git a/src/AndroidDesktop.cpp b/src/AndroidDesktop.cpp
index b40b1b4..190ca86 100644
--- a/src/AndroidDesktop.cpp
+++ b/src/AndroidDesktop.cpp
@@ -38,8 +38,6 @@
 }
 
 void AndroidDesktop::start(rfb::VNCServer* vs) {
-    mMainDpy = SurfaceComposerClient::getBuiltInDisplay(ISurfaceComposer::eDisplayIdMain);
-
     mServer = vs;
 
     mPixels = new AndroidPixelBuffer();
@@ -157,7 +155,13 @@
 
 // refresh the display dimensions
 status_t AndroidDesktop::updateDisplayInfo() {
-    status_t err = SurfaceComposerClient::getDisplayInfo(mMainDpy, &mDisplayInfo);
+    const auto displayToken = SurfaceComposerClient::getInternalDisplayToken();
+    if (displayToken == nullptr) {
+        ALOGE("Failed to get display token\n");
+        return -1;
+    }
+
+    status_t err = SurfaceComposerClient::getDisplayInfo(displayToken, &mDisplayInfo);
     if (err != NO_ERROR) {
         ALOGE("Failed to get display characteristics\n");
         return err;
diff --git a/src/AndroidDesktop.h b/src/AndroidDesktop.h
index f9f82de..1ceecc2 100644
--- a/src/AndroidDesktop.h
+++ b/src/AndroidDesktop.h
@@ -78,7 +78,6 @@
     sp<VirtualDisplay> mVirtualDisplay;
 
     // Primary display
-    sp<IBinder> mMainDpy;
     DisplayInfo mDisplayInfo;
 
     // Virtual input device
diff --git a/src/VirtualDisplay.cpp b/src/VirtualDisplay.cpp
index 8000f8f..7692dc4 100644
--- a/src/VirtualDisplay.cpp
+++ b/src/VirtualDisplay.cpp
@@ -52,12 +52,17 @@
 
     mDpy = SurfaceComposerClient::createDisplay(String8("VNC-VirtualDisplay"), false /*secure*/);
 
-    SurfaceComposerClient::openGlobalTransaction();
-    SurfaceComposerClient::setDisplaySurface(mDpy, mProducer);
+    const auto displayToken = SurfaceComposerClient::getInternalDisplayToken();
+    if (displayToken == nullptr) {
+        ALOGE("Failed to get display token\n");
+        return;
+    }
 
-    SurfaceComposerClient::setDisplayProjection(mDpy, 0, mSourceRect, displayRect);
-    SurfaceComposerClient::setDisplayLayerStack(mDpy, 0);  // default stack
-    SurfaceComposerClient::closeGlobalTransaction();
+    SurfaceComposerClient::Transaction t;
+    t.setDisplaySurface(displayToken, mProducer);
+    t.setDisplayProjection(displayToken, 0, mSourceRect, displayRect);
+    t.setDisplayLayerStack(displayToken, 0);  // default stack
+    t.apply();
 
     ALOGV("Virtual display (%ux%u [viewport=%ux%u] created", width, height, displayRect.getWidth(),
           displayRect.getHeight());