Compare commits

..

14 Commits

Author SHA1 Message Date
semantic-release-bot
ef5fa9b4c9 chore(release): 2.23.0-dev.5 [skip ci]
# [2.23.0-dev.5](https://github.com/ReVanced/revanced-cli/compare/v2.23.0-dev.4...v2.23.0-dev.5) (2023-08-14)
2023-08-14 02:14:18 +00:00
oSumAtrIX
fc359923e3 build(Needs bump): Bump dependencies 2023-08-14 04:12:10 +02:00
semantic-release-bot
2e3cd90537 chore(release): 2.23.0-dev.4 [skip ci]
# [2.23.0-dev.4](https://github.com/ReVanced/revanced-cli/compare/v2.23.0-dev.3...v2.23.0-dev.4) (2023-08-13)

### Features

* show full package name when listing patches ([#240](https://github.com/ReVanced/revanced-cli/issues/240)) ([7174364](7174364ef8))
2023-08-13 11:44:20 +00:00
programminghoch10
7174364ef8 feat: show full package name when listing patches (#240) 2023-08-13 13:42:16 +02:00
oSumAtrIX
4c9d414228 docs: fix some mistakes 2023-08-10 02:06:13 +02:00
taku
5e73e6d2de docs: add missing prerequisites (#239)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2023-08-07 02:51:01 +02:00
semantic-release-bot
667ca3051c chore(release): 2.23.0-dev.3 [skip ci]
# [2.23.0-dev.3](https://github.com/ReVanced/revanced-cli/compare/v2.23.0-dev.2...v2.23.0-dev.3) (2023-08-03)
2023-08-03 18:41:14 +00:00
oSumAtrIX
9220642a7b build(Needs bump): Bump compatibility 2023-08-03 20:38:48 +02:00
semantic-release-bot
3f47235c64 chore(release): 2.23.0-dev.2 [skip ci]
# [2.23.0-dev.2](https://github.com/ReVanced/revanced-cli/compare/v2.23.0-dev.1...v2.23.0-dev.2) (2023-08-03)
2023-08-03 02:22:52 +00:00
oSumAtrIX
83b475c2e3 build(Needs bump): Update dependencies 2023-08-03 04:21:02 +02:00
semantic-release-bot
4105b638c0 chore(release): 2.23.0-dev.1 [skip ci]
# [2.23.0-dev.1](https://github.com/ReVanced/revanced-cli/compare/v2.22.1-dev.1...v2.23.0-dev.1) (2023-07-30)

### Features

* Improve command line argument descriptions ([f9cf7d2](f9cf7d21b7))
2023-07-30 00:52:33 +00:00
oSumAtrIX
f9cf7d21b7 feat: Improve command line argument descriptions 2023-07-30 02:49:49 +02:00
oSumAtrIX
0a758d86df build(Needs bump): Bump dependencies 2023-07-30 02:49:48 +02:00
oSumAtrIX
83f99e29ec ci: Change bumping commit scope 2023-07-30 02:49:39 +02:00
7 changed files with 69 additions and 38 deletions

View File

@@ -10,7 +10,7 @@
[ [
"@semantic-release/commit-analyzer", { "@semantic-release/commit-analyzer", {
"releaseRules": [ "releaseRules": [
{ "type": "build", "scope": "revanced-patcher", "release": "patch" } { "type": "build", "scope": "Needs bump", "release": "patch" }
] ]
} }
], ],

View File

@@ -1,3 +1,23 @@
# [2.23.0-dev.5](https://github.com/ReVanced/revanced-cli/compare/v2.23.0-dev.4...v2.23.0-dev.5) (2023-08-14)
# [2.23.0-dev.4](https://github.com/ReVanced/revanced-cli/compare/v2.23.0-dev.3...v2.23.0-dev.4) (2023-08-13)
### Features
* show full package name when listing patches ([#240](https://github.com/ReVanced/revanced-cli/issues/240)) ([7174364](https://github.com/ReVanced/revanced-cli/commit/7174364ef8ef5d6ce8351a8340f9c1a5b58eac3c))
# [2.23.0-dev.3](https://github.com/ReVanced/revanced-cli/compare/v2.23.0-dev.2...v2.23.0-dev.3) (2023-08-03)
# [2.23.0-dev.2](https://github.com/ReVanced/revanced-cli/compare/v2.23.0-dev.1...v2.23.0-dev.2) (2023-08-03)
# [2.23.0-dev.1](https://github.com/ReVanced/revanced-cli/compare/v2.22.1-dev.1...v2.23.0-dev.1) (2023-07-30)
### Features
* Improve command line argument descriptions ([f9cf7d2](https://github.com/ReVanced/revanced-cli/commit/f9cf7d21b7f1c2f11234d604a1047b9d2b165f83))
## [2.22.1-dev.1](https://github.com/ReVanced/revanced-cli/compare/v2.22.0...v2.22.1-dev.1) (2023-07-24) ## [2.22.1-dev.1](https://github.com/ReVanced/revanced-cli/compare/v2.22.0...v2.22.1-dev.1) (2023-07-24)

View File

@@ -11,6 +11,7 @@ val githubPassword: String = project.findProperty("gpr.key") as? String ?: Syste
repositories { repositories {
mavenCentral() mavenCentral()
mavenLocal() mavenLocal()
google()
maven { maven {
url = uri("https://maven.pkg.github.com/revanced/revanced-patcher") url = uri("https://maven.pkg.github.com/revanced/revanced-patcher")
credentials { credentials {
@@ -19,18 +20,17 @@ repositories {
} }
} }
maven { url = uri("https://jitpack.io") } maven { url = uri("https://jitpack.io") }
google()
} }
dependencies { dependencies {
implementation("org.jetbrains.kotlin:kotlin-reflect:1.8.20-RC") implementation("org.jetbrains.kotlin:kotlin-reflect:1.8.22")
implementation("app.revanced:revanced-patcher:11.0.3") implementation("app.revanced:revanced-patcher:13.0.0")
implementation("info.picocli:picocli:4.7.1") implementation("info.picocli:picocli:4.7.3")
implementation("com.github.revanced:jadb:2531a28109") // updated fork implementation("com.github.revanced:jadb:2531a28109") // Updated fork
implementation("com.android.tools.build:apksig:8.1.0-alpha09") implementation("com.android.tools.build:apksig:8.1.0")
implementation("org.bouncycastle:bcpkix-jdk15on:1.70") implementation("org.bouncycastle:bcpkix-jdk15on:1.70")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.14.+") implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.14.3")
testImplementation("org.jetbrains.kotlin:kotlin-test:1.8.20-RC") testImplementation("org.jetbrains.kotlin:kotlin-test:1.8.20-RC")
} }

View File

@@ -1,15 +1,17 @@
# 💼 Prerequisites # 💼 Prerequisites
To use ReVanced CLI, you will need to fulfill certain requirements. To use ReVanced CLI, you will need to fulfil specific requirements.
## 🤝 Requirements ## 🤝 Requirements
- Java SDK 11 (Azul JDK or OpenJDK) - Java SDK 11 (Azul Zulu JDK or OpenJDK)
- [Android Debug Bridge (adb)](https://developer.android.com/studio/command-line/adb) if you want to deploy the patched APK file on your device - [Android Debug Bridge (adb)](https://developer.android.com/studio/command-line/adb) if you want to deploy the patched APK file on your device
- An ABI other than ARMv7 such as x86 or x86-64 (or a custom AAPT binary that supports ARMv7) - An ABI other than ARMv7 such as x86 or x86-64 (or a custom AAPT binary that supports ARMv7)
- ReVanced Patches
- ReVanced Integrations, if the patches require it
## ⏭️ Whats next ## ⏭️ Whats next
The next section will show, how to use [ReVanced CLI](https://github.com/revanced/revanced-cli). The following section will show you how to use ReVanced CLI.
Continue: [🛠️ Using ReVanced CLI](1_usage.md) Continue: [🛠️ Using ReVanced CLI](1_usage.md)

View File

@@ -1,4 +1,4 @@
org.gradle.parallel = true org.gradle.parallel = true
org.gradle.caching = true org.gradle.caching = true
kotlin.code.style = official kotlin.code.style = official
version = 2.22.1-dev.1 version = 2.23.0-dev.5

View File

@@ -32,7 +32,7 @@ private class CLIVersionProvider : IVersionProvider {
} }
@Command( @Command(
name = "ReVanced-CLI", name = "ReVanced CLI",
mixinStandardHelpOptions = true, mixinStandardHelpOptions = true,
versionProvider = CLIVersionProvider::class versionProvider = CLIVersionProvider::class
) )
@@ -44,15 +44,15 @@ internal object MainCommand : Runnable {
class Args { class Args {
// TODO: Move this so it is not required when listing patches // TODO: Move this so it is not required when listing patches
@Option(names = ["-a", "--apk"], description = ["Input APK file to be patched"], required = true) @Option(names = ["-a", "--apk"], description = ["APK file to be patched"], required = true)
lateinit var inputFile: File lateinit var inputFile: File
@Option(names = ["--uninstall"], description = ["Uninstall the mount variant"]) @Option(names = ["--unmount"], description = ["Unmount a patched APK file"])
var uninstall: Boolean = false var unmount: Boolean = false
@Option( @Option(
names = ["-d", "--deploy-on"], names = ["-d", "--deploy"],
description = ["If specified, deploy to device over ADB with given name"] description = ["Deploy to the specified device that is connected via ADB"]
) )
var deploy: String? = null var deploy: String? = null
@@ -78,63 +78,72 @@ internal object MainCommand : Runnable {
@Option(names = ["-l", "--list"], description = ["List patches"], required = true) @Option(names = ["-l", "--list"], description = ["List patches"], required = true)
var listOnly: Boolean = false var listOnly: Boolean = false
@Option(names = ["--with-versions"], description = ["List patches with compatible versions"]) @Option(names = ["--with-versions"], description = ["List patches with version compatibilities"])
var withVersions: Boolean = false var withVersions: Boolean = false
@Option(names = ["--with-packages"], description = ["List patches with compatible packages"]) @Option(names = ["--with-packages"], description = ["List patches with package compatibilities"])
var withPackages: Boolean = false var withPackages: Boolean = false
} }
class PatchingArgs { class PatchingArgs {
@Option(names = ["-o", "--out"], description = ["Output file path"], required = true) @Option(names = ["-o", "--out"], description = ["Path to save the patched APK file to"], required = true)
lateinit var outputPath: String lateinit var outputPath: String
@Option(names = ["-e", "--exclude"], description = ["Explicitly exclude patches"]) @Option(names = ["-e", "--exclude"], description = ["Exclude patches"])
var excludedPatches = arrayOf<String>() var excludedPatches = arrayOf<String>()
@Option( @Option(
names = ["--exclusive"], names = ["--exclusive"],
description = ["Only installs the patches you include, not including any patch by default"] description = ["Only include patches that were explicitly specified to be included"]
) )
var exclusive = false var exclusive = false
@Option(names = ["-i", "--include"], description = ["Include patches"]) @Option(names = ["-i", "--include"], description = ["Include patches"])
var includedPatches = arrayOf<String>() var includedPatches = arrayOf<String>()
@Option(names = ["--experimental"], description = ["Disable patch version compatibility patch"]) @Option(names = ["--experimental"], description = ["Ignore patches incompatibility to versions"])
var experimental: Boolean = false var experimental: Boolean = false
@Option(names = ["-m", "--merge"], description = ["One or more dex file containers to merge"]) @Option(names = ["-m", "--merge"], description = ["One or more DEX files or containers to merge into the APK"])
var mergeFiles = listOf<File>() var mergeFiles = listOf<File>()
@Option(names = ["--mount"], description = ["If specified, instead of installing, mount"]) @Option(
names = ["--mount"],
description = ["Mount the patched APK file over the original file instead of installing it"]
)
var mount: Boolean = false var mount: Boolean = false
@Option(names = ["--cn"], description = ["Overwrite the default CN for the signed file"]) @Option(names = ["--cn"], description = ["The common name of the signer of the patched APK file"])
var cn = "ReVanced" var cn = "ReVanced"
@Option(names = ["--keystore"], description = ["File path to your keystore"]) @Option(names = ["--keystore"], description = ["Path to the keystore to sign the patched APK file with"])
var keystorePath: String? = null var keystorePath: String? = null
@Option(names = ["-p", "--password"], description = ["Overwrite the default password for the signed file"]) @Option(
names = ["-p", "--password"],
description = ["The password of the keystore to sign the patched APK file with"]
)
var password = "ReVanced" var password = "ReVanced"
@Option(names = ["-t", "--temp-dir"], description = ["Temporary resource cache directory"]) @Option(names = ["-t", "--temp-dir"], description = ["Path to temporary resource cache directory"])
var cacheDirectory = "revanced-cache" var cacheDirectory = "revanced-cache"
@Option( @Option(
names = ["-c", "--clean"], names = ["-c", "--clean"],
description = ["Clean the temporary resource cache directory. This will be done anyways when running the patcher"] description = ["Clean up the temporary resource cache directory after patching"]
) )
var clean: Boolean = false var clean: Boolean = false
@Option(names = ["--custom-aapt2-binary"], description = ["Path to custom aapt2 binary"]) @Option(
names = ["--custom-aapt2-binary"],
description = ["Path to custom AAPT binary to compile resources with"]
)
var aaptPath: String = "" var aaptPath: String = ""
} }
override fun run() { override fun run() {
if (args.patchArgs?.listingArgs?.listOnly == true) return printListOfPatches() if (args.patchArgs?.listingArgs?.listOnly == true) return printListOfPatches()
if (args.uninstall) return uninstall() if (args.unmount) return unmount()
val pArgs = this.args.patchArgs?.patchingArgs ?: return val pArgs = this.args.patchArgs?.patchingArgs ?: return
val outputFile = File(pArgs.outputPath) // the file to write to val outputFile = File(pArgs.outputPath) // the file to write to
@@ -215,7 +224,7 @@ internal object MainCommand : Runnable {
logger.info(result) logger.info(result)
} }
private fun uninstall() { private fun unmount() {
val adb: Adb? = args.deploy?.let { val adb: Adb? = args.deploy?.let {
Adb( Adb(
File("placeholder_file"), File("placeholder_file"),
@@ -236,7 +245,7 @@ internal object MainCommand : Runnable {
val packageEntryStr = buildString { val packageEntryStr = buildString {
// Add package if flag is set // Add package if flag is set
if (args.patchArgs?.listingArgs?.withPackages == true) { if (args.patchArgs?.listingArgs?.withPackages == true) {
val packageName = compatiblePackage.name.substringAfterLast(".").padStart(10) val packageName = compatiblePackage.name.padStart(25)
append(packageName) append(packageName)
append("\t") append("\t")
} }

View File

@@ -11,7 +11,7 @@ internal class Adb(
private val file: File, private val file: File,
private val packageName: String, private val packageName: String,
deviceName: String, deviceName: String,
private val modeInstall: Boolean = false, private val install: Boolean = false,
private val logging: Boolean = true private val logging: Boolean = true
) { ) {
private val device: JadbDevice private val device: JadbDevice
@@ -20,7 +20,7 @@ internal class Adb(
device = JadbConnection().devices.let { device -> device.find { it.serial == deviceName } ?: device.first() } device = JadbConnection().devices.let { device -> device.find { it.serial == deviceName } ?: device.first() }
?: throw IllegalArgumentException("No such device with name $deviceName") ?: throw IllegalArgumentException("No such device with name $deviceName")
if (!modeInstall && device.run("su -h", false) != 0) if (!install && device.run("su -h", false) != 0)
throw IllegalArgumentException("Root required on $deviceName. Task failed") throw IllegalArgumentException("Root required on $deviceName. Task failed")
} }
@@ -29,7 +29,7 @@ internal class Adb(
} }
internal fun deploy() { internal fun deploy() {
if (modeInstall) { if (install) {
logger.info("Installing without mounting") logger.info("Installing without mounting")
PackageManager(device).install(file) PackageManager(device).install(file)