Skip to content

Commit fc1e700

Browse files
committed
Improve the creation process of main.jar and am.jar
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
1 parent ae30473 commit fc1e700

3 files changed

Lines changed: 53 additions & 37 deletions

File tree

.gitignore

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
.gradle/
22
.idea/
3-
crowdin.properties
43
local.properties
54
.DS_Store
65
build/
7-
app/preRelease/
86
app/release/
97
app/debug/
10-
app/libs/am-common.jar
118
toybox/src/main/jniLibs
12-
app/src/main/assets/am.jar
13-
app/src/main/assets/main.jar
9+
app/src/*/assets/am.jar
10+
app/src/*/assets/main.jar
1411
pids
1512
logs
1613
node_modules
@@ -26,4 +23,3 @@ basement_dist
2623
*.iml
2724
*.jks
2825
*~
29-
scripts/KeyStore.sh

app/build.gradle

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,12 @@ dependencies {
195195
testImplementation "org.robolectric:robolectric:${robolectric_version}"
196196
}
197197

198-
preBuild.dependsOn ":server:build"
198+
android.applicationVariants.configureEach { variant ->
199+
String buildTypeCap = variant.buildType.name.capitalize()
200+
tasks.named("merge${buildTypeCap}Assets").configure { mergeTask ->
201+
mergeTask.dependsOn(":server:create${buildTypeCap}ServerJars")
202+
}
203+
}
199204

