diff --git a/CHANGELOG.md b/CHANGELOG.md index e6b6994..ef798c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ Only place important and recommended versions here. +## 2.3.1 + +- Fixed issue #3 Didn't work on icons that placed on library modules. + ## 2.3.0 - Supported adaptive-icon diff --git a/README.md b/README.md index 5a972c8..a2607d2 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ buildscript { } dependencies { classpath 'com.android.tools.build:gradle:3.2.0' - classpath 'me.2bab:scratch-paper:2.3.0' + classpath 'me.2bab:scratch-paper:2.3.1' } } ``` @@ -46,15 +46,7 @@ buildscript { apply plugin: 'me.2bab.scratchpaper' ``` - -**0x03. Build your App and Enjoy!** - -![](./images/ic_launcher.png)![](./images/ic_launcher_round.png) - -![](./images/scratch-paper-json.jpg) - - -**0x04. Advanced Configurations** +**0x03. Advanced Configurations** ``` gradle scratchPaper { @@ -72,6 +64,12 @@ scratchPaper { } ``` +**0x04. Build your App and Enjoy!** + +![](./images/ic_launcher.png)![](./images/ic_launcher_round.png) + +![](./images/scratch-paper-json.jpg) + ## Compatible ScratchPaper only tests in Latest TWO Minor versions of Android Gradle Plugin. diff --git a/README_zh.md b/README_zh.md index 1f41177..c59b036 100644 --- a/README_zh.md +++ b/README_zh.md @@ -34,7 +34,7 @@ buildscript { } dependencies { classpath 'com.android.tools.build:gradle:3.2.0' - classpath 'me.2bab:scratch-paper:2.3.0' + classpath 'me.2bab:scratch-paper:2.3.1' } } ``` @@ -47,14 +47,7 @@ apply plugin: 'me.2bab.scratchpaper' ``` -**0x03. Build your App and Enjoy!** - -![](./images/ic_launcher.png)![](./images/ic_launcher_round.png) - - ![](./images/scratch-paper-json.jpg) - - -**0x04. Advanced Configurations** +**0x03. Advanced Configurations** ``` gradle scratchPaper { @@ -65,13 +58,19 @@ scratchPaper { extraInfo = new Date().format("MM-dd,HH:mm") enableGenerateIconOverlay = true enableGenerateBuildInfo = true - + // Experimental field // @see IconOverlayGenerator#removeXmlIconFiles enableXmlIconRemove = false } ``` +**0x04. Build your App and Enjoy!** + +![](./images/ic_launcher.png)![](./images/ic_launcher_round.png) + +![](./images/scratch-paper-json.jpg) + ## 兼容性 ScratchPaper 只会支持最新两个 Minor 版本的 Android Gradle Plugin: diff --git a/build.gradle b/build.gradle index db1fe06..30b8085 100644 --- a/build.gradle +++ b/build.gradle @@ -57,6 +57,6 @@ if (project.extensions.findByName("buildScan") != null) { // publish group 'me.2bab' -version '2.3.0' +version '2.3.1' apply from: 'bintray.gradle' apply from: 'mavenlocal.gradle' \ No newline at end of file diff --git a/src/main/kotlin/me/xx2bab/scratchpaper/IconOverlayGenerator.kt b/src/main/kotlin/me/xx2bab/scratchpaper/IconOverlayGenerator.kt index 6b47eb3..a0d46a4 100644 --- a/src/main/kotlin/me/xx2bab/scratchpaper/IconOverlayGenerator.kt +++ b/src/main/kotlin/me/xx2bab/scratchpaper/IconOverlayGenerator.kt @@ -21,15 +21,18 @@ class IconOverlayGenerator(private val params: GeneratorParams) { fun process() { setAwtEnv() params.variant.outputs.forEach { output -> - val processManifestTask: MergeManifests = output.processManifest as MergeManifests - + val processManifestTask = output.processManifest as MergeManifests + val mergeResourcesTask = params.variant.mergeResources as MergeResources + if (params.config.alwaysUpdateIconInfo) { + output.processResources.outputs.upToDateWhen { false } + } output.processResources.doFirst("process${params.dimension}IconsByScratchPaper") { val processedIcons = arrayListOf() val mergedManifestFile = File(processManifestTask.manifestOutputDirectory, "AndroidManifest.xml") - val resDirs = params.variant.sourceSets[0].resDirectories val version = "@" + params.variant.mergedFlavor.versionName val iconNames = getIconName(mergedManifestFile) + val resDirs = mergeResourcesTask.computeResourceSetList0() findIcons(resDirs, iconNames).forEach { icon -> val icons = addTextToIcon(params.project, params.dimension, icon, params.config, params.dimension, version, params.config.extraInfo) @@ -98,10 +101,10 @@ class IconOverlayGenerator(private val params: GeneratorParams) { /** * Finds all icon files matching the icon specified in the given manifest. */ - private fun findIcons(where: Collection, iconNames: Array): Collection { + private fun findIcons(where: List?, iconNames: Array): Collection { val result: MutableSet = hashSetOf() - where.forEach { - it.walk() + where?.forEach { + it.walk().maxDepth(3) .filter { dir -> dir.name.contains("mipmap") || dir.name.contains("drawable") } @@ -162,5 +165,37 @@ class IconOverlayGenerator(private val params: GeneratorParams) { return file.isFile && file.nameWithoutExtension == namePrefix } + /** + * To get all original resources including libraries + * + * @link github.com/Mobcase/McImage/blob/master/src/main/java/com/smallsoho/mcplugin/image/utils/HookUtil.kt + * @author smallSohoSolo + */ + private fun MergeResources.computeResourceSetList0(): List? { + val computeResourceSetListMethod = MergeResources::class.java.declaredMethods + .firstOrNull { it.name == "computeResourceSetList" && it.parameterCount == 0 } + ?: return null + + val oldIsAccessible = computeResourceSetListMethod.isAccessible + try { + computeResourceSetListMethod.isAccessible = true + + val resourceSets = computeResourceSetListMethod.invoke(this) as? Iterable<*> + + return resourceSets + ?.mapNotNull { resourceSet -> + val getSourceFiles = resourceSet?.javaClass?.methods?.find { + it.name == "getSourceFiles" && it.parameterCount == 0 + } + val files = getSourceFiles?.invoke(resourceSet) + @Suppress("UNCHECKED_CAST") + files as? Iterable + } + ?.flatten() + + } finally { + computeResourceSetListMethod.isAccessible = oldIsAccessible + } + } } \ No newline at end of file diff --git a/src/main/kotlin/me/xx2bab/scratchpaper/ScratchPaperExtension.kt b/src/main/kotlin/me/xx2bab/scratchpaper/ScratchPaperExtension.kt index 15201fc..bd4d498 100644 --- a/src/main/kotlin/me/xx2bab/scratchpaper/ScratchPaperExtension.kt +++ b/src/main/kotlin/me/xx2bab/scratchpaper/ScratchPaperExtension.kt @@ -22,6 +22,8 @@ open class ScratchPaperExtension { var extraInfo = "" + var alwaysUpdateIconInfo = true + // Experimental field // @see IconOverlayGenerator#removeXmlIconFiles var enableXmlIconRemove = false