-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbuild.gradle.kts
More file actions
126 lines (114 loc) · 4.09 KB
/
build.gradle.kts
File metadata and controls
126 lines (114 loc) · 4.09 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
import com.android.build.gradle.internal.tasks.DexMergingTask
import com.android.tools.smali.dexlib2.DexFileFactory
import com.android.tools.smali.dexlib2.writer.io.FileDataStore
import com.android.tools.smali.dexlib2.writer.pool.DexPool
import java.io.FileInputStream
import java.util.Properties
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.serialization)
}
val keystorePropertiesFile: File = rootProject.file("keystore.properties")
val keystoreProperties = Properties()
if (keystorePropertiesFile.exists() && keystorePropertiesFile.canRead()) {
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
}
android {
namespace = "com.muedsa.tvbox.demoplugin"
compileSdk = 36
defaultConfig {
applicationId = "com.muedsa.tvbox.demoplugin"
minSdk = 24
targetSdk = 36
versionCode = 1
versionName = "0.0.1"
}
signingConfigs {
create("release") {
if (keystoreProperties.containsKey("muedsa.signingConfig.storeFile")) {
storeFile = file(keystoreProperties["muedsa.signingConfig.storeFile"] as String)
storePassword = keystoreProperties["muedsa.signingConfig.storePassword"] as String
keyAlias = keystoreProperties["muedsa.signingConfig.keyAlias"] as String
keyPassword = keystoreProperties["muedsa.signingConfig.keyPassword"] as String
} else {
val debugSigningConfig = signingConfigs.getByName("debug")
storeFile = debugSigningConfig.storeFile
storePassword = debugSigningConfig.storePassword
keyAlias = debugSigningConfig.keyAlias
keyPassword = debugSigningConfig.keyPassword
}
}
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
signingConfig = signingConfigs.getByName("release")
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
// 修改APK文件名
applicationVariants.all {
outputs.all {
if (this is com.android.build.gradle.internal.api.ApkVariantOutputImpl) {
outputFileName = "${rootProject.name}-${versionName}-${buildType.name}.apk.tbp"
}
}
}
}
kotlin {
compilerOptions {
jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
}
}
dependencies {
//implementation(libs.androidx.core.ktx)
compileOnly(libs.tvbox.api)
testImplementation(libs.tvbox.api)
testImplementation(libs.junit4)
testImplementation(libs.kotlinx.coroutines.test)
}
// 尝试删除不需要打包的代码
tasks.withType<DexMergingTask> {
doLast {
println("taskName: $name")
if (name.startsWith("mergeExtDex")) {
outputDir.get().asFile.listFiles().forEach {
removePackagesFromDex(
file = it,
excludedPackages = listOf("kotlin", "kotlinx", "org.intellij", "org.jetbrains"),
)
}
}
}
}
fun removePackagesFromDex(file: File, excludedPackages: List<String>) {
println("removePackagesFromDex: ${file.absolutePath}")
val dexFile = DexFileFactory.loadDexFile(file, null)
val excludedClassTypes = excludedPackages.map { "L${it.replace(".", "/")}/" }
val filteredClasses = dexFile.classes.filter { classDef ->
val classDefType = classDef.type
(!excludedClassTypes.any { classDefType.startsWith(it) }).apply {
if (!this) {
println("remove $classDefType")
}
}
}
if (filteredClasses.isNotEmpty()) {
val dexPool = DexPool(dexFile.opcodes)
filteredClasses.forEach {
println("intern ${it.type}")
dexPool.internClass(it)
}
dexPool.writeTo(FileDataStore(file))
} else {
file.delete()
}
}