Compare commits

..

8 Commits

Author SHA1 Message Date
semantic-release-bot
87c0e05d9c chore(release): 1.2.0-dev.1 [skip ci]
# [1.2.0-dev.1](https://github.com/revanced/revanced-cli/compare/v1.1.6-dev.1...v1.2.0-dev.1) (2022-06-04)

### Features

* add path for `cacheDirectory` and enable resource patching by default ([54c0a03](54c0a03d44))
2022-06-04 00:32:25 +00:00
oSumAtrIX
54c0a03d44 feat: add path for cacheDirectory and enable resource patching by default 2022-06-03 17:51:13 +02:00
semantic-release-bot
bd185133bc chore(release): 1.1.6-dev.1 [skip ci]
## [1.1.6-dev.1](https://github.com/revanced/revanced-cli/compare/v1.1.5...v1.1.6-dev.1) (2022-05-31)

### Bug Fixes

* migrate to latest patcher api changes ([ace70e4](ace70e417f))
2022-05-31 23:55:55 +00:00
oSumAtrIX
ace70e417f fix: migrate to latest patcher api changes 2022-06-01 01:41:24 +02:00
oSumAtrIX
735dbc9149 Merge remote-tracking branch 'origin/dev' into dev 2022-05-29 02:14:44 +02:00
tillnelown
e756ac9920 Removes the uneeded revanced-patches dependency 2022-05-28 18:22:51 +02:00
oSumAtrIX
a4ef47a285 Merge pull request #19 from revanced/dev
chore: bump patcher version
2022-05-27 17:46:15 +02:00
oSumAtrIX
c69170535e chore: bump patcher version 2022-05-27 14:33:22 +02:00
7 changed files with 76 additions and 82 deletions

View File

