-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathassembleResources.gradle
116 lines (102 loc) · 3.3 KB
/
assembleResources.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'net.lingala.zip4j:zip4j:1.3.2'
}
}
import net.lingala.zip4j.core.ZipFile
import net.lingala.zip4j.model.ZipParameters
import net.lingala.zip4j.util.Zip4jConstants
import net.lingala.zip4j.model.FileHeader
task assembleResourcesTask << {
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
File out = output.outputFile
if (out.exists()) {
def destDir = out.absolutePath.replace(".apk", "")
unzip(out, destDir)
def unzipDirFile = new File(destDir)
shrinkResources(unzipDirFile)
zip(destDir, destDir + ".res")
unzipDirFile.deleteDir()
}
}
}
}
afterEvaluate {
assembleResourcesTask.dependsOn tasks.find() { it.name.matches(/^assemble(.*?)Debug$/) }
tasks.find { it.name.matches(/^compile(.*?)JavaWithJavac$/) }.each { it.enabled = false }
}
static shrinkResources1(File file) {
def deletePattern = [".*assets.*", ".*META-INF.*", ".*\\.dex", ".*res.layout.*xml", ".*res.menu.*xml"]
if (!file.exists()) {
return
}
ZipFile zipFile = new ZipFile(file);
def fileHeaders = zipFile.getFileHeaders()
fileHeaders.clone().each { FileHeader fileHeader ->
deletePattern.each { pattern ->
def filePath = fileHeader.fileName
if (filePath.matches(pattern)) {
try {
println "Delete file ${filePath}"
zipFile.removeFile(fileHeader)
} catch (Exception e) {
e.printStackTrace()
//println "Delete file ${filePath} , ${e.message}"
throw e
}
}
}
}
}
static shrinkResources(File file) {
def deletePattern = [".*assets.*", ".*META-INF.*", ".*\\.dex", ".*res.layout.*xml", ".*res.menu.*xml"]
if (!file.exists()) {
return
}
if (file.isFile()) {
deletePattern.each { pattern ->
if (file.absolutePath.matches(pattern)) {
println "Delete file ${file.absolutePath} , ${file.delete()}"
}
}
} else {
File[] listFile = file.listFiles()
if (listFile == null) {
return
}
listFile.each {
shrinkResources(it)
}
deletePattern.each { pattern ->
if (file.absolutePath.matches(pattern)) {
println "Delete file ${file.absolutePath} , ${file.deleteDir()}"
}
}
}
}
static void unzip(File zipFile, String dest) {
new File(dest).mkdirs()
ZipFile zFile = new ZipFile(zipFile);
zFile.setFileNameCharset("UTF-8");
zFile.extractAll(dest);
}
static void zip(String src, String dest) {
ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
def zipFile = new ZipFile(dest)
if (zipFile.getFile()) {
zipFile.getFile().delete()
}
new File(src).listFiles().each {
if (it.isFile()) {
zipFile.addFile(it, parameters);
} else {
zipFile.addFolder(it, parameters);
}
}
}