Compare commits

...

15 Commits

Author SHA1 Message Date
Ushie
166a3180d3 build: correct version code 2023-08-28 03:20:15 +03:00
Ushie
3bf4982f23 chore: merge dev to main (#1163) 2023-08-28 02:47:47 +03:00
oSumAtrIX
f4e1cccfac build: bump version to v1.9.4 2023-08-28 01:44:46 +02:00
oSumAtrIX
7911a8f49e fix: properly log messages and progress 2023-08-28 01:44:46 +02:00
oSumAtrIX
64a96fc3ce fix: close before returning 2023-08-28 01:44:46 +02:00
oSumAtrIX
45fae3f0fd build: bump ReVanced Patcher back to v14.2.1
This reverts the previous regression with the dependency to ReVanced Patcher.
2023-08-27 22:35:03 +02:00
aAbed
e45a7824c1 build: bump version to v1.9.3 2023-08-27 13:27:53 +07:00
aAbed
5d72c48a76 chore: merge dev to main (#1157) 2023-08-27 13:27:01 +07:00
aAbed
d6169c6fa2 fix: broken settings page 2023-08-27 11:55:21 +05:45
Ushie
9df6d52e2d build: bump version to v1.9.2 2023-08-27 05:40:50 +03:00
Ushie
239de8e923 chore: merge dev to main (#1156) 2023-08-27 05:40:13 +03:00
Ushie
7d553a87f3 build: revert patcher to v11.0.4 2023-08-27 05:39:24 +03:00
Ushie
557b42bc56 build: bump version to 1.9.1 2023-08-27 03:58:30 +03:00
Ushie
8423914748 chore: merge dev to main (#1155) 2023-08-27 03:57:57 +03:00
Ushie
07dce23794 build: bump patcher to v14.2.0 2023-08-27 03:55:56 +03:00
4 changed files with 105 additions and 210 deletions

View File

@@ -85,7 +85,7 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
// ReVanced // ReVanced
implementation "app.revanced:revanced-patcher:14.1.0" implementation "app.revanced:revanced-patcher:14.2.1"
// Signing & aligning // Signing & aligning
implementation("org.bouncycastle:bcpkix-jdk15on:1.70") implementation("org.bouncycastle:bcpkix-jdk15on:1.70")

View File

@@ -21,13 +21,9 @@ import kotlinx.coroutines.runBlocking
import java.io.File import java.io.File
import java.io.PrintWriter import java.io.PrintWriter
import java.io.StringWriter import java.io.StringWriter
import java.util.logging.Level
import java.util.logging.LogRecord import java.util.logging.LogRecord
import java.util.logging.Logger import java.util.logging.Logger
import java.util.logging.SimpleFormatter
private const val PATCHER_CHANNEL = "app.revanced.manager.flutter/patcher"
private const val INSTALLER_CHANNEL = "app.revanced.manager.flutter/installer"
class MainActivity : FlutterActivity() { class MainActivity : FlutterActivity() {
private val handler = Handler(Looper.getMainLooper()) private val handler = Handler(Looper.getMainLooper())
@@ -37,9 +33,16 @@ class MainActivity : FlutterActivity() {
override fun configureFlutterEngine(flutterEngine: FlutterEngine) { override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine) super.configureFlutterEngine(flutterEngine)
val mainChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, PATCHER_CHANNEL)
installerChannel = val patcherChannel = "app.revanced.manager.flutter/patcher"
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, INSTALLER_CHANNEL) val installerChannel = "app.revanced.manager.flutter/installer"
val mainChannel =
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, patcherChannel)
this.installerChannel =
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, installerChannel)
mainChannel.setMethodCallHandler { call, result -> mainChannel.setMethodCallHandler { call, result ->
when (call.method) { when (call.method) {
"runPatcher" -> { "runPatcher" -> {
@@ -79,9 +82,7 @@ class MainActivity : FlutterActivity() {
keyStoreFilePath, keyStoreFilePath,
keystorePassword keystorePassword
) )
} else { } else result.notImplemented()
result.notImplemented()
}
} }
"stopPatcher" -> { "stopPatcher" -> {
@@ -116,110 +117,94 @@ class MainActivity : FlutterActivity() {
val cacheDir = File(cacheDirPath) val cacheDir = File(cacheDirPath)
Thread { Thread {
try { fun updateProgress(progress: Double, header: String, log: String) {
Logger.getLogger("").apply {
handlers.forEach {
it.close()
removeHandler(it)
}
object : java.util.logging.Handler() {
override fun publish(record: LogRecord) = formatter.format(record).toByteArray().let {
if (record.level.intValue() > Level.INFO.intValue())
System.err.write(it)
else
System.out.write(it)
}
override fun flush() {
System.out.flush()
System.err.flush()
}
override fun close() = flush()
}.also {
it.level = Level.ALL
it.formatter = SimpleFormatter()
}.let(::addHandler)
}
handler.post { handler.post {
installerChannel.invokeMethod( installerChannel.invokeMethod(
"update", "update",
mapOf( mapOf(
"progress" to 0.1, "progress" to progress,
"header" to "", "header" to header,
"log" to "Copying original APK" "log" to log
) )
) )
} }
}
fun postStop() = handler.post { stopResult!!.success(null) }
// Setup logger
Logger.getLogger("").apply {
handlers.forEach {
it.close()
removeHandler(it)
}
object : java.util.logging.Handler() {
override fun publish(record: LogRecord) =
updateProgress(-1.0, "", record.message)
override fun flush() = Unit
override fun close() = flush()
}.let(::addHandler)
}
try {
updateProgress(0.0, "", "Copying APK")
if (cancel) { if (cancel) {
handler.post { stopResult!!.success(null) } postStop()
return@Thread return@Thread
} }
originalFile.copyTo(inputFile, true) originalFile.copyTo(inputFile, true)
if (cancel) { if (cancel) {
handler.post { stopResult!!.success(null) } postStop()
return@Thread return@Thread
} }
handler.post { updateProgress(0.05, "Reading APK...", "Reading APK")
installerChannel.invokeMethod(
"update",
mapOf(
"progress" to 0.2,
"header" to "Reading APK...",
"log" to "Reading input APK"
)
)
}
val patcher = val patcher = Patcher(
Patcher( PatcherOptions(
PatcherOptions( inputFile,
inputFile, cacheDir,
cacheDir, Aapt.binary(applicationContext).absolutePath,
Aapt.binary(applicationContext).absolutePath, cacheDir.path,
cacheDir.path,
)
) )
)
if (cancel) { if (cancel) {
handler.post { stopResult!!.success(null) } postStop()
return@Thread return@Thread
} }
handler.post { updateProgress(0.1, "Loading patches...", "Loading patches")
installerChannel.invokeMethod(
"update",
mapOf("progress" to 0.3, "header" to "Loading patches...", "log" to "Loading patches")
)
}
val patches = val patches = PatchBundleLoader.Dex(
PatchBundleLoader.Dex( File(patchBundleFilePath)
File(patchBundleFilePath) ).filter { patch ->
).filter { patch -> val isCompatible = patch.compatiblePackages?.any {
(patch.compatiblePackages?.any { it.name == patcher.context.packageMetadata.packageName } == true || patch.compatiblePackages.isNullOrEmpty()) && it.name == patcher.context.packageMetadata.packageName
selectedPatches.any { it == patch.patchName } } ?: false
}
val compatibleOrUniversal =
isCompatible || patch.compatiblePackages.isNullOrEmpty()
compatibleOrUniversal && selectedPatches.any { it == patch.patchName }
}
if (cancel) { if (cancel) {
handler.post { stopResult!!.success(null) } postStop()
return@Thread return@Thread
} }
handler.post { updateProgress(0.15, "Executing...", "")
installerChannel.invokeMethod(
"update", // Update the progress bar every time a patch is executed from 0.15 to 0.7
mapOf( val totalPatchesCount = patches.size
"progress" to 0.5, val progressStep = 0.55 / totalPatchesCount
"header" to "Executing patches...", var progress = 0.15
"log" to ""
)
)
}
patcher.apply { patcher.apply {
acceptIntegrations(listOf(integrations)) acceptIntegrations(listOf(integrations))
@@ -227,64 +212,42 @@ class MainActivity : FlutterActivity() {
runBlocking { runBlocking {
apply(false).collect { patchResult: PatchResult -> apply(false).collect { patchResult: PatchResult ->
patchResult.exception?.let { if (cancel) {
if (cancel) { handler.post { stopResult!!.success(null) }
handler.post { stopResult!!.success(null) } this.cancel()
this.cancel() this@apply.close()
return@collect return@collect
}
StringWriter().use { writer ->
it.printStackTrace(PrintWriter(writer))
handler.post {
installerChannel.invokeMethod(
"update",
mapOf("progress" to 0.5, "header" to "", "log" to "${patchResult.patchName} failed: $writer")
)
}
}
} ?: run {
if (cancel) {
handler.post { stopResult!!.success(null) }
this.cancel()
return@collect
}
val msg = "${patchResult.patchName} succeeded"
handler.post {
installerChannel.invokeMethod(
"update",
mapOf(
"progress" to 0.5,
"header" to "",
"log" to msg
)
)
}
} }
val msg = patchResult.exception?.let {
val writer = StringWriter()
it.printStackTrace(PrintWriter(writer))
"${patchResult.patchName} failed: $writer"
} ?: run {
"${patchResult.patchName} succeeded"
}
updateProgress(progress, "", msg)
progress += progressStep
} }
} }
} }
if (cancel) { if (cancel) {
handler.post { stopResult!!.success(null) } postStop()
patcher.close()
return@Thread return@Thread
} }
handler.post { updateProgress(0.8, "Building...", "")
installerChannel.invokeMethod(
"update",
mapOf(
"progress" to 0.7,
"header" to "Repacking APK...",
"log" to ""
)
)
}
val res = patcher.get() val res = patcher.get()
patcher.close() patcher.close()
ZipFile(patchedFile).use { file -> ZipFile(patchedFile).use { file ->
res.dexFiles.forEach { res.dexFiles.forEach {
if (cancel) { if (cancel) {
handler.post { stopResult!!.success(null) } postStop()
return@Thread return@Thread
} }
file.addEntryCompressData( file.addEntryCompressData(
@@ -303,92 +266,35 @@ class MainActivity : FlutterActivity() {
ZipAligner::getEntryAlignment ZipAligner::getEntryAlignment
) )
} }
if (cancel) { if (cancel) {
handler.post { stopResult!!.success(null) } postStop()
return@Thread return@Thread
} }
handler.post {
installerChannel.invokeMethod( updateProgress(0.9, "Signing...", "Signing APK")
"update",
mapOf(
"progress" to 0.9,
"header" to "Signing APK...",
"log" to ""
)
)
}
try { try {
Signer("ReVanced", keystorePassword).signApk( Signer("ReVanced", keystorePassword)
patchedFile, .signApk(patchedFile, outFile, keyStoreFile)
outFile,
keyStoreFile
)
} catch (e: Exception) { } catch (e: Exception) {
//log to console
print("Error signing APK: ${e.message}") print("Error signing APK: ${e.message}")
e.printStackTrace() e.printStackTrace()
} }
handler.post { updateProgress(1.0, "Patched", "Patched")
installerChannel.invokeMethod(
"update",
mapOf(
"progress" to 1.0,
"header" to "Finished!",
"log" to "Finished!"
)
)
}
} catch (ex: Throwable) { } catch (ex: Throwable) {
if (!cancel) { if (!cancel) {
val stack = ex.stackTraceToString() val stack = ex.stackTraceToString()
handler.post { updateProgress(
installerChannel.invokeMethod( -100.0,
"update", "Aborted",
mapOf( "An error occurred:\n$stack"
"progress" to -100.0, )
"header" to "Aborted...",
"log" to "An error occurred! Aborted\nError:\n$stack"
)
)
}
} }
} }
handler.post { result.success(null) } handler.post { result.success(null) }
}.start() }.start()
} }
// inner class ManagerLogger : Logger {
// override fun error(msg: String) {
// handler.post {
// installerChannel
// .invokeMethod(
// "update",
// mapOf("progress" to -1.0, "header" to "", "log" to msg)
// )
// }
// }
//
// override fun warn(msg: String) {
// handler.post {
// installerChannel.invokeMethod(
// "update",
// mapOf("progress" to -1.0, "header" to "", "log" to msg)
// )
// }
// }
//
// override fun info(msg: String) {
// handler.post {
// installerChannel.invokeMethod(
// "update",
// mapOf("progress" to -1.0, "header" to "", "log" to msg)
// )
// }
// }
//
// override fun trace(_msg: String) { /* unused */
// }
// }
} }

View File

@@ -111,17 +111,6 @@ class ManagerAPI {
} }
bool isPatchesChangeEnabled() { bool isPatchesChangeEnabled() {
if (getPatchedApps().isNotEmpty && !isChangingToggleModified()) {
for (final apps in getPatchedApps()) {
if (getSavedPatches(apps.originalPackageName)
.indexWhere((patch) => patch.excluded) !=
-1) {
setPatchesChangeWarning(false);
setPatchesChangeEnabled(true);
break;
}
}
}
return _prefs.getBool('patchesChangeEnabled') ?? false; return _prefs.getBool('patchesChangeEnabled') ?? false;
} }

View File

@@ -4,7 +4,7 @@ homepage: https://github.com/revanced/revanced-manager
publish_to: 'none' publish_to: 'none'
version: 1.9.0+100900000 version: 1.9.4+100900400
environment: environment:
sdk: '>=3.0.0 <4.0.0' sdk: '>=3.0.0 <4.0.0'