From f85c8ca8a81eb9ad42f6db18f9127b0306ed4afe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Kr=C3=BCger?= Date: Thu, 20 Mar 2025 16:56:11 +0100 Subject: [PATCH 1/2] ImageArchive: allow sdcard images even when os is not debuggable This allows custom images on production gos builds, to allow the user to run a different os of their choosing Users can place images into /storage/emulated/0/linux/images.tar.gz --- .../com/android/virtualization/terminal/ImageArchive.kt | 6 +++--- .../android/virtualization/terminal/InstallerActivity.kt | 2 +- .../com/android/virtualization/terminal/InstallerService.kt | 5 ----- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/ImageArchive.kt b/android/TerminalApp/java/com/android/virtualization/terminal/ImageArchive.kt index 9ff5024c3..e3b2873cb 100644 --- a/android/TerminalApp/java/com/android/virtualization/terminal/ImageArchive.kt +++ b/android/TerminalApp/java/com/android/virtualization/terminal/ImageArchive.kt @@ -175,12 +175,12 @@ internal class ImageArchive { } /** - * Creates ImageArchive from either SdCard or Internet. SdCard is used only when the build - * is debuggable and the file actually exists. + * Creates ImageArchive from either SdCard or Internet. SdCard is used only when the + * file actually exists. */ fun getDefault(): ImageArchive { val archive = fromSdCard() - return if (Build.isDebuggable() && archive.exists()) { + return if (archive.exists()) { archive } else { fromInternet() diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.kt index e1949f0d8..da731e32b 100644 --- a/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.kt +++ b/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.kt @@ -109,7 +109,7 @@ public class InstallerActivity : BaseActivity() { override fun onResume() { super.onResume() - if (autoInstall || (Build.isDebuggable() && fromSdCard().exists())) { + if (autoInstall || fromSdCard().exists()) { showSnackBar("Auto installing", Snackbar.LENGTH_LONG) requestInstall() } diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/InstallerService.kt b/android/TerminalApp/java/com/android/virtualization/terminal/InstallerService.kt index 79bb2f8ef..a2ff91057 100644 --- a/android/TerminalApp/java/com/android/virtualization/terminal/InstallerService.kt +++ b/android/TerminalApp/java/com/android/virtualization/terminal/InstallerService.kt @@ -152,11 +152,6 @@ class InstallerService : Service() { val archive = fromSdCard() val archive_path = archive.getPath() - // Installing from sdcard is preferred, but only supported only in debuggable build. - if (!Build.isDebuggable()) { - Log.i(TAG, "Non-debuggable build doesn't support installation from $archive_path") - return false - } if (!archive.exists()) { return false } From a9dba17c0d74224932146810a5921b9b1c5e39cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Kr=C3=BCger?= Date: Thu, 20 Mar 2025 20:22:37 +0100 Subject: [PATCH 2/2] InstallerActivity: Mention image can be installed from sdcard --- .../virtualization/terminal/InstallerActivity.kt | 10 ++++++++++ android/TerminalApp/res/layout/activity_installer.xml | 11 +++++++++++ android/TerminalApp/res/values/strings.xml | 2 ++ 3 files changed, 23 insertions(+) diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.kt index da731e32b..aefd7f886 100644 --- a/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.kt +++ b/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.kt @@ -64,6 +64,7 @@ public class InstallerActivity : BaseActivity() { setContentView(R.layout.activity_installer) updateSizeEstimation(ESTIMATED_IMG_SIZE_BYTES) + sdcardLocation(fromSdCard().getPath()) measureImageSizeAndUpdateDescription() waitForWifiCheckbox = findViewById(R.id.installer_wait_for_wifi_checkbox) @@ -78,6 +79,15 @@ public class InstallerActivity : BaseActivity() { } } + private fun sdcardLocation(dst: String) { + val desc = + getString(R.string.installer_sdcard_info_text_format, dst) + runOnUiThread { + val view = findViewById(R.id.installer_sdcard_info) + view.text = desc + } + } + private fun updateSizeEstimation(est: Long) { val desc = getString(R.string.installer_desc_text_format, Formatter.formatShortFileSize(this, est)) diff --git a/android/TerminalApp/res/layout/activity_installer.xml b/android/TerminalApp/res/layout/activity_installer.xml index 38b29b9b5..8a6d437f2 100644 --- a/android/TerminalApp/res/layout/activity_installer.xml +++ b/android/TerminalApp/res/layout/activity_installer.xml @@ -63,6 +63,17 @@ android:layout_marginHorizontal="32dp" android:textSize="16sp" /> + + Install Linux terminal To launch Linux terminal, you need to download roughly \u200E%1$s\u200E of data over the network.\nWould you like to proceed? + + Alternatively, if you want to provide your own custom image, you can place it under %1$s using adb or the Files app Download using Wi-Fi only