-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbuildSdk.gradle
More file actions
175 lines (141 loc) · 5.16 KB
/
buildSdk.gradle
File metadata and controls
175 lines (141 loc) · 5.16 KB
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
// sdk自动化构建脚本。
// author: hy
// date: 2018/2/22
//
// 说明:
// 执行任务:
// windows:gradlew.bat -q -b buildSdk.gradle buildSdk
// linux: gradle -q -b buildSdk.gradle buildSdk
// 以防止缺少相应文件而造成构建失败,请先执行build操作,生成release版apk文件。即 gradlew.bat app:assembleRelease。
//
// 如果需要多个sdk构建脚本,复制本文件即可。
apply plugin: 'java'
///////////////////////////////////////////////////////////////////////////////
// 手动配置区
// 版本。
def version = '1.0.0'
// 打包哪些Android module。
def projectsName = [
'hackathon1',
'hackathon2',
'niukewang',
'security',
]
// 打包的jar包名称。
def jarName = 'hy-hackathon'
// 额外需要打包的jar包路径,常为工程libs目录下的jar。
def jarInclude = [
]
// jar包过滤的目录以及文件。*通配符,*表示目录下所有文件(不包括子目录),**表示目录下所有文件(包括子目录)。
def jarExclude = [
]
// javadoc过滤的目录以及文件。*通配符,*表示目录下所有文件(不包括子目录),**表示目录下所有文件(包括子目录)。
def javadocExclude = [
'com/hy/niukewang/**.txt',
'com/hy/niukewang/**.dat'
]
///////////////////////////////////////////////////////////////////////////////
def classesDir = '/build/classes/java/main'
//def classesDir = '/build/intermediates/classes/release'
def jniLibDir = '/build/intermediates/jniLibs/release'
def cmakeLibDir = '/build/intermediates/cmake/release/obj'
def jarFileName = jarName + '_' + version + '.jar'
def desSdkDir = 'build/sdk/'
Properties pro = new Properties()
pro.load(project.file('local.properties').newInputStream())
task cleanJar(type: Delete) {
delete desSdkDir + 'jar'
}
// 生成Jar包。
task makeJar(dependsOn: [cleanJar], type: Jar) {
doFirst {
println 'start makeJar. projects name: ' + projectsName
for (int i = 0; i < projectsName.size(); i++) {
def file = new File(projectsName[i], classesDir)
if (!file.exists()) {
throw new Exception(file.absolutePath + ' is not exist. please build java first.')
}
}
}
def src = []
for (int i = 0; i < projectsName.size(); i++) {
def file = new File(projectsName[i], classesDir)
src.add(file)
}
for (int i = 0; i < jarInclude.size(); i++) {
from project.zipTree(jarInclude[i])
}
exclude 'android/', 'test/', '**/BuildConfig.class', 'R.class',
'**/R.class', '**/R$**.class'
exclude jarExclude
// set.
archiveName = jarFileName
from src
destinationDir = new File(desSdkDir, 'jar')
setVersion version
}
task cleanSoLib(type: Delete) {
delete desSdkDir + 'so'
}
task moveSoLib(dependsOn: [cleanSoLib], type: Copy) {
doFirst {
println 'start move so lib. projects name: ' + projectsName
}
for (int i = 0; i < projectsName.size(); i++) {
from projectsName[i] + cmakeLibDir
from projectsName[i] + jniLibDir
}
into desSdkDir + 'so'
}
task cleanJavaDocs(type: Delete) {
delete desSdkDir + 'javadoc'
}
// 生成JavaDoc. protected级别。
task generateJavaDocs(dependsOn: [cleanJavaDocs], type: Javadoc) {
def srcFiles = []
for (int i = 0; i < projectsName.size(); i++) {
srcFiles.add(projectsName[i] + '/src/main/java/')
}
source = project.files srcFiles
// 加入Android包 android.jar引用,以防止找不到符号。使用sdk25。
classpath += project.files pro.get('sdk.dir') + '\\platforms\\android-25\\android.jar'
exclude javadocExclude
options.encoding 'utf-8'
options.charSet 'utf-8'
options.author false
options.docTitle 'hy'
options.footer 'hy'
title = 'hy'
destinationDir = new File(desSdkDir + 'javadoc/')
}
task cleanBuildSdk(type: Delete) {
delete desSdkDir
}
// 生成sdk包。
task buildSdk(dependsOn: [cleanBuildSdk, makeJar, moveSoLib, generateJavaDocs]) {
doLast {
println 'build sdk success.'
}
}
// 混淆,使用proguard原生命令行执行方式。
task proguard(type: Exec) {
def srcJar = projectDir.absolutePath + '/build/sdk/jar/hy-hackathon_1.0.0.jar'
def desJar = projectDir.absolutePath + '/build/sdk/jar/hy-hackathon_1.0.0-min.jar'
def sdkPath = pro.get('sdk.dir')
def androidProguardRules = sdkPath + '/tools/proguard/proguard-android.txt'
// proguard version is 4.7, too old.
// def proguardHome = sdkPath + '/tools/proguard'
// proguard download from proguard website, proguard version is 6.0.
def proguardHome = 'G:/proguard/proguard6.0'
commandLine 'cmd', '/c',
'java', '-jar',
proguardHome + '/lib/proguard.jar',
'-verbose',
'-injars ' + srcJar,
'-outjars ' + desJar,
'-libraryjars \'%JAVA_HOME%/jre/lib/rt.jar\'',
'-libraryjars \'%ANDROID_HOME%/platforms/android-25/android.jar\'',
'@' + projectDir.absolutePath + '/parser/proguard-rules.pro',
'@' + androidProguardRules
standardOutput = new FileOutputStream(new File(projectDir, "/build/proguardLog.txt"))
}