@@ -1,3 +1,17 @@
# [1.2.0-dev.1](https://github.com/revanced/revanced-cli/compare/v1.1.6-dev.1...v1.2.0-dev.1) (2022-06-04)
### Features
* add path for `cacheDirectory` and enable resource patching by default ([54c0a03](https://github.com/revanced/revanced-cli/commit/54c0a03d44c8d1b586bc487ee1ca71859d6f0b57))
## [1.1.6-dev.1](https://github.com/revanced/revanced-cli/compare/v1.1.5...v1.1.6-dev.1) (2022-05-31)
### Bug Fixes
* migrate to latest patcher api changes ([ace70e4](https://github.com/revanced/revanced-cli/commit/ace70e417fdf280c7630a5a89a773879fd240e96))
## [1.1.5](https://github.com/revanced/revanced-cli/compare/v1.1.4...v1.1.5) (2022-05-27) ## [1.1.5](https://github.com/revanced/revanced-cli/compare/v1.1.4...v1.1.5) (2022-05-27)

View File

@@ -25,7 +25,6 @@ repositories {
dependencies { dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.21") implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.21")
implementation("app.revanced:revanced-patcher:1.0.0-dev.17") implementation("app.revanced:revanced-patcher:1.0.0-dev.17")
implementation("app.revanced:revanced-patches:1.0.0-dev.11")
implementation("info.picocli:picocli:4.6.3") implementation("info.picocli:picocli:4.6.3")

View File

@@ -1,2 +1,2 @@
kotlin.code.style = official kotlin.code.style = official
version = 1.1.5 version = 1.2.0-dev.1

View File

@@ -1,7 +1,7 @@
package app.revanced.cli package app.revanced.cli
import app.revanced.patcher.PatcherOptions
import app.revanced.patcher.annotation.Name import app.revanced.patcher.annotation.Name
import app.revanced.patcher.extensions.findAnnotationRecursively
import app.revanced.patcher.util.patch.implementation.JarPatchBundle import app.revanced.patcher.util.patch.implementation.JarPatchBundle
import app.revanced.utils.adb.Adb import app.revanced.utils.adb.Adb
import app.revanced.utils.patcher.addPatchesFiltered import app.revanced.utils.patcher.addPatchesFiltered
@@ -22,11 +22,11 @@ internal object MainCommand : Runnable {
@Option(names = ["-p", "--patches"], description = ["One or more bundles of patches"]) @Option(names = ["-p", "--patches"], description = ["One or more bundles of patches"])
internal var patchBundles = arrayOf<String>() internal var patchBundles = arrayOf<String>()
@Option(names = ["-t", "--temp-dir"], description = ["Temporal resource cache directory"], required = true) @Option(names = ["-t", "--temp-dir"], description = ["Temporal resource cache directory"])
internal lateinit var cacheDirectory: String internal var cacheDirectory = "revanced-cache"
@Option(names = ["-r", "--resource-patcher"], description = ["Enable patching resources"]) @Option(names = ["-r", "--resource-patcher"], description = ["Disable patching resources"])
internal var patchResources: Boolean = false internal var disableResourcePatching: Boolean = false
@Option( @Option(
names = ["-c", "--clean"], names = ["-c", "--clean"],
@@ -54,21 +54,18 @@ internal object MainCommand : Runnable {
override fun run() { override fun run() {
if (listOnly) { if (listOnly) {
for (patchBundlePath in patchBundles) for (patchBundlePath in patchBundles) for (it in JarPatchBundle(patchBundlePath).loadPatches()) {
for (it in JarPatchBundle(patchBundlePath).loadPatches())
println( // TODO: adjust extension methods to be able to do this
"[available] ${ val name = (it.annotations.find { it is Name } as? Name)?.name ?: it.simpleName
it.findAnnotationRecursively( println(
Name::class.java "[available] $name"
)?.name ?: it::class.java.name )
}" }
)
return return
} }
val patcher = app.revanced.patcher.Patcher( val patcher = app.revanced.patcher.Patcher(PatcherOptions(inputFile, cacheDirectory, !disableResourcePatching))
inputFile, cacheDirectory, patchResources
)
if (signatureCheck) { if (signatureCheck) {
patcher.addPatchesFiltered() patcher.addPatchesFiltered()

View File

@@ -30,8 +30,9 @@ internal class Patcher {
zipFileSystem.replaceFile(name, data.data) zipFileSystem.replaceFile(name, data.data)
} }
if (MainCommand.patchResources) { if (!MainCommand.disableResourcePatching) {
for (file in File(MainCommand.cacheDirectory).resolve("build/").listFiles(FileFilter { it.isDirectory })?.first()?.listFiles()!!) { for (file in File(MainCommand.cacheDirectory).resolve("build/").listFiles(FileFilter { it.isDirectory })
?.first()?.listFiles()!!) {
if (!file.isDirectory) { if (!file.isDirectory) {
zipFileSystem.replaceFile(file.name, file.readBytes()) zipFileSystem.replaceFile(file.name, file.readBytes())
continue continue

View File

@@ -2,29 +2,23 @@ package app.revanced.utils.patcher
import app.revanced.cli.MainCommand import app.revanced.cli.MainCommand
import app.revanced.patcher.Patcher import app.revanced.patcher.Patcher
import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.data.base.Data import app.revanced.patcher.data.base.Data
import app.revanced.patcher.extensions.findAnnotationRecursively import app.revanced.patcher.extensions.PatchExtensions.compatiblePackages
import app.revanced.patcher.extensions.PatchExtensions.patchName
import app.revanced.patcher.patch.base.Patch import app.revanced.patcher.patch.base.Patch
import app.revanced.patcher.util.patch.implementation.JarPatchBundle import app.revanced.patcher.util.patch.implementation.JarPatchBundle
fun Patcher.addPatchesFiltered( fun Patcher.addPatchesFiltered(
packageCompatibilityFilter: Boolean = true,
packageVersionCompatibilityFilter: Boolean = true,
includeFilter: Boolean = false includeFilter: Boolean = false
) { ) {
val packageName = this.packageName val packageName = this.packageName
val packageVersion = this.packageVersion val packageVersion = this.packageVersion
MainCommand.patchBundles.forEach { bundle -> MainCommand.patchBundles.forEach { bundle ->
val includedPatches = mutableListOf<Patch<Data>>() val includedPatches = mutableListOf<Class<out Patch<Data>>>()
JarPatchBundle(bundle).loadPatches().forEach patch@{ p -> JarPatchBundle(bundle).loadPatches().forEach patch@{ patch ->
val patch = p.getDeclaredConstructor().newInstance() val compatiblePackages = patch.compatiblePackages
val patchName = patch.patchName
val compatibilityAnnotation = patch.javaClass.findAnnotationRecursively(Compatibility::class.java)
val patchName = patch.javaClass.findAnnotationRecursively(Name::class.java)?.name ?: patch.javaClass.name
val prefix = "[skipped] $patchName" val prefix = "[skipped] $patchName"
@@ -33,24 +27,16 @@ fun Patcher.addPatchesFiltered(
return@patch return@patch
} }
if (packageVersionCompatibilityFilter || packageCompatibilityFilter) { if (compatiblePackages == null) println("$prefix: Missing compatibility annotation. Continuing.")
else compatiblePackages.forEach { compatiblePackage ->
if (compatibilityAnnotation == null) { if (compatiblePackage.name != packageName) {
println("$prefix: Missing compatibility annotation.") println("$prefix: Package name not matching ${compatiblePackage.name}.")
return@patch return@patch
} }
if (!compatiblePackage.versions.any { it == packageVersion }) {
compatibilityAnnotation.compatiblePackages.forEach { compatiblePackage -> println("$prefix: Unsupported version.")
if (packageCompatibilityFilter && compatiblePackage.name != packageName) { return@patch
println("$prefix: Package name not matching ${compatiblePackage.name}.")
return@patch
}
if (packageVersionCompatibilityFilter && !compatiblePackage.versions.any { it == packageVersion }) {
println("$prefix: Unsupported version.")
return@patch
}
} }
} }

View File

@@ -1,55 +1,52 @@
package app.revanced.utils.signature package app.revanced.utils.signature
import app.revanced.patcher.Patcher import app.revanced.patcher.Patcher
import app.revanced.patcher.extensions.findAnnotationRecursively
import app.revanced.patcher.signature.implementation.method.annotation.FuzzyPatternScanMethod
import app.revanced.patcher.signature.implementation.method.annotation.MatchingMethod
import org.jf.dexlib2.iface.Method import org.jf.dexlib2.iface.Method
object Signature { object Signature {
fun checkSignatures(patcher: Patcher) { fun checkSignatures(patcher: Patcher) {
TODO()
/**
val failed = mutableListOf<String>() val failed = mutableListOf<String>()
for (signature in patcher.resolveSignatures()) { for (signature in patcher.resolveSignatures()) {
val signatureClass = signature::class.java val signatureClass = signature::class.java
val signatureName = val signatureName = signature.name ?: signatureClass.simpleName
signatureClass.findAnnotationRecursively(app.revanced.patcher.annotation.Name::class.java)?.name if (!signature.resolved) {
?: signatureClass.name failed.add(signatureName)
if (!signature.resolved) { continue
failed.add(signatureName) }
continue
}
val method = signature.result!!.method val method = signature.result!!.method
val matchingMethod = val matchingMethod = signature.matchingMethod ?: MatchingMethod()
signatureClass.findAnnotationRecursively(MatchingMethod::class.java) ?: MatchingMethod()
println( println(
""" """
[Signature] $signatureName [Signature] $signatureName
[Method] ${matchingMethod.definingClass}->${matchingMethod.name} [Method] ${matchingMethod.definingClass}->${matchingMethod.name}
[Match] ${method.definingClass}->${method.toStr()} [Match] ${method.definingClass}->${method.toStr()}
""".trimIndent() """.trimIndent()
) )
signatureClass.findAnnotationRecursively(FuzzyPatternScanMethod::class.java)?.let { signature.fuzzyThreshold.let {
val warnings = signature.result!!.scanResult.warnings!! val warnings = signature.result!!.scanResult.warnings!!
println( println(
""" """
[Warnings: ${warnings.count()}] [Warnings: ${warnings.count()}]
${warnings.joinToString(separator = "\n") { warning -> "${warning.instructionIndex} / ${warning.patternIndex}: ${warning.wrongOpcode} (expected: ${warning.correctOpcode})" }} ${warnings.joinToString(separator = "\n") { warning -> "${warning.instructionIndex} / ${warning.patternIndex}: ${warning.wrongOpcode} (expected: ${warning.correctOpcode})" }}
""".trimIndent() """.trimIndent()
) )
} }
} }
println( println(
""" """
${"=".repeat(50)} ${"=".repeat(50)}
[Failed signatures: ${failed.size}] [Failed signatures: ${failed.size}]
${failed.joinToString(separator = "\n") { it }} ${failed.joinToString(separator = "\n") { it }}
""".trimIndent() """.trimIndent()
) )
*/
} }
private fun Method.toStr(): String { private fun Method.toStr(): String {