Skip to content

Commit 39afa9b

Browse files
authored
Merge pull request #2 from StringCare/develop
Develop
2 parents d507040 + e0fb8fa commit 39afa9b

File tree

10 files changed

+59
-26
lines changed

10 files changed

+59
-26
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66
}
77

88
group 'com.stringcare'
9-
version '3.1'
9+
version '3.2'
1010

1111
def siteUrl = 'https://github.com/StringCare/KotlinGradlePlugin'
1212
def gitUrl = 'https://github.com/StringCare/KotlinGradlePlugin.git'

src/main/kotlin/StringCare.kt

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
import components.*
2-
import org.gradle.api.DefaultTask
32
import org.gradle.api.NamedDomainObjectContainer
43
import org.gradle.api.Plugin
54
import org.gradle.api.Project
65
import org.gradle.api.internal.plugins.DslObject
7-
import org.gradle.api.tasks.Input
8-
import org.gradle.api.tasks.TaskAction
9-
import java.io.File
106

117
open class StringCare : Plugin<Project> {
128

@@ -49,21 +45,21 @@ open class StringCare : Plugin<Project> {
4945
extension.modules.forEach { module ->
5046
when {
5147
module.stringFiles.isNotEmpty() && module.srcFolders.isNotEmpty() -> {
52-
moduleMap[module.name!!] = Configuration(module.name).apply {
48+
moduleMap[module.name] = Configuration(module.name).apply {
5349
stringFiles.addAll(module.stringFiles)
5450
srcFolders.addAll(module.srcFolders)
5551
debug = extension.debug
5652
}
5753
}
5854
module.srcFolders.isNotEmpty() -> {
59-
moduleMap[module.name!!] = Configuration(module.name).apply {
55+
moduleMap[module.name] = Configuration(module.name).apply {
6056
stringFiles.addAll(defaultConfig().stringFiles)
6157
srcFolders.addAll(module.srcFolders)
6258
debug = extension.debug
6359
}
6460
}
6561
module.stringFiles.isNotEmpty() -> {
66-
moduleMap[module.name!!] = Configuration(module.name).apply {
62+
moduleMap[module.name] = Configuration(module.name).apply {
6763
stringFiles.addAll(module.stringFiles)
6864
srcFolders.addAll(defaultConfig().srcFolders)
6965
debug = extension.debug
@@ -88,15 +84,26 @@ open class StringCare : Plugin<Project> {
8884
}
8985
when {
9086
moduleMap.containsKey(module) -> {
87+
val variantOrFlavor = extension.variants.find {
88+
variant.toLowerCase().contains(it.name.toLowerCase())
89+
}
90+
if (variantOrFlavor != null && variantOrFlavor.skip) {
91+
PrintUtils.print(module, "Skipping $variant")
92+
return@fingerPrint
93+
}
94+
9195
PrintUtils.print(module, "$variant:$key")
9296
PrintUtils.print(module, backupStringRes)
9397
moduleMap[module]?.let { configuration ->
9498
backupFiles(absoluteProjectPath, configuration)
9599
}
100+
96101
moduleMap[module]?.let { configuration ->
97102
val files = locateFiles(absoluteProjectPath, configuration)
98103
files.forEach { file ->
99-
modifyXML(file.file, extension.main_module, key, extension.debug)
104+
modifyXML(file.file, extension.main_module, key, extension.debug,
105+
variantOrFlavor?.applicationId ?: ""
106+
)
100107
}
101108
}
102109
PrintUtils.print(module, obfuscateStringRes)
@@ -118,7 +125,13 @@ open class StringCare : Plugin<Project> {
118125
}
119126

120127
},
121-
mergeResourcesFinish = { module, _ ->
128+
mergeResourcesFinish = { module, variant ->
129+
val variantOrFlavor = extension.variants.find {
130+
variant.toLowerCase().contains(it.name.toLowerCase())
131+
}
132+
if (variantOrFlavor != null && variantOrFlavor.skip) {
133+
return@ExecutionListener
134+
}
122135
restoreFiles(absoluteProjectPath, module)
123136
}
124137
))
@@ -133,14 +146,25 @@ open class StringCare : Plugin<Project> {
133146
internal set(value) {
134147
DslObject(this).extensions.add("modules", value)
135148
}
149+
var variants: NamedDomainObjectContainer<VariantApplicationId>
150+
@Suppress("UNCHECKED_CAST")
151+
get() = DslObject(this).extensions.getByName("variants") as NamedDomainObjectContainer<VariantApplicationId>
152+
internal set(value) {
153+
DslObject(this).extensions.add("variants", value)
154+
}
136155
}
137156

138-
open class Configuration(var name: String?) {
157+
open class Configuration(var name: String) {
139158
var stringFiles = mutableListOf<String>()
140159
var srcFolders = mutableListOf<String>()
141160
var debug = false
142161
}
143162

163+
open class VariantApplicationId(var name: String) {
164+
var applicationId = ""
165+
var skip = false
166+
}
167+
144168
}
145169

146170

src/main/kotlin/components/Extensions.kt

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package components
22

33
import StringCare
4+
import StringCare.VariantApplicationId
45
import StringCare.Configuration
56
import StringCare.Extension
67
import groovy.json.StringEscapeUtils
@@ -16,6 +17,7 @@ import task.SCPreview
1617
import task.SCTestObfuscation
1718
import java.io.*
1819
import javax.xml.parsers.DocumentBuilderFactory
20+
import javax.xml.transform.OutputKeys
1921
import javax.xml.transform.TransformerFactory
2022
import javax.xml.transform.dom.DOMSource
2123
import javax.xml.transform.stream.StreamResult
@@ -156,7 +158,7 @@ fun File.resourceFile(configuration: Configuration): ResourceFile? {
156158
}
157159
}
158160
}
159-
return if (valid) ResourceFile(validFile!!, sourceFolder, configuration.name!!) else null
161+
return if (valid) ResourceFile(validFile!!, sourceFolder, configuration.name) else null
160162
}
161163

162164
fun Project.absolutePath(): String = this.file(wrapperWindows).absolutePath.replace(
@@ -166,7 +168,9 @@ fun Project.absolutePath(): String = this.file(wrapperWindows).absolutePath.repl
166168

167169
fun Project.createExtension(): Extension {
168170
val extension = this.extensions.create(extensionName, Extension::class.java)
169-
extension.modules = this.container<Configuration>(Configuration::class.java)
171+
extension.modules = this.container(Configuration::class.java)
172+
extension.variants = this.container(VariantApplicationId::class.java)
173+
170174
StringCare.mainModule = extension.main_module
171175
StringCare.debug = extension.debug
172176
return extension
@@ -263,9 +267,11 @@ fun File.getXML(): Document {
263267
fun File.updateXML(document: Document) {
264268
val output = StringWriter()
265269
val transformer = TransformerFactory.newInstance().newTransformer()
270+
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
266271
transformer.transform(DOMSource(document), StreamResult(output))
267272
val xml = output.toString()
268-
FileWriter(this.absolutePath).use { it.write(xml) }
273+
this.writeText(xml)
274+
//FileWriter(this.absolutePath).use { it.write(xml) }
269275
}
270276

271277
fun File.removeAttributes() {
@@ -276,7 +282,8 @@ fun File.removeAttributes() {
276282
.replace("containsHtml=\"false\"", "")
277283
.replace("androidTreatment=\"true\"", "")
278284
.replace("androidTreatment=\"false\"", "")
279-
FileWriter(this.absolutePath).use { it.write(content) }
285+
// FileWriter(this.absolutePath).use { it.write(content) }
286+
this.writeText(content)
280287
updateXML(this.getXML())
281288
}
282289

src/main/kotlin/components/Stark.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ open class Stark {
6666
}
6767

6868
@JvmStatic
69-
external fun obfuscate(mainModule: String, key: String, value: ByteArray): ByteArray
69+
external fun obfuscate(mainModule: String, key: String, value: ByteArray, mockId: String): ByteArray
7070

7171
@JvmStatic
7272
external fun reveal(mainModule: String, key: String, value: ByteArray): ByteArray

src/main/kotlin/components/Tasks.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ internal fun pluginBuildTask(): String = "${when (getOs()) {
1818
}} build --exclude-task test"
1919

2020
internal val librarySetupTask = """
21-
${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}components${File.separator}jni${File.separator}$osxLib out${File.separator}production${File.separator}classes${File.separator}$osxLib &&
22-
${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}components${File.separator}jni${File.separator}$winLib out${File.separator}production${File.separator}classes${File.separator}$winLib &&
23-
${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}components${File.separator}jni${File.separator}$osxLib build${File.separator}classes${File.separator}kotlin${File.separator}main${File.separator}$osxLib &&
21+
${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}components${File.separator}jni${File.separator}$osxLib out${File.separator}production${File.separator}classes${File.separator}$osxLib &
22+
${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}components${File.separator}jni${File.separator}$winLib out${File.separator}production${File.separator}classes${File.separator}$winLib &
23+
${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}components${File.separator}jni${File.separator}$osxLib build${File.separator}classes${File.separator}kotlin${File.separator}main${File.separator}$osxLib &
2424
${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}components${File.separator}jni${File.separator}$winLib build${File.separator}classes${File.separator}kotlin${File.separator}main${File.separator}$winLib
2525
""".trimIndent()
2626

src/main/kotlin/components/XParser.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ fun parseXML(file: File): List<StringEntity> {
8080
return entities
8181
}
8282

83-
fun modifyXML(file: File, mainModule: String, key: String, debug: Boolean) {
83+
fun modifyXML(file: File, mainModule: String, key: String, debug: Boolean, mockId: String = "") {
8484
val stringEntities = parseXML(file)
8585
if (debug) {
8686
PrintUtils.print(null, file.getContent(), true)
@@ -94,7 +94,7 @@ fun modifyXML(file: File, mainModule: String, key: String, debug: Boolean) {
9494
it.tag == "string" && it.index == i
9595
}
9696
entity?.let {
97-
node.textContent = obfuscate(mainModule, key, it).value
97+
node.textContent = obfuscate(mainModule, key, it, mockId).value
9898
}
9999
}
100100

@@ -105,12 +105,13 @@ fun modifyXML(file: File, mainModule: String, key: String, debug: Boolean) {
105105
}
106106
}
107107

108-
fun obfuscate(mainModule: String, key: String, entity: StringEntity): StringEntity {
108+
fun obfuscate(mainModule: String, key: String, entity: StringEntity, mockId: String = ""): StringEntity {
109109
val obfuscation = Stark.obfuscate(
110110
mainModule, key, when (entity.androidTreatment) {
111111
true -> entity.value.androidTreatment()
112112
false -> entity.value.unescape()
113-
}.toByteArray()
113+
}.toByteArray(),
114+
mockId
114115
).toReadableString()
115116
return StringEntity(entity.name, entity.attributes, obfuscation, entity.tag, entity.index, entity.androidTreatment)
116117
}
515 Bytes
Binary file not shown.
8 Bytes
Binary file not shown.

src/main/kotlin/task/SCTestObfuscation.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ open class SCTestObfuscation : DefaultTask() {
2626
moduleMap.forEach { entry ->
2727
var key = ""
2828
signingReportTask().runCommand { _, result ->
29-
key = result.extractFingerprint(entry.value.name!!, variant ?: defaultVariant, debug ?: defaultDebug)
29+
key = result.extractFingerprint(entry.value.name, variant ?: defaultVariant, debug ?: defaultDebug)
3030
}
3131
println("fingerprint: $key")
3232
println("variant: ${variant ?: "debug"}")
@@ -51,7 +51,7 @@ open class SCTestObfuscation : DefaultTask() {
5151
println(file.file.getContent())
5252
println("============================")
5353
}
54-
restoreFiles(absoluteProjectPath, entry.value.name!!)
54+
restoreFiles(absoluteProjectPath, entry.value.name)
5555
}
5656
println("== END OBFUSCATION ==================================")
5757

src/test/kotlin/SCTest.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,8 @@ class SCTest {
107107
val obfuscated = obfuscate(
108108
"$temp${File.separator}$mainModuleTest",
109109
key,
110-
entity
110+
entity,
111+
""
111112
)
112113
assert(obfuscated.value != entity.value)
113114
}

0 commit comments

Comments
 (0)