feat: Add CLI

This commit is contained in:
oSumAtrIX
2022-04-08 23:49:31 +02:00
commit 6664f49a11
13 changed files with 516 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
package app.revanced.cli
import app.revanced.cli.utils.SignatureParser
import app.revanced.patcher.Patcher
import app.revanced.patches.Index.patches
import java.io.File
fun main(args: Array<String>) {
val patcher = Patcher(
File(args[0]), // in.apk
File(args[1]), // out path
SignatureParser.parse(args[2]).toTypedArray() // signatures.json
)
// load all patches
for (patch in patches) {
patcher.addPatches(patch())
}
// apply all patches
patcher.applyPatches().forEach{ (name, result) ->
println("$name: $result")
}
// save patched apk
patcher.save()
}

View File

@@ -0,0 +1,43 @@
package app.revanced.cli.utils
import com.google.gson.JsonParser
import java.io.File
import app.revanced.patcher.signature.MethodSignature
import org.jf.dexlib2.AccessFlags
import org.jf.dexlib2.Opcodes
class SignatureParser {
companion object {
fun parse(signatureJsonPath: String): List<MethodSignature> {
val json = File(signatureJsonPath).readText()
val signatures = JsonParser.parseString(json).asJsonObject.get("signatures").asJsonArray.map { sig ->
val signature = sig.asJsonObject
val returnType = signature.get("returns").asString
var accessFlags = 0
signature
.get("accessors").asJsonArray
.forEach { accessFlags = accessFlags or AccessFlags.getAccessFlag(it.asString).value }
val parameters = signature.get("parameters").asJsonArray
.map { it.asString }
.toTypedArray()
val opcodes = signature.get("opcodes").asJsonArray
.map { Opcodes.getDefault().getOpcodeByName(it.asString)!! }
.toTypedArray()
MethodSignature(
signature.get("name").asString,
returnType,
accessFlags,
parameters,
opcodes
)
}
return signatures
}
}
}