mirror of
https://github.com/ReVanced/revanced-cli.git
synced 2026-01-18 08:53:58 +00:00
feat: Add CLI
This commit is contained in:
27
src/main/kotlin/app/revanced/cli/Main.kt
Normal file
27
src/main/kotlin/app/revanced/cli/Main.kt
Normal 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()
|
||||
}
|
||||
43
src/main/kotlin/app/revanced/cli/utils/SignatureParser.kt
Normal file
43
src/main/kotlin/app/revanced/cli/utils/SignatureParser.kt
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user