mirror of
https://github.com/ReVanced/revanced-cli.git
synced 2026-01-18 00:43:58 +00:00
Compare commits
37 Commits
v5.0.0-dev
...
patcher22
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b8f4f1eea3 | ||
|
|
356ee97e01 | ||
|
|
8e18082862 | ||
|
|
77862e8940 | ||
|
|
f29eda8674 | ||
|
|
bba90fede8 | ||
|
|
1717cc66f7 | ||
|
|
0c53a2d1d7 | ||
|
|
a0189aeaee | ||
|
|
19e8422588 | ||
|
|
d908595b22 | ||
|
|
68a48724eb | ||
|
|
bf31de4148 | ||
|
|
63b6350afc | ||
|
|
5d8beae7be | ||
|
|
dbbc00706d | ||
|
|
98ff0c34fa | ||
|
|
77be717de0 | ||
|
|
1bb0d13726 | ||
|
|
18e56e6ff4 | ||
|
|
94b9e2bc6c | ||
|
|
c2dc9d76be | ||
|
|
3d0c8c1526 | ||
|
|
b54308b0e2 | ||
|
|
504c6c1ea5 | ||
|
|
f58b101636 | ||
|
|
292b93b609 | ||
|
|
e60a61b098 | ||
|
|
1da8ae9e46 | ||
|
|
a9f2538827 | ||
|
|
5f952f35f5 | ||
|
|
280ded2281 | ||
|
|
bb6bc1ba9a | ||
|
|
04b178b701 | ||
|
|
32e6aae132 | ||
|
|
7ee4f15ab9 | ||
|
|
a7af611ef0 |
2
.github/workflows/build_pull_request.yml
vendored
2
.github/workflows/build_pull_request.yml
vendored
@@ -13,8 +13,6 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Cache Gradle
|
- name: Cache Gradle
|
||||||
uses: burrunan/gradle-cache-action@v1
|
uses: burrunan/gradle-cache-action@v1
|
||||||
|
|||||||
21
.github/workflows/release.yml
vendored
21
.github/workflows/release.yml
vendored
@@ -10,15 +10,14 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
release:
|
release:
|
||||||
name: Release
|
name: Release
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
id-token: write
|
||||||
|
attestations: write
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
|
||||||
# Make sure the release step uses its own credentials:
|
|
||||||
# https://github.com/cycjimmy/semantic-release-action#private-packages
|
|
||||||
persist-credentials: false
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Cache Gradle
|
- name: Cache Gradle
|
||||||
uses: burrunan/gradle-cache-action@v1
|
uses: burrunan/gradle-cache-action@v1
|
||||||
@@ -45,6 +44,14 @@ jobs:
|
|||||||
fingerprint: ${{ vars.GPG_FINGERPRINT }}
|
fingerprint: ${{ vars.GPG_FINGERPRINT }}
|
||||||
|
|
||||||
- name: Release
|
- name: Release
|
||||||
|
uses: cycjimmy/semantic-release-action@v4
|
||||||
|
id: release
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: npm exec semantic-release
|
|
||||||
|
- name: Attest
|
||||||
|
if: steps.release.outputs.new_release_published == 'true'
|
||||||
|
uses: actions/attest-build-provenance@v2
|
||||||
|
with:
|
||||||
|
subject-name: 'ReVanced CLI ${{ steps.release.outputs.new_release_git_tag }}'
|
||||||
|
subject-path: build/libs/revanced-cli*.jar
|
||||||
|
|||||||
@@ -23,7 +23,8 @@
|
|||||||
"assets": [
|
"assets": [
|
||||||
"CHANGELOG.md",
|
"CHANGELOG.md",
|
||||||
"gradle.properties"
|
"gradle.properties"
|
||||||
]
|
],
|
||||||
|
"message": "chore: Release v${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
|
|||||||
94
CHANGELOG.md
94
CHANGELOG.md
@@ -1,3 +1,97 @@
|
|||||||
|
## [5.0.2-dev.2](https://github.com/ReVanced/revanced-cli/compare/v5.0.2-dev.1...v5.0.2-dev.2) (2025-04-25)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Do not print patch description if null ([bba90fe](https://github.com/ReVanced/revanced-cli/commit/bba90fede85e4632efb9509e5bcf9091a9435549))
|
||||||
|
|
||||||
|
## [5.0.2-dev.1](https://github.com/ReVanced/revanced-cli/compare/v5.0.1...v5.0.2-dev.1) (2025-04-20)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Group `mount` and `install` options into an argument group ([#364](https://github.com/ReVanced/revanced-cli/issues/364)) ([0c53a2d](https://github.com/ReVanced/revanced-cli/commit/0c53a2d1d75d3d934d134594751fe6cd0b000d1a))
|
||||||
|
|
||||||
|
## [5.0.1](https://github.com/ReVanced/revanced-cli/compare/v5.0.0...v5.0.1) (2025-04-14)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Make mounting work again by bumping dependencies ([#359](https://github.com/ReVanced/revanced-cli/issues/359)) ([68a4872](https://github.com/ReVanced/revanced-cli/commit/68a48724ebf01a0c8f8adc0fec63037bff672dc9))
|
||||||
|
|
||||||
|
## [5.0.1-dev.1](https://github.com/ReVanced/revanced-cli/compare/v5.0.0...v5.0.1-dev.1) (2025-02-26)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Make mounting work again by bumping dependencies ([#359](https://github.com/ReVanced/revanced-cli/issues/359)) ([68a4872](https://github.com/ReVanced/revanced-cli/commit/68a48724ebf01a0c8f8adc0fec63037bff672dc9))
|
||||||
|
|
||||||
|
# [5.0.0](https://github.com/ReVanced/revanced-cli/compare/v4.6.0...v5.0.0) (2024-11-10)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Check for null when no device serial was specified ([1da8ae9](https://github.com/ReVanced/revanced-cli/commit/1da8ae9e46000dd3c4eecd793c559e75012cf535))
|
||||||
|
* List if patch option is required ([#346](https://github.com/ReVanced/revanced-cli/issues/346)) ([98ff0c3](https://github.com/ReVanced/revanced-cli/commit/98ff0c34fa71c3b3ecd96157d45a30ee2b8979c6))
|
||||||
|
* Make CLI ArgGroup non-exclusive to be able to disable and enable patches at the same time ([1bb0d13](https://github.com/ReVanced/revanced-cli/commit/1bb0d13726fd5790c59cb6d28df3618c7606710d))
|
||||||
|
* Make patches selectable by using a mutable collection for the selection option ([751fa1d](https://github.com/ReVanced/revanced-cli/commit/751fa1d889f40c51b291116029fd84f2b051f2f0))
|
||||||
|
* Make the patch command work without specifying any selection ([ba159a3](https://github.com/ReVanced/revanced-cli/commit/ba159a35a9a99d18a4c1e04128b08ae336a49b3e))
|
||||||
|
* Print in new line correctly ([c2dc9d7](https://github.com/ReVanced/revanced-cli/commit/c2dc9d76be33c98284741e23c406500483c47753))
|
||||||
|
* Use the first connected device when no ADB device is specified ([5f952f3](https://github.com/ReVanced/revanced-cli/commit/5f952f35f5cb388b6509b2b4d905b8143ebc7996))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* Set patch options via CLI ([#336](https://github.com/ReVanced/revanced-cli/issues/336)) ([2300243](https://github.com/ReVanced/revanced-cli/commit/23002434b2d51c2a3b30b33dd0526261432d90ce))
|
||||||
|
* Show error about no installation device found at the beginning ([3300e6b](https://github.com/ReVanced/revanced-cli/commit/3300e6b4333ed1c4e6785cb82eca9016fc6d4a20))
|
||||||
|
* Simplify command and option names and descriptions ([#338](https://github.com/ReVanced/revanced-cli/issues/338)) ([6e7797a](https://github.com/ReVanced/revanced-cli/commit/6e7797a3f0525a8f48af7182157da0d045600ac2))
|
||||||
|
* Simplify option descriptions ([45c998b](https://github.com/ReVanced/revanced-cli/commit/45c998b335b65ac233fece8b804dc7410142691c))
|
||||||
|
|
||||||
|
|
||||||
|
### BREAKING CHANGES
|
||||||
|
|
||||||
|
* Options have been renamed.
|
||||||
|
* This commit changes various CLI options and removes the `options.json` file. Instead, patch options can now be passed via CLI options
|
||||||
|
|
||||||
|
# [5.0.0-dev.11](https://github.com/ReVanced/revanced-cli/compare/v5.0.0-dev.10...v5.0.0-dev.11) (2024-11-10)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* List if patch option is required ([#346](https://github.com/ReVanced/revanced-cli/issues/346)) ([98ff0c3](https://github.com/ReVanced/revanced-cli/commit/98ff0c34fa71c3b3ecd96157d45a30ee2b8979c6))
|
||||||
|
|
||||||
|
# [5.0.0-dev.10](https://github.com/ReVanced/revanced-cli/compare/v5.0.0-dev.9...v5.0.0-dev.10) (2024-11-05)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Make CLI ArgGroup non-exclusive to be able to disable and enable patches at the same time ([1bb0d13](https://github.com/ReVanced/revanced-cli/commit/1bb0d13726fd5790c59cb6d28df3618c7606710d))
|
||||||
|
|
||||||
|
# [5.0.0-dev.9](https://github.com/ReVanced/revanced-cli/compare/v5.0.0-dev.8...v5.0.0-dev.9) (2024-11-05)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Print in new line correctly ([c2dc9d7](https://github.com/ReVanced/revanced-cli/commit/c2dc9d76be33c98284741e23c406500483c47753))
|
||||||
|
|
||||||
|
# [5.0.0-dev.8](https://github.com/ReVanced/revanced-cli/compare/v5.0.0-dev.7...v5.0.0-dev.8) (2024-10-17)
|
||||||
|
|
||||||
|
# [5.0.0-dev.7](https://github.com/ReVanced/revanced-cli/compare/v5.0.0-dev.6...v5.0.0-dev.7) (2024-10-16)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Check for null when no device serial was specified ([1da8ae9](https://github.com/ReVanced/revanced-cli/commit/1da8ae9e46000dd3c4eecd793c559e75012cf535))
|
||||||
|
|
||||||
|
# [5.0.0-dev.6](https://github.com/ReVanced/revanced-cli/compare/v5.0.0-dev.5...v5.0.0-dev.6) (2024-10-10)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Use the first connected device when no ADB device is specified ([5f952f3](https://github.com/ReVanced/revanced-cli/commit/5f952f35f5cb388b6509b2b4d905b8143ebc7996))
|
||||||
|
|
||||||
|
# [5.0.0-dev.5](https://github.com/ReVanced/revanced-cli/compare/v5.0.0-dev.4...v5.0.0-dev.5) (2024-09-30)
|
||||||
|
|
||||||
# [5.0.0-dev.4](https://github.com/ReVanced/revanced-cli/compare/v5.0.0-dev.3...v5.0.0-dev.4) (2024-09-17)
|
# [5.0.0-dev.4](https://github.com/ReVanced/revanced-cli/compare/v5.0.0-dev.3...v5.0.0-dev.4) (2024-09-17)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -63,11 +63,11 @@
|
|||||||

|

|
||||||

|

|
||||||
|
|
||||||
Command line application to use ReVanced.
|
Command-line application to use ReVanced.
|
||||||
|
|
||||||
## ❓ About
|
## ❓ About
|
||||||
|
|
||||||
ReVanced CLI is a command line application that uses [ReVanced Patcher](https://github.com/revanced/revanced-patcher) to patch Android apps.
|
ReVanced CLI is a command-line application that uses [ReVanced Patcher](https://github.com/revanced/revanced-patcher) to patch Android apps.
|
||||||
|
|
||||||
## 💪 Features
|
## 💪 Features
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ Some of the features ReVanced CLI provides are:
|
|||||||
|
|
||||||
- 💉 **Patch apps**: Harness ReVanced Patcher to patch Android apps
|
- 💉 **Patch apps**: Harness ReVanced Patcher to patch Android apps
|
||||||
- 💾 **Install and uninstall apps**: Install and uninstall Apps via ADB,
|
- 💾 **Install and uninstall apps**: Install and uninstall Apps via ADB,
|
||||||
using the Android package manager, or by mounting using root permissions
|
using the Android package manager or by mounting using root permissions
|
||||||
- 📃 **List patches from patch bundles**: List available patches, compatible packages, and versions
|
- 📃 **List patches from patch bundles**: List available patches, compatible packages, and versions
|
||||||
- 💪 **Flexibility and functionality**: Apply any combination of patches to any version of Android apps
|
- 💪 **Flexibility and functionality**: Apply any combination of patches to any version of Android apps
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ application {
|
|||||||
}
|
}
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
google()
|
google()
|
||||||
maven {
|
maven {
|
||||||
@@ -28,6 +29,8 @@ repositories {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(libs.bcpg.jdk18on)
|
||||||
|
implementation(libs.sigstore.java)
|
||||||
implementation(libs.revanced.patcher)
|
implementation(libs.revanced.patcher)
|
||||||
implementation(libs.revanced.library)
|
implementation(libs.revanced.library)
|
||||||
implementation(libs.kotlinx.coroutines.core)
|
implementation(libs.kotlinx.coroutines.core)
|
||||||
@@ -59,10 +62,10 @@ tasks {
|
|||||||
}
|
}
|
||||||
|
|
||||||
shadowJar {
|
shadowJar {
|
||||||
|
exclude("/prebuilt/linux/aapt", "/prebuilt/windows/aapt.exe", "/prebuilt/*/aapt_*")
|
||||||
minimize {
|
minimize {
|
||||||
exclude(dependency("org.jetbrains.kotlin:.*"))
|
|
||||||
exclude(dependency("org.bouncycastle:.*"))
|
exclude(dependency("org.bouncycastle:.*"))
|
||||||
exclude(dependency("app.revanced:.*"))
|
exclude(dependency("app.revanced:revanced-patcher"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ java -jar revanced-cli.jar patch -p patches.rvp input.apk
|
|||||||
You can also use multiple RVP files:
|
You can also use multiple RVP files:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
java -jar revanced-cli.jar patch -p patches.rvp -b another-patches.rvp input.apk
|
java -jar revanced-cli.jar patch -p patches.rvp -p another-patches.rvp input.apk
|
||||||
```
|
```
|
||||||
|
|
||||||
To change the default set of enabled or disabled patches, use the option `-e` or `-d` to enable or disable specific patches.
|
To change the default set of enabled or disabled patches, use the option `-e` or `-d` to enable or disable specific patches.
|
||||||
@@ -51,13 +51,13 @@ java -jar revanced-cli.jar list-patches patches.rvp
|
|||||||
Then you can use the indices to enable or disable patches:
|
Then you can use the indices to enable or disable patches:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
java -jar revanced-cli.jar patch -b patches.rvp --ei 123 --di 456 input.apk
|
java -jar revanced-cli.jar patch -p patches.rvp --ei 123 --di 456 input.apk
|
||||||
```
|
```
|
||||||
|
|
||||||
You can combine the option `-e`, `-d`, `--ei`, `--di` and `--exclusive`. Here is an example:
|
You can combine the option `-e`, `-d`, `--ei`, `--di` and `--exclusive`. Here is an example:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
java -jar revanced-cli.jar patch -p patches.rvp --exclusive -i "Patch name" --ei 123 input.apk
|
java -jar revanced-cli.jar patch -p patches.rvp --exclusive -e "Patch name" --ei 123 input.apk
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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 = 5.0.0-dev.4
|
version = 5.0.2-dev.2
|
||||||
|
|||||||
@@ -1,18 +1,22 @@
|
|||||||
[versions]
|
[versions]
|
||||||
shadow = "8.1.1"
|
bcpg-jdk18on = "1.82"
|
||||||
kotlin = "2.0.0"
|
shadow = "9.3.1"
|
||||||
kotlinx = "1.8.1"
|
kotlin = "2.3.0"
|
||||||
picocli = "4.7.6"
|
kotlinx = "1.10.2"
|
||||||
revanced-patcher = "20.0.0"
|
picocli = "4.7.7"
|
||||||
revanced-library = "3.0.0"
|
revanced-patcher = "22.0.0-local"
|
||||||
|
revanced-library = "3.2.0-dev.2-local"
|
||||||
|
sigstore = "2.0.0"
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
|
bcpg-jdk18on = { module = "org.bouncycastle:bcpg-jdk18on", version.ref = "bcpg-jdk18on" }
|
||||||
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
|
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
|
||||||
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx" }
|
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx" }
|
||||||
picocli = { module = "info.picocli:picocli", version.ref = "picocli" }
|
picocli = { module = "info.picocli:picocli", version.ref = "picocli" }
|
||||||
revanced-patcher = { module = "app.revanced:revanced-patcher", version.ref = "revanced-patcher" }
|
revanced-patcher = { module = "app.revanced:revanced-patcher", version.ref = "revanced-patcher" }
|
||||||
revanced-library = { module = "app.revanced:revanced-library-jvm", version.ref = "revanced-library" }
|
revanced-library = { module = "app.revanced:revanced-library-jvm", version.ref = "revanced-library" }
|
||||||
|
sigstore-java = { module = "dev.sigstore:sigstore-java", version.ref = "sigstore" }
|
||||||
|
|
||||||
[plugins]
|
[plugins]
|
||||||
shadow = { id = "com.github.johnrengelman.shadow", version.ref = "shadow" }
|
shadow = { id = "com.gradleup.shadow", version.ref = "shadow" }
|
||||||
kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
|
kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
|
||||||
|
|||||||
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
3
gradle/wrapper/gradle-wrapper.properties
vendored
3
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,7 +1,6 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionSha256Sum=d725d707bfabd4dfdc958c624003b3c80accc03f7037b5122c4b1d0ef15cecab
|
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
|
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|||||||
7
gradlew
vendored
7
gradlew
vendored
@@ -15,6 +15,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
#
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#
|
#
|
||||||
@@ -55,7 +57,7 @@
|
|||||||
# Darwin, MinGW, and NonStop.
|
# Darwin, MinGW, and NonStop.
|
||||||
#
|
#
|
||||||
# (3) This script is generated from the Groovy template
|
# (3) This script is generated from the Groovy template
|
||||||
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||||
# within the Gradle project.
|
# within the Gradle project.
|
||||||
#
|
#
|
||||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||||
@@ -84,7 +86,8 @@ done
|
|||||||
# shellcheck disable=SC2034
|
# shellcheck disable=SC2034
|
||||||
APP_BASE_NAME=${0##*/}
|
APP_BASE_NAME=${0##*/}
|
||||||
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
||||||
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
|
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
|
||||||
|
' "$PWD" ) || exit
|
||||||
|
|
||||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||||
MAX_FD=maximum
|
MAX_FD=maximum
|
||||||
|
|||||||
2
gradlew.bat
vendored
2
gradlew.bat
vendored
@@ -13,6 +13,8 @@
|
|||||||
@rem See the License for the specific language governing permissions and
|
@rem See the License for the specific language governing permissions and
|
||||||
@rem limitations under the License.
|
@rem limitations under the License.
|
||||||
@rem
|
@rem
|
||||||
|
@rem SPDX-License-Identifier: Apache-2.0
|
||||||
|
@rem
|
||||||
|
|
||||||
@if "%DEBUG%"=="" @echo off
|
@if "%DEBUG%"=="" @echo off
|
||||||
@rem ##########################################################################
|
@rem ##########################################################################
|
||||||
|
|||||||
2387
package-lock.json
generated
2387
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -3,7 +3,7 @@
|
|||||||
"@saithodev/semantic-release-backmerge": "^4.0.1",
|
"@saithodev/semantic-release-backmerge": "^4.0.1",
|
||||||
"@semantic-release/changelog": "^6.0.3",
|
"@semantic-release/changelog": "^6.0.3",
|
||||||
"@semantic-release/git": "^10.0.1",
|
"@semantic-release/git": "^10.0.1",
|
||||||
"gradle-semantic-release-plugin": "^1.9.1",
|
"gradle-semantic-release-plugin": "^1.10.1",
|
||||||
"semantic-release": "^23.0.8"
|
"semantic-release": "^24.1.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,57 +85,55 @@ internal object ListPatchesCommand : Runnable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PatchOption<*>.buildString() =
|
fun PatchOption<*>.buildString() = buildString {
|
||||||
|
appendLine("Title: $title")
|
||||||
|
description?.let { appendLine("Description: $it") }
|
||||||
|
appendLine("Required: $required")
|
||||||
|
default?.let {
|
||||||
|
appendLine("Key: $key")
|
||||||
|
append("Default: $it")
|
||||||
|
} ?: append("Key: $key")
|
||||||
|
|
||||||
|
values?.let { values ->
|
||||||
|
appendLine("\nPossible values:")
|
||||||
|
append(values.map { "${it.value} (${it.key})" }.joinToString("\n").prependIndent("\t"))
|
||||||
|
}
|
||||||
|
|
||||||
|
append("\nType: $type")
|
||||||
|
}
|
||||||
|
|
||||||
|
fun IndexedValue<Patch<*>>.buildString() = let { (index, patch) ->
|
||||||
buildString {
|
buildString {
|
||||||
appendLine("Title: $title")
|
if (withIndex) appendLine("Index: $index")
|
||||||
description?.let { appendLine("Description: $it") }
|
|
||||||
default?.let {
|
|
||||||
appendLine("Key: $key")
|
|
||||||
append("Default: $it")
|
|
||||||
} ?: append("Key: $key")
|
|
||||||
|
|
||||||
values?.let { values ->
|
append("Name: ${patch.name}")
|
||||||
appendLine("\nPossible values:")
|
|
||||||
append(values.map { "${it.value} (${it.key})" }.joinToString("\n").prependIndent("\t"))
|
if (withDescriptions) patch.description?.let { append("\nDescription: $it") }
|
||||||
|
|
||||||
|
append("\nEnabled: ${patch.use}")
|
||||||
|
|
||||||
|
if (withOptions && patch.options.isNotEmpty()) {
|
||||||
|
appendLine("\nOptions:")
|
||||||
|
append(
|
||||||
|
patch.options.values.joinToString("\n\n") { option ->
|
||||||
|
option.buildString()
|
||||||
|
}.prependIndent("\t"),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
append("\nType: $type")
|
if (withPackages && patch.compatiblePackages != null) {
|
||||||
}
|
appendLine("\nCompatible packages:")
|
||||||
|
append(
|
||||||
fun IndexedValue<Patch<*>>.buildString() =
|
patch.compatiblePackages!!.joinToString("\n") {
|
||||||
let { (index, patch) ->
|
it.buildString()
|
||||||
buildString {
|
}.prependIndent("\t"),
|
||||||
if (withIndex) appendLine("Index: $index")
|
)
|
||||||
|
|
||||||
append("Name: ${patch.name}")
|
|
||||||
|
|
||||||
if (withDescriptions) append("\nDescription: ${patch.description}")
|
|
||||||
|
|
||||||
append("Enabled: ${patch.use}")
|
|
||||||
|
|
||||||
if (withOptions && patch.options.isNotEmpty()) {
|
|
||||||
appendLine("\nOptions:")
|
|
||||||
append(
|
|
||||||
patch.options.values.joinToString("\n\n") { option ->
|
|
||||||
option.buildString()
|
|
||||||
}.prependIndent("\t"),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (withPackages && patch.compatiblePackages != null) {
|
|
||||||
appendLine("\nCompatible packages:")
|
|
||||||
append(
|
|
||||||
patch.compatiblePackages!!.joinToString("\n") {
|
|
||||||
it.buildString()
|
|
||||||
}.prependIndent("\t"),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun Patch<*>.filterCompatiblePackages(name: String) =
|
fun Patch<*>.filterCompatiblePackages(name: String) = compatiblePackages?.any { (compatiblePackageName, _) -> compatiblePackageName == name }
|
||||||
compatiblePackages?.any { (compatiblePackageName, _) -> compatiblePackageName == name }
|
?: withUniversalPatches
|
||||||
?: withUniversalPatches
|
|
||||||
|
|
||||||
val patches = loadPatchesFromJar(patchesFiles).withIndex().toList()
|
val patches = loadPatchesFromJar(patchesFiles).withIndex().toList()
|
||||||
|
|
||||||
|
|||||||
@@ -29,11 +29,11 @@ internal object PatchCommand : Runnable {
|
|||||||
@Spec
|
@Spec
|
||||||
private lateinit var spec: CommandSpec
|
private lateinit var spec: CommandSpec
|
||||||
|
|
||||||
@ArgGroup(multiplicity = "0..*")
|
@ArgGroup(exclusive = false, multiplicity = "0..*")
|
||||||
private var selection = mutableSetOf<Selection>()
|
private var selection = mutableSetOf<Selection>()
|
||||||
|
|
||||||
internal class Selection {
|
internal class Selection {
|
||||||
@ArgGroup(exclusive = false, multiplicity = "1")
|
@ArgGroup(exclusive = false)
|
||||||
internal var enabled: EnableSelection? = null
|
internal var enabled: EnableSelection? = null
|
||||||
|
|
||||||
internal class EnableSelection {
|
internal class EnableSelection {
|
||||||
@@ -65,7 +65,7 @@ internal object PatchCommand : Runnable {
|
|||||||
internal var options = mutableMapOf<String, Any?>()
|
internal var options = mutableMapOf<String, Any?>()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ArgGroup(exclusive = false, multiplicity = "1")
|
@ArgGroup(exclusive = false)
|
||||||
internal var disable: DisableSelection? = null
|
internal var disable: DisableSelection? = null
|
||||||
|
|
||||||
internal class DisableSelection {
|
internal class DisableSelection {
|
||||||
@@ -115,21 +115,27 @@ internal object PatchCommand : Runnable {
|
|||||||
this.outputFilePath = outputFilePath?.absoluteFile
|
this.outputFilePath = outputFilePath?.absoluteFile
|
||||||
}
|
}
|
||||||
|
|
||||||
@CommandLine.Option(
|
@ArgGroup(exclusive = false, multiplicity = "0..1")
|
||||||
names = ["-i", "--install"],
|
internal var installation: Installation? = null
|
||||||
description = ["Serial of the ADB device to install to. If not specified, the first connected device will be used."],
|
|
||||||
// Empty string to indicate that the first connected device should be used.
|
|
||||||
fallbackValue = "",
|
|
||||||
arity = "0..1",
|
|
||||||
)
|
|
||||||
private var deviceSerial: String? = null
|
|
||||||
|
|
||||||
@CommandLine.Option(
|
internal class Installation {
|
||||||
names = ["--mount"],
|
@CommandLine.Option(
|
||||||
description = ["Install the patched APK file by mounting."],
|
names = ["-i", "--install"],
|
||||||
showDefaultValue = ALWAYS,
|
required = true,
|
||||||
)
|
description = ["Serial of the ADB device to install to. If not specified, the first connected device will be used."],
|
||||||
private var mount: Boolean = false
|
fallbackValue = "", // Empty string is used to select the first of connected devices.
|
||||||
|
arity = "0..1",
|
||||||
|
)
|
||||||
|
internal var deviceSerial: String? = null
|
||||||
|
|
||||||
|
@CommandLine.Option(
|
||||||
|
names = ["--mount"],
|
||||||
|
required = false,
|
||||||
|
description = ["Install the patched APK file by mounting."],
|
||||||
|
showDefaultValue = ALWAYS,
|
||||||
|
)
|
||||||
|
internal var mount: Boolean = false
|
||||||
|
}
|
||||||
|
|
||||||
@CommandLine.Option(
|
@CommandLine.Option(
|
||||||
names = ["--keystore"],
|
names = ["--keystore"],
|
||||||
@@ -245,15 +251,17 @@ internal object PatchCommand : Runnable {
|
|||||||
keyStoreFilePath ?: outputFilePath.parentFile
|
keyStoreFilePath ?: outputFilePath.parentFile
|
||||||
.resolve("${outputFilePath.nameWithoutExtension}.keystore")
|
.resolve("${outputFilePath.nameWithoutExtension}.keystore")
|
||||||
|
|
||||||
val installer = if (deviceSerial != null) {
|
val installer = if (installation?.deviceSerial != null) {
|
||||||
|
val deviceSerial = installation?.deviceSerial!!.ifEmpty { null }
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (mount) {
|
if (installation?.mount == true) {
|
||||||
AdbRootInstaller(deviceSerial)
|
AdbRootInstaller(deviceSerial)
|
||||||
} else {
|
} else {
|
||||||
AdbInstaller(deviceSerial)
|
AdbInstaller(deviceSerial)
|
||||||
}
|
}
|
||||||
} catch (e: DeviceNotFoundException) {
|
} catch (e: DeviceNotFoundException) {
|
||||||
if (deviceSerial!!.isNotEmpty()) {
|
if (deviceSerial?.isNotEmpty() == true) {
|
||||||
logger.severe(
|
logger.severe(
|
||||||
"Device with serial $deviceSerial not found to install to. " +
|
"Device with serial $deviceSerial not found to install to. " +
|
||||||
"Ensure the device is connected and the serial is correct when using the --install option.",
|
"Ensure the device is connected and the serial is correct when using the --install option.",
|
||||||
@@ -289,7 +297,6 @@ internal object PatchCommand : Runnable {
|
|||||||
patcherTemporaryFilesPath,
|
patcherTemporaryFilesPath,
|
||||||
aaptBinaryPath?.path,
|
aaptBinaryPath?.path,
|
||||||
patcherTemporaryFilesPath.absolutePath,
|
patcherTemporaryFilesPath.absolutePath,
|
||||||
true,
|
|
||||||
),
|
),
|
||||||
).use { patcher ->
|
).use { patcher ->
|
||||||
val packageName = patcher.context.packageMetadata.packageName
|
val packageName = patcher.context.packageMetadata.packageName
|
||||||
@@ -331,7 +338,7 @@ internal object PatchCommand : Runnable {
|
|||||||
apk.copyTo(temporaryFilesPath.resolve(apk.name), overwrite = true).apply {
|
apk.copyTo(temporaryFilesPath.resolve(apk.name), overwrite = true).apply {
|
||||||
patcherResult.applyTo(this)
|
patcherResult.applyTo(this)
|
||||||
}.let { patchedApkFile ->
|
}.let { patchedApkFile ->
|
||||||
if (!mount) {
|
if (installation?.mount != true) {
|
||||||
ApkUtils.signApk(
|
ApkUtils.signApk(
|
||||||
patchedApkFile,
|
patchedApkFile,
|
||||||
outputFilePath,
|
outputFilePath,
|
||||||
@@ -354,9 +361,7 @@ internal object PatchCommand : Runnable {
|
|||||||
|
|
||||||
// region Install.
|
// region Install.
|
||||||
|
|
||||||
deviceSerial?.let {
|
installation?.deviceSerial?.let {
|
||||||
val deviceSerial = it.ifEmpty { null }
|
|
||||||
|
|
||||||
runBlocking {
|
runBlocking {
|
||||||
when (val result = installer!!.install(Installer.Apk(outputFilePath, packageName))) {
|
when (val result = installer!!.install(Installer.Apk(outputFilePath, packageName))) {
|
||||||
RootInstallerResult.FAILURE -> logger.severe("Failed to mount the patched APK file")
|
RootInstallerResult.FAILURE -> logger.severe("Failed to mount the patched APK file")
|
||||||
|
|||||||
Reference in New Issue
Block a user