From ad95e8951b6f2b4408c478c14e3181e25ca6da3c Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Wed, 12 Feb 2025 17:02:49 +0800 Subject: [PATCH] Skip download in lsposed setup test Download the zip during build time --- .../com/topjohnwu/magisk/test/BaseTest.kt | 3 +- .../com/topjohnwu/magisk/test/Environment.kt | 14 ++--- app/test/build.gradle.kts | 2 +- buildSrc/src/main/java/Setup.kt | 60 +++++++++++++------ 4 files changed, 50 insertions(+), 29 deletions(-) diff --git a/app/core/src/main/java/com/topjohnwu/magisk/test/BaseTest.kt b/app/core/src/main/java/com/topjohnwu/magisk/test/BaseTest.kt index 73835f34f..e2d742177 100644 --- a/app/core/src/main/java/com/topjohnwu/magisk/test/BaseTest.kt +++ b/app/core/src/main/java/com/topjohnwu/magisk/test/BaseTest.kt @@ -12,7 +12,8 @@ import org.junit.Assert.assertTrue interface BaseTest { val instrumentation: Instrumentation get() = InstrumentationRegistry.getInstrumentation() - val context: Context get() = instrumentation.targetContext + val appContext: Context get() = instrumentation.targetContext + val testContext: Context get() = instrumentation.context val uiAutomation: UiAutomation get() = instrumentation.uiAutomation val device: UiDevice get() = UiDevice.getInstance(instrumentation) diff --git a/app/core/src/main/java/com/topjohnwu/magisk/test/Environment.kt b/app/core/src/main/java/com/topjohnwu/magisk/test/Environment.kt index 5112c1bf8..5f5eaa979 100644 --- a/app/core/src/main/java/com/topjohnwu/magisk/test/Environment.kt +++ b/app/core/src/main/java/com/topjohnwu/magisk/test/Environment.kt @@ -6,7 +6,6 @@ import androidx.annotation.Keep import androidx.core.net.toUri import androidx.test.ext.junit.runners.AndroidJUnit4 import com.topjohnwu.magisk.core.BuildConfig.APP_PACKAGE_NAME -import com.topjohnwu.magisk.core.di.ServiceLocator import com.topjohnwu.magisk.core.download.DownloadNotifier import com.topjohnwu.magisk.core.download.DownloadProcessor import com.topjohnwu.magisk.core.ktx.cachedFile @@ -34,9 +33,6 @@ class Environment : BaseTest { fun lsposed(): Boolean { return Build.VERSION.SDK_INT >= 27 && Build.VERSION.SDK_INT <= 34 } - - private const val LSPOSED_URL = - "https://github.com/LSPosed/LSPosed/releases/download/v1.9.2/LSPosed-v1.9.2-7024-zygisk-release.zip" } object TimberLog : CallbackList(Runnable::run) { @@ -60,13 +56,13 @@ class Environment : BaseTest { assumeTrue(lsposed()) val notify = object : DownloadNotifier { - override val context = this@Environment.context + override val context = appContext override fun notifyUpdate(id: Int, editor: (Notification.Builder) -> Unit) {} } val processor = DownloadProcessor(notify) - val zip = context.cachedFile("lsposed.zip") + val zip = appContext.cachedFile("lsposed.zip") runBlocking { - ServiceLocator.networkService.fetchFile(LSPOSED_URL).byteStream().use { + testContext.assets.open("lsposed.zip").use { processor.handleModule(it, zip.toUri()) } assertTrue( @@ -82,7 +78,7 @@ class Environment : BaseTest { assertTrue( "App hiding failed", AppMigration.patchAndHide( - context = context, + context = appContext, label = "Settings", pkg = "repackaged.$APP_PACKAGE_NAME" ) @@ -95,7 +91,7 @@ class Environment : BaseTest { runBlocking { assertTrue( "App restoration failed", - AppMigration.restoreApp(context) + AppMigration.restoreApp(appContext) ) } } diff --git a/app/test/build.gradle.kts b/app/test/build.gradle.kts index c3c8ff705..f07eaf206 100644 --- a/app/test/build.gradle.kts +++ b/app/test/build.gradle.kts @@ -20,7 +20,7 @@ android { } } -setupAppCommon() +setupTestApk() dependencies { implementation(libs.test.runner) diff --git a/buildSrc/src/main/java/Setup.kt b/buildSrc/src/main/java/Setup.kt index 93140f7be..54af3c211 100644 --- a/buildSrc/src/main/java/Setup.kt +++ b/buildSrc/src/main/java/Setup.kt @@ -115,6 +115,27 @@ fun Project.setupCommon() { } } +private fun Project.downloadFile(url: String, checksum: String): File { + val file = layout.buildDirectory.file(checksum).get().asFile + if (file.exists()) { + val md = MessageDigest.getInstance("SHA-256") + file.inputStream().use { md.update(it.readAllBytes()) } + val hash = HexFormat.of().formatHex(md.digest()) + if (hash != checksum) { + file.delete() + } + } + if (!file.exists()) { + file.parentFile.mkdirs() + URI(url).toURL().openStream().use { dl -> + file.outputStream().use { + dl.copyTo(it) + } + } + } + return file +} + const val BUSYBOX_DOWNLOAD_URL = "https://github.com/topjohnwu/magisk-files/releases/download/files/busybox-1.36.1.1.zip" const val BUSYBOX_ZIP_CHECKSUM = @@ -144,24 +165,7 @@ fun Project.setupCoreLib() { val downloadBusybox by tasks.registering(Copy::class) { dependsOn(syncLibs) - val bb = layout.buildDirectory.file(BUSYBOX_ZIP_CHECKSUM).get().asFile - if (bb.exists()) { - val md = MessageDigest.getInstance("SHA-256") - bb.inputStream().use { md.update(it.readAllBytes()) } - val hash = HexFormat.of().formatHex(md.digest()) - if (hash != BUSYBOX_ZIP_CHECKSUM) { - bb.delete() - } - } - if (!bb.exists()) { - bb.parentFile.mkdirs() - URI(BUSYBOX_DOWNLOAD_URL).toURL().openStream().use { dl -> - bb.outputStream().use { - dl.copyTo(it) - } - } - } - from(zipTree(bb)) + from(zipTree(downloadFile(BUSYBOX_DOWNLOAD_URL, BUSYBOX_ZIP_CHECKSUM))) include(abiList.map { "$it/libbusybox.so" }) into("src/main/jniLibs") } @@ -462,3 +466,23 @@ fun Project.setupStubApk() { delete.addAll(listOf("src/debug/AndroidManifest.xml", "src/release/AndroidManifest.xml")) } } + +const val LSPOSED_DOWNLOAD_URL = + "https://github.com/LSPosed/LSPosed/releases/download/v1.9.2/LSPosed-v1.9.2-7024-zygisk-release.zip" +const val LSPOSED_CHECKSUM = + "0ebc6bcb465d1c4b44b7220ab5f0252e6b4eb7fe43da74650476d2798bb29622" + +fun Project.setupTestApk() { + setupAppCommon() + + androidApp.applicationVariants.all { + val variantCapped = name.replaceFirstChar { it.uppercase() } + val dlTask by tasks.register("download${variantCapped}Lsposed", Sync::class) { + from(downloadFile(LSPOSED_DOWNLOAD_URL, LSPOSED_CHECKSUM)) { + rename { "lsposed.zip" } + } + into("src/${this@all.name}/assets") + } + mergeAssetsProvider.configure { dependsOn(dlTask) } + } +}