diff --git a/app/build.gradle b/app/build.gradle index 1b2f135..6f2e575 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ android { minSdk minApi targetSdk targetApi versionCode 21 - versionName "v2.9.5-3dfx-ladyfingers" + versionName "v2.9.5-3dfx-madeleine" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true } @@ -79,20 +79,20 @@ dependencies { implementation "androidx.preference:preference:1.2.1" implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" implementation "androidx.viewpager:viewpager:1.1.0" - implementation platform('com.google.firebase:firebase-bom:33.10.0') + implementation platform('com.google.firebase:firebase-bom:33.11.0') implementation 'com.google.firebase:firebase-analytics' implementation("com.google.firebase:firebase-auth") implementation("com.google.firebase:firebase-database") implementation 'com.google.firebase:firebase-storage' implementation("com.google.android.gms:play-services-auth:21.3.0") implementation("com.google.firebase:firebase-crashlytics") - implementation 'com.google.android.gms:play-services-ads:24.0.0' + implementation 'com.google.android.gms:play-services-ads:24.1.0' implementation 'com.github.bumptech.glide:glide:4.16.0' implementation 'com.google.guava:guava:33.1.0-jre' implementation 'com.google.code.gson:gson:2.11.0' implementation 'com.squareup.okhttp3:okhttp:4.12.0' implementation "androidx.window:window:1.3.0" - implementation "commons-io:commons-io:2.13.0" + implementation "commons-io:commons-io:2.16.1" implementation 'org.zeroturnaround:zt-zip:1.16' implementation 'com.airbnb.android:lottie:6.5.2' implementation 'org.apache.commons:commons-compress:1.25.0' diff --git a/app/src/main/java/android/androidVNC/ConnectionBean.java b/app/src/main/java/android/androidVNC/ConnectionBean.java index 1e6702c..0ead11d 100644 --- a/app/src/main/java/android/androidVNC/ConnectionBean.java +++ b/app/src/main/java/android/androidVNC/ConnectionBean.java @@ -26,6 +26,8 @@ public class ConnectionBean { private String userName; private long id = 0; + public static boolean pause = false; + public ConnectionBean() { setAddress(Config.defaultVNCHost); setUserName(Config.defaultVNCUsername); diff --git a/app/src/main/java/android/androidVNC/VncCanvasActivity.java b/app/src/main/java/android/androidVNC/VncCanvasActivity.java index 612eee4..3658538 100644 --- a/app/src/main/java/android/androidVNC/VncCanvasActivity.java +++ b/app/src/main/java/android/androidVNC/VncCanvasActivity.java @@ -48,6 +48,7 @@ import android.widget.Toast; import android.widget.ZoomControls; import com.antlersoft.android.bc.BCFactory; +import com.vectras.qemu.MainSettingsManager; import com.vectras.vm.R; import com.vectras.qemu.Config; import com.vectras.vm.MainActivity; @@ -59,7 +60,7 @@ import java.util.logging.Logger; import androidx.appcompat.app.AppCompatActivity; -public class VncCanvasActivity extends AppCompatActivity { +public abstract class VncCanvasActivity extends AppCompatActivity { static Display display = null; public static Activity activity; @@ -1087,7 +1088,7 @@ public class VncCanvasActivity extends AppCompatActivity { return inputHandler.onTrackballEvent(event); } - @Override + @Override public boolean onTouchEvent(MotionEvent event) { // MK if (event.getAction() == MotionEvent.ACTION_CANCEL) diff --git a/app/src/main/java/com/vectras/qemu/MainSettingsManager.java b/app/src/main/java/com/vectras/qemu/MainSettingsManager.java index 34d3830..2d16b9b 100644 --- a/app/src/main/java/com/vectras/qemu/MainSettingsManager.java +++ b/app/src/main/java/com/vectras/qemu/MainSettingsManager.java @@ -788,4 +788,16 @@ public class MainSettingsManager extends AppCompatActivity return prefs.getInt("SelectedMirror", 0); } + public static void setDontShowAgainJoinBetaUpdateChannelDialog(Context context, Boolean _boolean) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + SharedPreferences.Editor edit = prefs.edit(); + edit.putBoolean("dontShowAgainJoinBetaUpdateChannelDialog", _boolean); + edit.commit(); + } + + public static Boolean getDontShowAgainJoinBetaUpdateChannelDialog(Context context) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + return prefs.getBoolean("dontShowAgainJoinBetaUpdateChannelDialog", false); + } + } diff --git a/app/src/main/java/com/vectras/qemu/MainVNCActivity.java b/app/src/main/java/com/vectras/qemu/MainVNCActivity.java index 7e46c4b..fd39880 100644 --- a/app/src/main/java/com/vectras/qemu/MainVNCActivity.java +++ b/app/src/main/java/com/vectras/qemu/MainVNCActivity.java @@ -1,15 +1,10 @@ package com.vectras.qemu; import android.androidVNC.AbstractScaling; -import android.androidVNC.RfbProto; import android.androidVNC.VncCanvasActivity; import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatDelegate; import androidx.appcompat.widget.Toolbar; -import androidx.core.view.GravityCompat; -import androidx.core.view.MenuItemCompat; -import androidx.drawerlayout.widget.DrawerLayout; import androidx.fragment.app.FragmentTransaction; import android.annotation.SuppressLint; @@ -28,7 +23,6 @@ import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.graphics.Point; import android.graphics.drawable.ColorDrawable; -import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -39,8 +33,6 @@ import android.util.Log; import android.view.Display; import android.view.KeyEvent; import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; @@ -59,28 +51,20 @@ import android.widget.LinearLayout; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; -import android.text.TextWatcher; import com.vectras.vm.*; -import com.vectras.qemu.utils.FileUtils; import com.vectras.vm.Fragment.ControlersOptionsFragment; import com.vectras.vm.Fragment.LoggerDialogFragment; -import com.vectras.vm.MainActivity; import com.vectras.vm.R; -import com.vectras.qemu.utils.QmpClient; import com.vectras.vm.utils.UIUtils; import com.vectras.vm.widgets.JoystickView; -import com.vectras.vterm.Terminal; -import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.Objects; import java.util.Timer; import java.util.TimerTask; -import java.util.logging.Level; -import java.util.logging.Logger; import org.json.JSONObject; @@ -1442,6 +1426,7 @@ public class MainVNCActivity extends VncCanvasActivity { } private void shutdownthisvm() { + sendtextEdittext.setEnabled(false); vncCanvas.sendMetaKey1(50, 6); timerTask = new TimerTask() { @Override diff --git a/app/src/main/java/com/vectras/vm/CustomRomActivity.java b/app/src/main/java/com/vectras/vm/CustomRomActivity.java index da9ef68..98f8958 100644 --- a/app/src/main/java/com/vectras/vm/CustomRomActivity.java +++ b/app/src/main/java/com/vectras/vm/CustomRomActivity.java @@ -459,7 +459,7 @@ public class CustomRomActivity extends AppCompatActivity { public void onTextChanged(CharSequence s, int start, int before, int count) { textName.setText(Objects.requireNonNull(title.getText()).toString()); - if (!Objects.requireNonNull(icon.getText()).toString().isEmpty()) + if (!thumbnailPath.isEmpty()) return; VectrasApp.setIconWithName(ivIcon, title.getText().toString()); diff --git a/app/src/main/java/com/vectras/vm/MainActivity.java b/app/src/main/java/com/vectras/vm/MainActivity.java index 0099640..3dc2932 100644 --- a/app/src/main/java/com/vectras/vm/MainActivity.java +++ b/app/src/main/java/com/vectras/vm/MainActivity.java @@ -747,6 +747,28 @@ public class MainActivity extends AppCompatActivity { String versionName = pinfo.versionName; String versionNameonUpdate; + if (obj.getString("versionNameBetas").equals(versionName) && !MainSettingsManager.getcheckforupdatesfromthebetachannel(activity) && !MainSettingsManager.getDontShowAgainJoinBetaUpdateChannelDialog(activity)) { + AlertDialog _alertDialog = new AlertDialog.Builder(activity, R.style.MainDialogTheme).create(); + _alertDialog.setTitle(getResources().getString(R.string.you_are_using_beta_version)); + _alertDialog.setMessage(getResources().getString(R.string.switch_to_check_for_updates_on_the_Beta_channel_now)); + _alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, getResources().getString(R.string.ok), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + MainSettingsManager.setcheckforupdatesfromthebetachannel(activity, true); + } + }); + _alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + _alertDialog.dismiss(); + } + }); + _alertDialog.setButton(DialogInterface.BUTTON_NEUTRAL, getResources().getString(R.string.dont_show_again), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + MainSettingsManager.setDontShowAgainJoinBetaUpdateChannelDialog(activity, true); + } + }); + _alertDialog.show(); + } + if (MainSettingsManager.getcheckforupdatesfromthebetachannel(activity)) { versionNameonUpdate = obj.getString("versionNameBeta"); diff --git a/app/src/main/java/com/vectras/vm/Minitools.java b/app/src/main/java/com/vectras/vm/Minitools.java index 3d05010..e2bff2f 100644 --- a/app/src/main/java/com/vectras/vm/Minitools.java +++ b/app/src/main/java/com/vectras/vm/Minitools.java @@ -4,12 +4,14 @@ import static android.content.Intent.ACTION_OPEN_DOCUMENT; import static android.content.Intent.ACTION_VIEW; import static android.view.View.GONE; +import android.app.ProgressDialog; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; +import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.os.Environment; @@ -33,9 +35,16 @@ import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; +import com.termux.app.TermuxService; import com.vectras.qemu.MainSettingsManager; +import java.io.BufferedReader; import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; import java.util.ArrayList; import java.util.HashMap; @@ -310,4 +319,30 @@ public class Minitools extends AppCompatActivity { return _view; } } + + public void extractLoaderApk() { + String apkLoaderAssetPath = "bootstrap/loader.apk"; + String apkLoaderextractedFilePath = TermuxService.PREFIX_PATH + "/libexec/termux-x11/loader.apk"; + + VectrasApp.deleteDirectory(apkLoaderextractedFilePath); + if (copyAssetToFile(apkLoaderAssetPath, apkLoaderextractedFilePath)) { + VectrasApp.copyAFile(TermuxService.PREFIX_PATH + "/libexec/termux-x11/loader.apk", AppConfig.maindirpath); + } + } + + private boolean copyAssetToFile(String assetPath, String outputPath) { + try (InputStream in = getAssets().open(assetPath); + OutputStream out = new FileOutputStream(outputPath)) { + byte[] buffer = new byte[1024]; + int read; + while ((read = in.read(buffer)) != -1) { + out.write(buffer, 0, read); + } + out.flush(); + return true; + } catch (IOException e) { + e.printStackTrace(); + return false; + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/vectras/vm/SetupQemuActivity.java b/app/src/main/java/com/vectras/vm/SetupQemuActivity.java index 09b8823..39dfccd 100644 --- a/app/src/main/java/com/vectras/vm/SetupQemuActivity.java +++ b/app/src/main/java/com/vectras/vm/SetupQemuActivity.java @@ -217,7 +217,9 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick String filesDir = getFilesDir().getAbsolutePath(); String abi = getDeviceAbi(); String assetPath = "bootstrap/" + abi + ".tar"; + //String apkLoaderAssetPath = "bootstrap/loader.apk"; String extractedFilePath = filesDir + "/" + abi + ".tar"; + //String apkLoaderextractedFilePath = TermuxService.PREFIX_PATH + "/libexec/termux-x11/loader.apk"; ProgressDialog progressDialog = new ProgressDialog(this); progressDialog.setMessage("Extracting data..."); @@ -270,6 +272,10 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick if (process != null) { process.destroy(); } + //VectrasApp.deleteDirectory(apkLoaderextractedFilePath); + //if (!copyAssetToFile(apkLoaderAssetPath, apkLoaderextractedFilePath)) { + //errorMessage = "Failed to copy loader.apk file."; + //} } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2f693d5..2813ed5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,7 +3,7 @@ Vectras VM - v2.9.5 (3dfx - Ladyfingers) + v2.9.5 (3dfx - Madeleine) Stable Home Logger @@ -411,7 +411,9 @@ Check from the Beta channel instead of the Stable channel Update New version is now available - + OK + You are using Beta version + Switch to check for updates on the Beta channel now. Vterm diff --git a/build.gradle b/build.gradle index 8b2ceec..e670f95 100644 --- a/build.gradle +++ b/build.gradle @@ -8,8 +8,8 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:8.9.0' // Android Gradle plugin // Add other classpaths like Google Services and Firebase Crashlytics if needed here. - classpath 'com.google.gms:google-services:4.4.0' // assuming you need it for your project - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9' + classpath 'com.google.gms:google-services:4.4.2' // assuming you need it for your project + classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.3' // assuming you need it for project } } diff --git a/shell-loader2/.gitignore b/shell-loader2/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/shell-loader2/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/shell-loader2/build.gradle b/shell-loader2/build.gradle new file mode 100644 index 0000000..fb3a1cb --- /dev/null +++ b/shell-loader2/build.gradle @@ -0,0 +1,32 @@ +//file:noinspection UnnecessaryQualifiedReference, GrDeprecatedAPIUsage + +// Detect android studio sync and disable generating run/debug configuration for shell-loader +apply plugin: 'com.android.application' + +android.namespace 'com.vectras.vm' +android.defaultConfig.minSdkVersion 21 +android.compileSdkVersion 28 +android.buildTypes.debug.signingConfig null +android.buildFeatures.buildConfig true +android.compileOptions.sourceCompatibility JavaVersion.VERSION_1_8 +android.compileOptions.targetCompatibility JavaVersion.VERSION_1_8 +dependencies.compileOnly project(':shell-loader:stub') + +if (!gradle.startParameter.taskNames.isEmpty()) + android.applicationVariants.configureEach { outputs.configureEach { outputFileName = "shell-loader-debug.apk" } } + +def signingConfig = project(':app').android.signingConfigs.debug +def keyStore = java.security.KeyStore.getInstance(java.security.KeyStore.getDefaultType()) +keyStore.load(new FileInputStream(signingConfig.storeFile), signingConfig.keyPassword.toCharArray()) + +android.defaultConfig.buildConfigField "String", "APPLICATION_ID", "\"com.termux.x11\"" +android.defaultConfig.buildConfigField "String", "logTag", "\"Termux:X11 loader\"" +android.defaultConfig.buildConfigField "int", "SIGNATURE", String.valueOf(Arrays.hashCode(keyStore.getCertificate(signingConfig.keyAlias).getEncoded())) +android.defaultConfig.buildConfigField "String", "CLASS_ID", "\"com.termux.x11.CmdEntryPoint\"" +android.defaultConfig.buildConfigField "String", "packageNotInstalledErrorText", + """\"Termux:X11 application is not found.\\n\" + + \"You should choose latest release here: \\n https://github.com/termux/termux-x11/releases/tag/nightly\\n\" + + \"After this you should download \\"termux-x11-ARCH-debug.apk\\" or \\"termux-x11-universal-debug.apk\\" and install it.\\n\"""" +android.defaultConfig.buildConfigField "String", "packageSignatureMismatchErrorText", + "\"Signature verification of target application " + android.namespace + " failed.\\nPlease, reinstall both termux-x11 package and Termux:X11 application from the same source\"" +android.defaultConfig.buildConfigField "String", "COMMIT", "\"" + ("git rev-parse HEAD\n".execute().getText().trim() ?: (System.getenv('CURRENT_COMMIT') ?: "NO_COMMIT")) + "\"" diff --git a/shell-loader2/release/output-metadata.json b/shell-loader2/release/output-metadata.json new file mode 100644 index 0000000..3878f99 --- /dev/null +++ b/shell-loader2/release/output-metadata.json @@ -0,0 +1,21 @@ +{ + "version": 3, + "artifactType": { + "type": "APK", + "kind": "Directory" + }, + "applicationId": "com.vectras.vm", + "variantName": "release", + "elements": [ + { + "type": "SINGLE", + "filters": [], + "attributes": [], + "versionCode": -1, + "versionName": "", + "outputFile": "shell-loader-debug.apk" + } + ], + "elementType": "File", + "minSdkVersionForDexing": 21 +} \ No newline at end of file diff --git a/shell-loader2/src/main/AndroidManifest.xml b/shell-loader2/src/main/AndroidManifest.xml new file mode 100644 index 0000000..9d784c0 --- /dev/null +++ b/shell-loader2/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + diff --git a/shell-loader2/src/main/java/com/vectras/vm/Loader.java b/shell-loader2/src/main/java/com/vectras/vm/Loader.java new file mode 100644 index 0000000..dfdb4be --- /dev/null +++ b/shell-loader2/src/main/java/com/vectras/vm/Loader.java @@ -0,0 +1,39 @@ +package com.vectras.vm; +import com.vectras.vm.BuildConfig; + +public class Loader { + /** + * Command-line entry point. + * It is pretty simple. + * 1. Check if application is installed. + * 2. Check if target apk's signature matches stored hash to prevent running code of potentially replaced malicious apk. + * 3. Load target apk code with `PathClassLoader` and start target's main function. + *

+ * This way we can make this loader version-agnostic and keep it secure. All application logic is located in target apk. + * + * @param args The command-line arguments + */ + public static void main(String[] args) { + String cls = System.getenv("TERMUX_X11_LOADER_OVERRIDE_CMDENTRYPOINT_CLASS"); + cls = cls != null ? cls : BuildConfig.CLASS_ID; + try { + android.content.pm.PackageInfo targetInfo = (android.os.Build.VERSION.SDK_INT <= 32) ? + android.app.ActivityThread.getPackageManager().getPackageInfo(BuildConfig.APPLICATION_ID, android.content.pm.PackageManager.GET_SIGNATURES, 0) : + android.app.ActivityThread.getPackageManager().getPackageInfo(BuildConfig.APPLICATION_ID, (long) android.content.pm.PackageManager.GET_SIGNATURES, 0); + assert targetInfo != null : BuildConfig.packageNotInstalledErrorText.replace("ARCH", android.os.Build.SUPPORTED_ABIS[0]); + assert targetInfo.signatures.length == 1 && BuildConfig.SIGNATURE == targetInfo.signatures[0].hashCode() : BuildConfig.packageSignatureMismatchErrorText; + + android.util.Log.i(BuildConfig.logTag, "loading " + targetInfo.applicationInfo.sourceDir + "::" + BuildConfig.CLASS_ID + "::main of " + BuildConfig.APPLICATION_ID + " application (commit " + BuildConfig.COMMIT + ")"); + Class targetClass = Class.forName(cls, true, + new dalvik.system.PathClassLoader(targetInfo.applicationInfo.sourceDir, null, ClassLoader.getSystemClassLoader())); + targetClass.getMethod("main", String[].class).invoke(null, (Object) args); + } catch (AssertionError e) { + System.err.println(e.getMessage()); + } catch (java.lang.reflect.InvocationTargetException e) { + e.getCause().printStackTrace(System.err); + } catch (Throwable e) { + android.util.Log.e(BuildConfig.logTag, "Loader error", e); + e.printStackTrace(System.err); + } + } +} diff --git a/shell-loader2/stub/build.gradle b/shell-loader2/stub/build.gradle new file mode 100644 index 0000000..cbbec9a --- /dev/null +++ b/shell-loader2/stub/build.gradle @@ -0,0 +1,29 @@ +plugins { + id('com.android.library') +} + +android { + namespace 'com.termux.x11.stub' + compileSdkVersion 30 + defaultConfig { + minSdkVersion 24 + //noinspection ExpiredTargetSdkVersion + targetSdkVersion 28 + } + buildFeatures { + buildConfig false + } + buildTypes { + release { + minifyEnabled false + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + implementation 'androidx.annotation:annotation:1.9.1' +} diff --git a/shell-loader2/stub/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json b/shell-loader2/stub/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/shell-loader2/stub/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/shell-loader2/stub/build/intermediates/annotation_processor_list/release/javaPreCompileRelease/annotationProcessors.json b/shell-loader2/stub/build/intermediates/annotation_processor_list/release/javaPreCompileRelease/annotationProcessors.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/shell-loader2/stub/build/intermediates/annotation_processor_list/release/javaPreCompileRelease/annotationProcessors.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/shell-loader2/stub/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar b/shell-loader2/stub/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar new file mode 100644 index 0000000..1d6940e Binary files /dev/null and b/shell-loader2/stub/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar differ diff --git a/shell-loader2/stub/build/intermediates/compile_library_classes_jar/release/bundleLibCompileToJarRelease/classes.jar b/shell-loader2/stub/build/intermediates/compile_library_classes_jar/release/bundleLibCompileToJarRelease/classes.jar new file mode 100644 index 0000000..1d6940e Binary files /dev/null and b/shell-loader2/stub/build/intermediates/compile_library_classes_jar/release/bundleLibCompileToJarRelease/classes.jar differ diff --git a/shell-loader2/stub/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar b/shell-loader2/stub/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar new file mode 100644 index 0000000..c7480c3 Binary files /dev/null and b/shell-loader2/stub/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar differ diff --git a/shell-loader2/stub/build/intermediates/compile_r_class_jar/release/generateReleaseRFile/R.jar b/shell-loader2/stub/build/intermediates/compile_r_class_jar/release/generateReleaseRFile/R.jar new file mode 100644 index 0000000..c7480c3 Binary files /dev/null and b/shell-loader2/stub/build/intermediates/compile_r_class_jar/release/generateReleaseRFile/R.jar differ diff --git a/shell-loader2/stub/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt b/shell-loader2/stub/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt new file mode 100644 index 0000000..e69de29 diff --git a/shell-loader2/stub/build/intermediates/compile_symbol_list/release/generateReleaseRFile/R.txt b/shell-loader2/stub/build/intermediates/compile_symbol_list/release/generateReleaseRFile/R.txt new file mode 100644 index 0000000..e69de29 diff --git a/shell-loader2/stub/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties b/shell-loader2/stub/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties new file mode 100644 index 0000000..32959f1 --- /dev/null +++ b/shell-loader2/stub/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties @@ -0,0 +1 @@ +#Sun Mar 23 16:07:05 ICT 2025 diff --git a/shell-loader2/stub/build/intermediates/incremental/debug/packageDebugResources/merger.xml b/shell-loader2/stub/build/intermediates/incremental/debug/packageDebugResources/merger.xml new file mode 100644 index 0000000..f149593 --- /dev/null +++ b/shell-loader2/stub/build/intermediates/incremental/debug/packageDebugResources/merger.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/shell-loader2/stub/build/intermediates/incremental/release/packageReleaseResources/compile-file-map.properties b/shell-loader2/stub/build/intermediates/incremental/release/packageReleaseResources/compile-file-map.properties new file mode 100644 index 0000000..c3c69e2 --- /dev/null +++ b/shell-loader2/stub/build/intermediates/incremental/release/packageReleaseResources/compile-file-map.properties @@ -0,0 +1 @@ +#Sun Mar 23 16:07:40 ICT 2025 diff --git a/shell-loader2/stub/build/intermediates/incremental/release/packageReleaseResources/merger.xml b/shell-loader2/stub/build/intermediates/incremental/release/packageReleaseResources/merger.xml new file mode 100644 index 0000000..2036479 --- /dev/null +++ b/shell-loader2/stub/build/intermediates/incremental/release/packageReleaseResources/merger.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/shell-loader2/stub/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt b/shell-loader2/stub/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt new file mode 100644 index 0000000..78ac5b8 --- /dev/null +++ b/shell-loader2/stub/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt @@ -0,0 +1,2 @@ +R_DEF: Internal format may change without notice +local diff --git a/shell-loader2/stub/build/intermediates/local_only_symbol_list/release/parseReleaseLocalResources/R-def.txt b/shell-loader2/stub/build/intermediates/local_only_symbol_list/release/parseReleaseLocalResources/R-def.txt new file mode 100644 index 0000000..78ac5b8 --- /dev/null +++ b/shell-loader2/stub/build/intermediates/local_only_symbol_list/release/parseReleaseLocalResources/R-def.txt @@ -0,0 +1,2 @@ +R_DEF: Internal format may change without notice +local diff --git a/shell-loader2/stub/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt b/shell-loader2/stub/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt new file mode 100644 index 0000000..08f4ebe --- /dev/null +++ b/shell-loader2/stub/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt @@ -0,0 +1 @@ +0 Warning/Error \ No newline at end of file diff --git a/shell-loader2/stub/build/intermediates/nested_resources_validation_report/release/generateReleaseResources/nestedResourcesValidationReport.txt b/shell-loader2/stub/build/intermediates/nested_resources_validation_report/release/generateReleaseResources/nestedResourcesValidationReport.txt new file mode 100644 index 0000000..08f4ebe --- /dev/null +++ b/shell-loader2/stub/build/intermediates/nested_resources_validation_report/release/generateReleaseResources/nestedResourcesValidationReport.txt @@ -0,0 +1 @@ +0 Warning/Error \ No newline at end of file diff --git a/shell-loader2/stub/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt b/shell-loader2/stub/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt new file mode 100644 index 0000000..2d3cdf0 --- /dev/null +++ b/shell-loader2/stub/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt @@ -0,0 +1 @@ +com.termux.x11.stub diff --git a/shell-loader2/stub/build/intermediates/symbol_list_with_package_name/release/generateReleaseRFile/package-aware-r.txt b/shell-loader2/stub/build/intermediates/symbol_list_with_package_name/release/generateReleaseRFile/package-aware-r.txt new file mode 100644 index 0000000..2d3cdf0 --- /dev/null +++ b/shell-loader2/stub/build/intermediates/symbol_list_with_package_name/release/generateReleaseRFile/package-aware-r.txt @@ -0,0 +1 @@ +com.termux.x11.stub diff --git a/shell-loader2/stub/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin b/shell-loader2/stub/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin new file mode 100644 index 0000000..db966cc Binary files /dev/null and b/shell-loader2/stub/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin differ diff --git a/shell-loader2/stub/build/tmp/compileReleaseJavaWithJavac/previous-compilation-data.bin b/shell-loader2/stub/build/tmp/compileReleaseJavaWithJavac/previous-compilation-data.bin new file mode 100644 index 0000000..db966cc Binary files /dev/null and b/shell-loader2/stub/build/tmp/compileReleaseJavaWithJavac/previous-compilation-data.bin differ diff --git a/shell-loader2/stub/src/main/AndroidManifest.xml b/shell-loader2/stub/src/main/AndroidManifest.xml new file mode 100644 index 0000000..cc947c5 --- /dev/null +++ b/shell-loader2/stub/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/shell-loader2/stub/src/main/java/android/app/ActivityThread.java b/shell-loader2/stub/src/main/java/android/app/ActivityThread.java new file mode 100644 index 0000000..490b19d --- /dev/null +++ b/shell-loader2/stub/src/main/java/android/app/ActivityThread.java @@ -0,0 +1,17 @@ +package android.app; + +import android.content.pm.IPackageManager; + +public class ActivityThread { + public static ActivityThread systemMain() { + throw new RuntimeException("STUB"); + } + + public ContextImpl getSystemContext() { + throw new RuntimeException("STUB"); + } + + public static IPackageManager getPackageManager() { + throw new RuntimeException("STUB"); + } +} diff --git a/shell-loader2/stub/src/main/java/android/app/ContextImpl.java b/shell-loader2/stub/src/main/java/android/app/ContextImpl.java new file mode 100644 index 0000000..fb75f17 --- /dev/null +++ b/shell-loader2/stub/src/main/java/android/app/ContextImpl.java @@ -0,0 +1,6 @@ +package android.app; + +import android.content.Context; + +public abstract class ContextImpl extends Context { +} diff --git a/shell-loader2/stub/src/main/java/android/app/IActivityManager.java b/shell-loader2/stub/src/main/java/android/app/IActivityManager.java new file mode 100644 index 0000000..f14723e --- /dev/null +++ b/shell-loader2/stub/src/main/java/android/app/IActivityManager.java @@ -0,0 +1,13 @@ +package android.app; + +import android.content.IIntentSender; +import android.content.Intent; +import android.os.Bundle; +import android.os.IBinder; + +public interface IActivityManager { + public IIntentSender getIntentSender(int type, + String packageName, IBinder token, String resultWho, + int requestCode, Intent[] intents, String[] resolvedTypes, + int flags, Bundle bOptions, int userId); +} diff --git a/shell-loader2/stub/src/main/java/android/content/IIntentReceiver.java b/shell-loader2/stub/src/main/java/android/content/IIntentReceiver.java new file mode 100644 index 0000000..ec5952a --- /dev/null +++ b/shell-loader2/stub/src/main/java/android/content/IIntentReceiver.java @@ -0,0 +1,13 @@ +package android.content; + +import android.os.Bundle; + +/** + * Stub - will be replaced by system at runtime + */ +public interface IIntentReceiver { + public static abstract class Stub implements IIntentReceiver { + public abstract void performReceive(Intent intent, int resultCode, String data, Bundle extras, + boolean ordered, boolean sticky, int sendingUser); + } +} diff --git a/shell-loader2/stub/src/main/java/android/content/IIntentSender.java b/shell-loader2/stub/src/main/java/android/content/IIntentSender.java new file mode 100644 index 0000000..a02f02f --- /dev/null +++ b/shell-loader2/stub/src/main/java/android/content/IIntentSender.java @@ -0,0 +1,12 @@ +package android.content; + +import android.os.Bundle; +import android.os.IBinder; + +/** + * Stub - will be replaced by system at runtime + */ +public abstract class IIntentSender { + abstract void send(int code, Intent intent, String resolvedType, IBinder whitelistToken, + IIntentReceiver finishedReceiver, String requiredPermission, Bundle options); +} diff --git a/shell-loader2/stub/src/main/java/android/content/pm/IPackageManager.java b/shell-loader2/stub/src/main/java/android/content/pm/IPackageManager.java new file mode 100644 index 0000000..d88912e --- /dev/null +++ b/shell-loader2/stub/src/main/java/android/content/pm/IPackageManager.java @@ -0,0 +1,7 @@ +package android.content.pm; + +public interface IPackageManager { + PackageInfo getPackageInfo(String packageName, long flags, int userId) throws android.os.RemoteException; + PackageInfo getPackageInfo(String packageName, int flags, int userId) throws android.os.RemoteException; + String[] getPackagesForUid(int uid) throws android.os.RemoteException; +} \ No newline at end of file diff --git a/web/data/UpdateConfig.json b/web/data/UpdateConfig.json index 76c315c..5b29ee4 100644 --- a/web/data/UpdateConfig.json +++ b/web/data/UpdateConfig.json @@ -1,14 +1,15 @@ { "versionCode":"21", - "versionName":"v2.9.5-3dfx,v2.9.5-3dfx-almondcake,v2.9.5-3dfx-bread,v2.9.5-3dfx-churro,v2.9.5-3dfx-doughnut,v2.9.5-3dfx-empanada,v2.9.5-3dfx-flan,v2.9.5-3dfx-gugelhupf,v2.9.5-3dfx-hamentaschen,v2.9.5-3dfx-italianice,v2.9.5-3dfx-ladyfingers", + "versionName":"v2.9.5-3dfx,v2.9.5-3dfx-almondcake,v2.9.5-3dfx-bread,v2.9.5-3dfx-churro,v2.9.5-3dfx-doughnut,v2.9.5-3dfx-empanada,v2.9.5-3dfx-flan,v2.9.5-3dfx-gugelhupf,v2.9.5-3dfx-hamentaschen,v2.9.5-3dfx-italianice,v2.9.5-3dfx-ladyfingers,v2.9.5-3dfx-madeleine", "size": "46 MB", "url": "https://github.com/xoureldeen/Vectras-VM-Android/releases/v2.9.5", "Message": "

v2.9.5-3dfx



New updates are live!", "cancellable": true, "versionCodeBeta":"21", - "versionNameBeta":"v2.9.5-3dfx-ladyfingers", + "versionNameBeta":"v2.9.5-3dfx-madeleine", + "versionNameBetas":"v2.9.5-3dfx-madeleine", "sizeBeta": "48 MB", "urlBeta": "https://github.com/AnBui2004/Vectras-VM-Emu-Android/releases", - "MessageBeta": "

Ladyfingers

Bugs fixed.", + "MessageBeta": "

Madeleine

Bugs fixed.", "cancellableBeta": true }