VmTerminalApp: Merge with LinuxInstaller
This CL includes following changes:
- Move linux_vm_setup
- Move LinuxInstaller's MainActivity as InstallerActivity
- InstallerActivity finishes self when done
- Remove LinuxInstaller and clean up relevant codes
Bug: 369746567
Test: manually
Change-Id: I2c97e07b00e110aebe09db2760b26257ace4f7d9
diff --git a/android/LinuxInstaller/Android.bp b/android/LinuxInstaller/Android.bp
deleted file mode 100644
index f7994ef..0000000
--- a/android/LinuxInstaller/Android.bp
+++ /dev/null
@@ -1,62 +0,0 @@
-package {
- default_applicable_licenses: ["Android-Apache-2.0"],
-}
-
-java_defaults {
- name: "LinuxVmPayloadInstaller",
- init_rc: [":linux_vm_setup.rc"],
- required: ["linux_vm_setup"],
- system_ext_specific: true,
- platform_apis: true,
- privileged: true,
-}
-
-android_app {
- name: "LinuxInstallerApp",
- srcs: ["java/**/*.java"],
- resource_dirs: ["res"],
- asset_dirs: ["assets"],
- manifest: "AndroidManifest.xml",
- defaults: ["LinuxVmPayloadInstaller"],
- overrides: ["LinuxInstallerAppStub"],
- required: [
- "privapp-permissions-linuxinstaller.xml",
- ],
- certificate: ":com.android.virtualization.linuxinstaller_certificate",
-}
-
-android_app {
- name: "LinuxInstallerAppStub",
- srcs: ["java/**/*.java"],
- resource_dirs: ["res"],
- manifest: "AndroidManifest_stub.xml",
- defaults: ["LinuxVmPayloadInstaller"],
- required: [
- "privapp-permissions-linuxinstaller.xml",
- ],
- certificate: ":com.android.virtualization.linuxinstaller_certificate",
-}
-
-prebuilt_etc {
- name: "privapp-permissions-linuxinstaller.xml",
- src: "privapp-permissions-linuxinstaller.xml",
- sub_dir: "permissions",
- system_ext_specific: true,
-}
-
-android_app_certificate {
- name: "com.android.virtualization.linuxinstaller_certificate",
- certificate: "com_android_virtualization_linuxinstaller",
-}
-
-filegroup {
- name: "linux_vm_setup.rc",
- srcs: ["linux_vm_setup.rc"],
-}
-
-sh_binary {
- name: "linux_vm_setup",
- src: "linux_vm_setup.sh",
- system_ext_specific: true,
- host_supported: false,
-}
diff --git a/android/LinuxInstaller/AndroidManifest.xml b/android/LinuxInstaller/AndroidManifest.xml
deleted file mode 100644
index e5653f6..0000000
--- a/android/LinuxInstaller/AndroidManifest.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.virtualization.linuxinstaller"
- android:versionCode="2100000000" >
- <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
- <uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" />
- <queries>
- <intent>
- <action android:name="android.virtualization.VM_TERMINAL" />
- </intent>
- </queries>
- <application
- android:label="LinuxInstaller">
- <activity android:name=".MainActivity"
- android:exported="true">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
-
-</manifest>
diff --git a/android/LinuxInstaller/AndroidManifest_stub.xml b/android/LinuxInstaller/AndroidManifest_stub.xml
deleted file mode 100644
index 49365ea..0000000
--- a/android/LinuxInstaller/AndroidManifest_stub.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.virtualization.linuxinstaller" >
- <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
- <uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" />
- <queries>
- <intent>
- <action android:name="android.virtualization.VM_TERMINAL" />
- </intent>
- </queries>
- <application
- android:label="LinuxInstaller">
- <activity android:name=".MainActivity"
- android:exported="true">
- </activity>
- </application>
-
-</manifest>
diff --git a/android/LinuxInstaller/com_android_virtualization_linuxinstaller.pk8 b/android/LinuxInstaller/com_android_virtualization_linuxinstaller.pk8
deleted file mode 100644
index 3f74303..0000000
--- a/android/LinuxInstaller/com_android_virtualization_linuxinstaller.pk8
+++ /dev/null
Binary files differ
diff --git a/android/LinuxInstaller/com_android_virtualization_linuxinstaller.x509.pem b/android/LinuxInstaller/com_android_virtualization_linuxinstaller.x509.pem
deleted file mode 100644
index 3ca64b7..0000000
--- a/android/LinuxInstaller/com_android_virtualization_linuxinstaller.x509.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEETCCAvmgAwIBAgIUfBxyELS+ri3QErq8DXHu+47xx4EwDQYJKoZIhvcNAQEL
-BQAwgZYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQH
-DA1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKDAtHb29nbGUgSW5jLjEQMA4GA1UECwwH
-QW5kcm9pZDEyMDAGA1UEAwwpY29tX2FuZHJvaWRfdmlydHVhbGl6YXRpb25fbGlu
-dXhpbnN0YWxsZXIwIBcNMjQwODMwMTIyNjU2WhgPMjA1MjAxMTYxMjI2NTZaMIGW
-MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91
-bnRhaW4gVmlldzEUMBIGA1UECgwLR29vZ2xlIEluYy4xEDAOBgNVBAsMB0FuZHJv
-aWQxMjAwBgNVBAMMKWNvbV9hbmRyb2lkX3ZpcnR1YWxpemF0aW9uX2xpbnV4aW5z
-dGFsbGVyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8V/rH9ju6Wce
-1BdWuxfWaLmZJHGShXeDO6MB86Wrm10m26j9PFzd8/8FRKsZaujZphwNZsqBsdlt
-pWeNKts9T9luZn19Ci4E8A2EtgSxmfI8Fjwj/OJHHO0hG5+JcwIlUnmFQPcGtu/r
-EL3i7SfcF2ok+IC6aKYohnSbo+YkjyCSwb39i6POe6v6cPIZJtmOnecThS+fYCYR
-2yoMSSr3Bf8ayySrG0pJp7xZ1I5NixK6hUFZhQRLusyiv/KYTpAElMd+n1YJEYbf
-pW30DYAu+31S0hx8JXncFmI0uG3Zxx+LgNQwY8OPV6NPFfVwMPluZR6ep0tZ6q7e
-KIV2w5uC7QIDAQABo1MwUTAdBgNVHQ4EFgQU6FBYv7mW+9DR9q0c9uS4NNdX4Acw
-HwYDVR0jBBgwFoAU6FBYv7mW+9DR9q0c9uS4NNdX4AcwDwYDVR0TAQH/BAUwAwEB
-/zANBgkqhkiG9w0BAQsFAAOCAQEAj3bvUpwKjvpCggXzjMNkn7fAaQ0s1BubnkFe
-ge4zwz4tObP3OGRcxt5V9R5EZ7UY6bPcybA/rfg9FCzjcUQOBjmuepcQpbNHFW2I
-lasFa42UHkHSUFzeg2n9UC5iO3B+sclOr4EPaEE4HbG4B2vj++BYMW3C7PDyHc7R
-fq5ZsEEWcYUa8qZCO46I8AbMZ8iv1HpR4mZeQMkSxhD3uVHDQW+VqDTpzne/YBkJ
-yNfjpgFVZ/Y1E6BvvjzWZpBfj668fo7P3DekWHbvPPr/DiZ7OA6PCmAH1FBsi2c+
-xPgb9clDc2Zjb2Cd9lAoZdeB14zDOh6ZCF1c/i+qYt5tA9t+GA==
------END CERTIFICATE-----
diff --git a/android/LinuxInstaller/privapp-permissions-linuxinstaller.xml b/android/LinuxInstaller/privapp-permissions-linuxinstaller.xml
deleted file mode 100644
index e46ec97..0000000
--- a/android/LinuxInstaller/privapp-permissions-linuxinstaller.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<permissions>
- <privapp-permissions package="com.android.virtualization.linuxinstaller">
- <permission name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
- </privapp-permissions>
-</permissions>
\ No newline at end of file
diff --git a/android/LinuxInstaller/.gitignore b/android/TerminalApp/.gitignore
similarity index 100%
rename from android/LinuxInstaller/.gitignore
rename to android/TerminalApp/.gitignore
diff --git a/android/TerminalApp/Android.bp b/android/TerminalApp/Android.bp
index 932ca76..e5e8b0a 100644
--- a/android/TerminalApp/Android.bp
+++ b/android/TerminalApp/Android.bp
@@ -26,3 +26,15 @@
"com.android.virt",
],
}
+
+filegroup {
+ name: "linux_vm_setup.rc",
+ srcs: ["linux_vm_setup.rc"],
+}
+
+sh_binary {
+ name: "linux_vm_setup",
+ src: "linux_vm_setup.sh",
+ init_rc: [":linux_vm_setup.rc"],
+ host_supported: false,
+}
diff --git a/android/TerminalApp/AndroidManifest.xml b/android/TerminalApp/AndroidManifest.xml
index bd1395a..105e454 100644
--- a/android/TerminalApp/AndroidManifest.xml
+++ b/android/TerminalApp/AndroidManifest.xml
@@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
package="com.android.virtualization.terminal">
+ <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_VIRTUAL_MACHINE" />
<uses-permission android:name="android.permission.USE_CUSTOM_VIRTUAL_MACHINE" />
<uses-permission android:name="android.permission.INTERNET" />
@@ -47,6 +48,12 @@
android:name="${applicationId}.SplitInitializer"
android:value="androidx.startup" />
</provider>
+ <activity android:name=".InstallerActivity"
+ android:exported="false">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ </intent-filter>
+ </activity>
<service
android:name="com.android.virtualization.vmlauncher.VmLauncherService"
diff --git a/android/LinuxInstaller/assets/.gitkeep b/android/TerminalApp/assets/.gitkeep
similarity index 100%
rename from android/LinuxInstaller/assets/.gitkeep
rename to android/TerminalApp/assets/.gitkeep
diff --git a/android/LinuxInstaller/generate_assets.sh b/android/TerminalApp/generate_assets.sh
similarity index 86%
rename from android/LinuxInstaller/generate_assets.sh
rename to android/TerminalApp/generate_assets.sh
index 8e70cb0..ff7444e 100755
--- a/android/LinuxInstaller/generate_assets.sh
+++ b/android/TerminalApp/generate_assets.sh
@@ -3,6 +3,7 @@
if [ "$#" -ne 1 ]; then
echo "$0 <image.raw path>"
+ echo "image.raw can be built with packages/modules/Virtualization/build/debian/build.sh"
exit 1
fi
pushd $(dirname $0) > /dev/null
diff --git a/android/LinuxInstaller/java/com/android/virtualization/linuxinstaller/MainActivity.java b/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.java
similarity index 93%
rename from android/LinuxInstaller/java/com/android/virtualization/linuxinstaller/MainActivity.java
rename to android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.java
index 9b0ec97..1c739e2 100644
--- a/android/LinuxInstaller/java/com/android/virtualization/linuxinstaller/MainActivity.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2024 The Android Open Source Project
+ * Copyright 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.virtualization.linuxinstaller;
+package com.android.virtualization.terminal;
import android.annotation.WorkerThread;
import android.app.Activity;
@@ -34,13 +34,11 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
-import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-public class MainActivity extends Activity {
+public class InstallerActivity extends Activity {
private static final String TAG = "LinuxInstaller";
- private static final String ACTION_VM_TERMINAL = "android.virtualization.VM_TERMINAL";
private static final Path DEST_DIR =
Path.of(Environment.getExternalStorageDirectory().getPath(), "linux");
@@ -54,7 +52,9 @@
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
+ setResult(RESULT_CANCELED);
+
+ setContentView(R.layout.activity_installer);
executorService.execute(this::installLinuxImage);
}
@@ -62,6 +62,7 @@
private void installLinuxImage() {
if (!hasLocalAssets()) {
updateStatus("No local assets");
+ setResult(RESULT_CANCELED, null);
return;
}
try {
@@ -71,6 +72,8 @@
return;
}
updateStatus("Done.");
+ setResult(RESULT_OK);
+ finish();
}
@WorkerThread
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
index 3aca929..bd35f51 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
@@ -66,6 +66,8 @@
private static final String TAG = "VmTerminalApp";
private static final String VM_ADDR = "192.168.0.2";
private static final int TTYD_PORT = 7681;
+ private static final int REQUEST_CODE_INSTALLER = 0x33;
+
private X509Certificate[] mCertificates;
private PrivateKey mPrivateKey;
private WebView mWebView;
@@ -75,6 +77,7 @@
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ checkForUpdate();
try {
// No resize for now.
long newSizeInBytes = 0;
@@ -85,10 +88,6 @@
.show();
}
- Toast.makeText(this, R.string.vm_creation_message, Toast.LENGTH_SHORT).show();
- android.os.Trace.beginAsyncSection("executeTerminal", 0);
- VmLauncherServices.startVmLauncherService(this, this);
-
setContentView(R.layout.activity_headless);
MaterialToolbar toolbar = (MaterialToolbar) findViewById(R.id.toolbar);
@@ -369,4 +368,28 @@
public void onTouchExplorationStateChanged(boolean enabled) {
connectToTerminalService();
}
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+
+ if (requestCode == REQUEST_CODE_INSTALLER) {
+ if (resultCode != RESULT_OK) {
+ Log.e(TAG, "Failed to start VM. Installer returned error.");
+ finish();
+ }
+ startVm();
+ }
+ }
+
+ private void checkForUpdate() {
+ Intent intent = new Intent(this, InstallerActivity.class);
+ startActivityForResult(intent, REQUEST_CODE_INSTALLER);
+ }
+
+ private void startVm() {
+ Toast.makeText(this, R.string.vm_creation_message, Toast.LENGTH_SHORT).show();
+ android.os.Trace.beginAsyncSection("executeTerminal", 0);
+ VmLauncherServices.startVmLauncherService(this, this);
+ }
}
diff --git a/android/LinuxInstaller/linux_vm_setup.rc b/android/TerminalApp/linux_vm_setup.rc
similarity index 92%
rename from android/LinuxInstaller/linux_vm_setup.rc
rename to android/TerminalApp/linux_vm_setup.rc
index 9264d96..ac91532 100644
--- a/android/LinuxInstaller/linux_vm_setup.rc
+++ b/android/TerminalApp/linux_vm_setup.rc
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-service linux_vm_setup /system_ext/bin/linux_vm_setup
+service linux_vm_setup /system/bin/linux_vm_setup
user shell
group shell media_rw
disabled
diff --git a/android/LinuxInstaller/linux_vm_setup.sh b/android/TerminalApp/linux_vm_setup.sh
similarity index 100%
rename from android/LinuxInstaller/linux_vm_setup.sh
rename to android/TerminalApp/linux_vm_setup.sh
diff --git a/android/LinuxInstaller/res/layout/activity_main.xml b/android/TerminalApp/res/layout/activity_installer.xml
similarity index 100%
rename from android/LinuxInstaller/res/layout/activity_main.xml
rename to android/TerminalApp/res/layout/activity_installer.xml
diff --git a/android/LinuxInstaller/vm_config.json b/android/TerminalApp/vm_config.json
similarity index 100%
rename from android/LinuxInstaller/vm_config.json
rename to android/TerminalApp/vm_config.json