mirror of
https://github.com/ReVanced/revanced-patcher.git
synced 2026-01-31 15:11:02 +00:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3d61dacbda | ||
|
|
c20dfe12d5 | ||
|
|
78663cde88 | ||
|
|
dde5385232 | ||
|
|
930768dfb3 |
19
CHANGELOG.md
19
CHANGELOG.md
@@ -1,3 +1,22 @@
|
|||||||
|
# [1.10.0](https://github.com/revanced/revanced-patcher/compare/v1.9.0...v1.10.0) (2022-06-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* improve logging ([c20dfe1](https://github.com/revanced/revanced-patcher/commit/c20dfe12d5c737264b844e6634de11bf1e1629f0))
|
||||||
|
|
||||||
|
# [1.9.0](https://github.com/revanced/revanced-patcher/compare/v1.8.0...v1.9.0) (2022-06-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* callback for each file instead of class ([930768d](https://github.com/revanced/revanced-patcher/commit/930768dfb31dc5fa6c248050b08ac117c40ee0a3))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* yield the patch result ([dde5385](https://github.com/revanced/revanced-patcher/commit/dde5385232abddc8a85d6e9a939549b71dd9130e))
|
||||||
|
|
||||||
# [1.8.0](https://github.com/revanced/revanced-patcher/compare/v1.7.2...v1.8.0) (2022-06-22)
|
# [1.8.0](https://github.com/revanced/revanced-patcher/compare/v1.7.2...v1.8.0) (2022-06-22)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
kotlin.code.style = official
|
kotlin.code.style = official
|
||||||
version = 1.8.0
|
version = 1.10.0
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ class Patcher(private val options: PatcherOptions) {
|
|||||||
val packageMetadata = PackageMetadata()
|
val packageMetadata = PackageMetadata()
|
||||||
|
|
||||||
if (options.patchResources) {
|
if (options.patchResources) {
|
||||||
logger.info("Decoding resources using Androlib, this may take a long time...")
|
logger.info("Decoding resources")
|
||||||
|
|
||||||
// decode resources to cache directory
|
// decode resources to cache directory
|
||||||
androlib.decodeManifestWithResources(extInputFile, outDir, resourceTable)
|
androlib.decodeManifestWithResources(extInputFile, outDir, resourceTable)
|
||||||
@@ -78,7 +78,7 @@ class Patcher(private val options: PatcherOptions) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
logger.info("Decoding AndroidManifest.xml manually because resource patching is disabled")
|
logger.info("Only decoding AndroidManifest.xml because resource patching is disabled")
|
||||||
|
|
||||||
// create decoder for the resource table
|
// create decoder for the resource table
|
||||||
val decoder = ResAttrDecoder()
|
val decoder = ResAttrDecoder()
|
||||||
@@ -102,7 +102,7 @@ class Patcher(private val options: PatcherOptions) {
|
|||||||
packageMetadata.metaInfo.versionInfo = resourceTable.versionInfo
|
packageMetadata.metaInfo.versionInfo = resourceTable.versionInfo
|
||||||
packageMetadata.metaInfo.sdkInfo = resourceTable.sdkInfo
|
packageMetadata.metaInfo.sdkInfo = resourceTable.sdkInfo
|
||||||
|
|
||||||
logger.info("Reading input as dex file")
|
logger.info("Reading dex files")
|
||||||
|
|
||||||
// read dex files
|
// read dex files
|
||||||
val dexFile = MultiDexIO.readDexFile(true, options.inputFile, NAMER, null, null)
|
val dexFile = MultiDexIO.readDexFile(true, options.inputFile, NAMER, null, null)
|
||||||
@@ -128,6 +128,8 @@ class Patcher(private val options: PatcherOptions) {
|
|||||||
callback: (File) -> Unit
|
callback: (File) -> Unit
|
||||||
) {
|
) {
|
||||||
for (file in files) {
|
for (file in files) {
|
||||||
|
callback(file)
|
||||||
|
|
||||||
for (classDef in MultiDexIO.readDexFile(true, file, NAMER, null, null).classes) {
|
for (classDef in MultiDexIO.readDexFile(true, file, NAMER, null, null).classes) {
|
||||||
val type = classDef.type
|
val type = classDef.type
|
||||||
|
|
||||||
@@ -138,7 +140,6 @@ class Patcher(private val options: PatcherOptions) {
|
|||||||
logger.trace("Merging $type")
|
logger.trace("Merging $type")
|
||||||
data.bytecodeData.classes.internalClasses.add(classDef)
|
data.bytecodeData.classes.internalClasses.add(classDef)
|
||||||
|
|
||||||
callback(file)
|
|
||||||
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -150,7 +151,6 @@ class Patcher(private val options: PatcherOptions) {
|
|||||||
val index = existingClass.second
|
val index = existingClass.second
|
||||||
data.bytecodeData.classes.internalClasses[index] = classDef
|
data.bytecodeData.classes.internalClasses[index] = classDef
|
||||||
|
|
||||||
callback(file)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -164,7 +164,6 @@ class Patcher(private val options: PatcherOptions) {
|
|||||||
var resourceFile: File? = null
|
var resourceFile: File? = null
|
||||||
|
|
||||||
if (options.patchResources) {
|
if (options.patchResources) {
|
||||||
logger.info("Patching resources")
|
|
||||||
val cacheDirectory = ExtFile(options.resourceCacheDirectory)
|
val cacheDirectory = ExtFile(options.resourceCacheDirectory)
|
||||||
|
|
||||||
val androlibResources = AndrolibResources().also { resources ->
|
val androlibResources = AndrolibResources().also { resources ->
|
||||||
@@ -197,7 +196,7 @@ class Patcher(private val options: PatcherOptions) {
|
|||||||
)
|
)
|
||||||
}.toTypedArray()
|
}.toTypedArray()
|
||||||
|
|
||||||
logger.trace("Packaging using aapt")
|
logger.info("Compiling resources")
|
||||||
androlibResources.aaptPackage(
|
androlibResources.aaptPackage(
|
||||||
aaptFile, manifestFile, resDirectory, null, null, includedFiles
|
aaptFile, manifestFile, resDirectory, null, null, includedFiles
|
||||||
)
|
)
|
||||||
@@ -251,8 +250,6 @@ class Patcher(private val options: PatcherOptions) {
|
|||||||
): PatchResult {
|
): PatchResult {
|
||||||
val patchName = patch.patchName
|
val patchName = patch.patchName
|
||||||
|
|
||||||
logger.trace("Applying patch $patchName")
|
|
||||||
|
|
||||||
// if the patch has already applied silently skip it
|
// if the patch has already applied silently skip it
|
||||||
if (appliedPatches.contains(patchName)) {
|
if (appliedPatches.contains(patchName)) {
|
||||||
logger.trace("Skipping patch $patchName because it has already been applied")
|
logger.trace("Skipping patch $patchName because it has already been applied")
|
||||||
@@ -302,29 +299,23 @@ class Patcher(private val options: PatcherOptions) {
|
|||||||
/**
|
/**
|
||||||
* Apply patches loaded into the patcher.
|
* Apply patches loaded into the patcher.
|
||||||
* @param stopOnError If true, the patches will stop on the first error.
|
* @param stopOnError If true, the patches will stop on the first error.
|
||||||
* @return A map of [PatchResultSuccess]. If the [Patch] was successfully applied,
|
* @return A pair of the name of the [Patch] and its [PatchResult].
|
||||||
* [PatchResultSuccess] will always be returned to the wrapping Result object.
|
|
||||||
* If the [Patch] failed to apply, an Exception will always be returned to the wrapping Result object.
|
|
||||||
*/
|
*/
|
||||||
fun applyPatches(
|
fun applyPatches(stopOnError: Boolean = false) = sequence {
|
||||||
stopOnError: Boolean = false, callback: (Class<out Patch<Data>>, Boolean) -> Unit = { _, _ -> }
|
|
||||||
): Map<String, Result<PatchResultSuccess>> {
|
|
||||||
logger.trace("Applying all patches")
|
logger.trace("Applying all patches")
|
||||||
val appliedPatches = mutableListOf<String>()
|
val appliedPatches = mutableListOf<String>()
|
||||||
|
|
||||||
return buildMap {
|
for (patch in data.patches) {
|
||||||
for (patch in data.patches) {
|
val patchResult = applyPatch(patch, appliedPatches)
|
||||||
val result = applyPatch(patch, appliedPatches)
|
|
||||||
|
|
||||||
this[patch.patchName] = if (result.isSuccess()) {
|
val result = if (patchResult.isSuccess()) {
|
||||||
Result.success(result.success()!!)
|
Result.success(patchResult.success()!!)
|
||||||
} else {
|
} else {
|
||||||
Result.failure(result.error()!!)
|
Result.failure(patchResult.error()!!)
|
||||||
}
|
|
||||||
|
|
||||||
callback(patch, result.isSuccess())
|
|
||||||
if (stopOnError && result.isError()) break
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
yield(patch.patchName to result)
|
||||||
|
if (stopOnError && patchResult.isError()) break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user