200205
def buildTime() {
201206
var commitTime = "git show --no-patch --format=%ct000".execute([], project.rootDir).text.trim()

server/build.gradle

Lines changed: 45 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -43,58 +43,73 @@ interface InjectedExecOps {
4343

4444
android.libraryVariants.configureEach { variant ->
4545
String buildType = variant.buildType.name
46+
String buildTypeCap = buildType.capitalize()
47+
def compileTask = variant.javaCompileProvider
48+
def libServerCompileTask = project(':libserver').tasks.named("compile${buildTypeCap}JavaWithJavac")
4649
def injected = project.objects.newInstance(InjectedExecOps)
47-
def jarTask = tasks.register("create${buildType.capitalize()}ServerJars") {
50+
tasks.register("create${buildTypeCap}ServerJars") {
51+
inputs.dir(compileTask.map { it.destinationDirectory.get() })
52+
inputs.dir(libServerCompileTask.map { it.destinationDirectory.get() })
53+
54+
String serverPkg = "io/github/muntashirakon/AppManager/server"
55+
String srcDir = buildType == "release" ? "main" : buildType
56+
File assetsDir = file("${project.rootDir}/app/src/${srcDir}/assets")
57+
File amJar = new File(assetsDir, "am.jar")
58+
File mainJar = new File(assetsDir, "main.jar")
59+
60+
outputs.file(amJar)
61+
outputs.file(mainJar)
62+
4863
doLast {
49-
println("Build type: ${buildType}")
64+
println("Building Server JARs for type: ${buildType}")
65+
assetsDir.mkdirs()
66+
67+
String serverClassDir = compileTask.get().destinationDirectory.get().asFile.absolutePath
68+
String libserverClassDir = libServerCompileTask.get().destinationDirectory.get().asFile.absolutePath + "/${serverPkg}/common"
5069

51-
String rootDir = project.rootDir.absolutePath
52-
String serverPkg = "io/github/muntashirakon/AppManager/server"
53-
String intermediatePath = "build/intermediates/javac/${buildType}/compile${buildType.capitalize()}JavaWithJavac/classes"
54-
String serverClassDir = "${rootDir}/server/${intermediatePath}/${serverPkg}/"
55-
String libserverClassDir = "${rootDir}/libserver/${intermediatePath}/${serverPkg}/common"
5670
String androidJar = "${android.sdkDirectory.path}/platforms/android-${target_sdk}/android.jar"
57-
String amJar = "${rootDir}/app/src/main/assets/am.jar"
58-
String mainJar = "${rootDir}/app/src/main/assets/main.jar"
71+
String d8Path = "${android.sdkDirectory.path}/build-tools/${android.buildToolsVersion}/d8"
5972

6073
println("Creating am.jar...")
61-
def buildArgs = ['--release', '--output', amJar, '--classpath', androidJar]
62-
buildArgs.addAll(Files.list(Paths.get(libserverClassDir)).filter {
74+
def amArgs = ['--release', '--min-api', min_sdk, '--output', amJar.absolutePath, '--lib', androidJar]
75+
amArgs.addAll(Files.list(Paths.get(libserverClassDir)).filter {
6376
!it.fileName.toString().startsWith("IRootServiceManager")
64-
}.map { it.toString() }.collect(Collectors.toList()))
65-
buildArgs.addAll(Files.list(Paths.get(serverClassDir)).filter {
66-
!it.fileName.toString().startsWith("RootServiceMain")
67-
}.map { it.toString() }.collect(Collectors.toList()))
77+
}.map { it.toString() }.sorted().collect(Collectors.toList()))
78+
amArgs.addAll(Files.list(Paths.get("${serverClassDir}/${serverPkg}")).filter {
79+
!it.fileName.toString().startsWith("RootServiceMain") && Files.isRegularFile(it)
80+
}.map { it.toString() }.sorted().collect(Collectors.toList()))
6881
injected.execOps.exec {
69-
workingDir = project.rootDir
70-
executable = file("${android.sdkDirectory.path}/build-tools/${android.buildToolsVersion}/d8")
71-
args = buildArgs
82+
executable = d8Path
83+
args = amArgs
7284
}
7385
println("Created ${amJar}")
7486

7587
println("Creating main.jar...")
76-
buildArgs = ['--release', '--output', mainJar, '--classpath', androidJar]
77-
buildArgs.addAll(Files.list(Paths.get(libserverClassDir)).filter {
88+
def mainArgs = ['--release', '--min-api', min_sdk, '--output', mainJar.absolutePath, '--lib', androidJar]
89+
mainArgs.addAll(Files.list(Paths.get(libserverClassDir)).filter {
7890
it.fileName.toString().startsWith("IRootServiceManager") || it.fileName.toString().startsWith("ServerUtils")
79-
}.map { it.toString() }.collect(Collectors.toList()))
80-
buildArgs.addAll(Files.list(Paths.get(serverClassDir)).filter {
81-
it.fileName.toString().startsWith("RootServiceMain")
82-
}.map { it.toString() }.collect(Collectors.toList()))
91+
}.map { it.toString() }.sorted().collect(Collectors.toList()))
92+
mainArgs.addAll(Files.list(Paths.get("${serverClassDir}/${serverPkg}")).filter {
93+
it.fileName.toString().startsWith("RootServiceMain") && Files.isRegularFile(it)
94+
}.map { it.toString() }.sorted().collect(Collectors.toList()))
8395
injected.execOps.exec {
84-
workingDir = project.rootDir
85-
executable = file("${android.sdkDirectory.path}/build-tools/${android.buildToolsVersion}/d8")
86-
args = buildArgs
96+
executable = d8Path
97+
args = mainArgs
8798
}
8899
println("Created ${mainJar}")
89100
}
90101
}
91-
javaCompileProvider.get().finalizedBy(jarTask)
102+
103+
compileTask.configure { finalizedBy("create${buildTypeCap}ServerJars") }
92104
}
93105

94106
tasks.register('cleanupServerJars') {
95107
doLast {
96-
file("${rootProject.projectDir.absolutePath}/app/src/main/assets/am.jar").delete()
97-
file("${rootProject.projectDir.absolutePath}/app/src/main/assets/main.jar").delete()
108+
String rootDir = rootProject.projectDir.absolutePath
109+
file("${rootDir}/app/src/main/assets/am.jar").delete()
110+
file("${rootDir}/app/src/main/assets/main.jar").delete()
111+
file("${rootDir}/app/src/debug/assets/am.jar").delete()
112+
file("${rootDir}/app/src/debug/assets/main.jar").delete()
98113
}
99114
}
100115

0 commit comments

Comments
 (0)