mirror of
				https://github.com/topjohnwu/Magisk.git
				synced 2025-10-31 17:39:00 +00:00 
			
		
		
		
	Skip download in lsposed setup test
Download the zip during build time
This commit is contained in:
		| @@ -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) | ||||
|  | ||||
|   | ||||
| @@ -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<String>(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) | ||||
|             ) | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -20,7 +20,7 @@ android { | ||||
|     } | ||||
| } | ||||
|  | ||||
| setupAppCommon() | ||||
| setupTestApk() | ||||
|  | ||||
| dependencies { | ||||
|     implementation(libs.test.runner) | ||||
|   | ||||
| @@ -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) } | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 topjohnwu
					topjohnwu