-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathsettings.gradle.kts
More file actions
131 lines (109 loc) · 4.29 KB
/
settings.gradle.kts
File metadata and controls
131 lines (109 loc) · 4.29 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
import java.io.File
import java.io.FileOutputStream
import java.net.URI
import java.nio.file.Files
import java.util.Properties
import java.util.zip.ZipInputStream
fun ensureAndroidSdk(rootDir: File) {
val localProperties = File(rootDir, "local.properties")
val props = Properties()
if (localProperties.exists()) {
localProperties.inputStream().use { props.load(it) }
}
var sdkPath = System.getenv("ANDROID_HOME")
?: System.getenv("ANDROID_SDK_ROOT")
?: props.getProperty("sdk.dir")
val potentialSdkDir = File(rootDir, ".gradle/android-sdk")
if (sdkPath == null && potentialSdkDir.exists()) {
sdkPath = potentialSdkDir.absolutePath
props["sdk.dir"] = sdkPath
localProperties.outputStream().use { props.store(it, null) }
}
if (sdkPath != null && File(sdkPath).exists()) {
println("Android SDK found at $sdkPath, skipping provisioning.")
return
}
println("Android SDK not found. Provisioning a local version...")
val sdkDir = File(rootDir, ".gradle/android-sdk").apply { mkdirs() }
val os = System.getProperty("os.name").lowercase()
val toolUrl = when {
os.contains("win") -> "https://dl.google.com/android/repository/commandlinetools-win-11076708_latest.zip"
os.contains("mac") -> "https://dl.google.com/android/repository/commandlinetools-mac-11076708_latest.zip"
else -> "https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip"
}
val cmdlineToolsZip = File(sdkDir, "cmdline-tools.zip")
if (!cmdlineToolsZip.exists()) {
println("Downloading Android command-line tools...")
URI(toolUrl).toURL().openStream().use { Files.copy(it, cmdlineToolsZip.toPath()) }
}
val cmdlineToolsDir = File(sdkDir, "cmdline-tools/latest")
if (!cmdlineToolsDir.exists()) {
println("Unzipping command-line tools...")
cmdlineToolsDir.mkdirs()
ZipInputStream(cmdlineToolsZip.inputStream()).use { zis ->
var entry = zis.nextEntry
while (entry != null) {
val newFile = File(cmdlineToolsDir, entry.name.substringAfter('/'))
if (entry.isDirectory) {
newFile.mkdirs()
} else {
newFile.parentFile.mkdirs()
FileOutputStream(newFile).use { fos -> zis.copyTo(fos) }
}
entry = zis.nextEntry
}
}
}
val sdkManager = File(cmdlineToolsDir, "bin/sdkmanager" + if (os.contains("win")) ".bat" else "")
sdkManager.setExecutable(true)
fun runSdkManager(args: String) {
println("Running sdkmanager $args")
val process = ProcessBuilder(sdkManager.absolutePath, *args.split(" ").toTypedArray())
.directory(sdkDir)
.redirectErrorStream(true)
.start()
// Pipe "y" to accept licenses
process.outputStream.bufferedWriter().apply {
write("y\n".repeat(20))
flush()
close()
}
process.inputStream.bufferedReader().forEachLine { println(it) }
process.waitFor()
}
runSdkManager("--licenses")
// Align SDK/NDK to module config (compileSdk 36, build-tools 36.0.0, NDK 28.2)
val desiredNdkVersion = "28.2.13676358"
runSdkManager("platform-tools platforms;android-36 build-tools;36.0.0 ndk;$desiredNdkVersion")
val ndkDir = File(sdkDir, "ndk/$desiredNdkVersion")
props["sdk.dir"] = sdkDir.absolutePath
localProperties.outputStream().use { props.store(it, null) }
System.setProperty("android.home", sdkDir.absolutePath)
System.setProperty("android.sdk.root", sdkDir.absolutePath)
println("Android SDK and NDK provisioned successfully.")
}
ensureAndroidSdk(rootDir)
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
@Suppress("UnstableApiUsage")
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url = uri("https://api.xposed.info/") }
maven { url = uri("https://jitpack.io") }
}
}
rootProject.name = "PurrfectSnap"
include(":common")
include(":core")
include(":valdi")
include(":app")
include(":mapper")
include(":native")