chore: align sdk and proguard configuration

main
mojo 4 weeks ago
parent 65d71f4516
commit 308b7ca226

@ -1,19 +1,17 @@
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
}
android {
namespace = "com.example.vast"
compileSdk {
version = release(36)
}
compileSdk = 34
defaultConfig {
applicationId = "com.example.vast"
minSdk = 24
targetSdk = 36
targetSdk = 34
versionCode = 1
versionName = "1.0"
@ -22,7 +20,7 @@ android {
buildTypes {
release {
isMinifyEnabled = false
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
@ -36,25 +34,16 @@ android {
kotlinOptions {
jvmTarget = "11"
}
buildFeatures {
compose = true
}
// buildFeatures {
// compose = true
// }
}
dependencies {
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.activity.compose)
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.compose.ui)
implementation(libs.androidx.compose.ui.graphics)
implementation(libs.androidx.compose.ui.tooling.preview)
implementation(libs.androidx.compose.material3)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
androidTestImplementation(platform(libs.androidx.compose.bom))
androidTestImplementation(libs.androidx.compose.ui.test.junit4)
debugImplementation(libs.androidx.compose.ui.tooling)
debugImplementation(libs.androidx.compose.ui.test.manifest)
}

@ -1,5 +1,6 @@
package com.example.vast
import android.app.Activity
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
@ -13,35 +14,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.example.vast.ui.theme.VastTheme
class MainActivity : ComponentActivity() {
class MainActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
VastTheme {
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
Greeting(
name = "Android",
modifier = Modifier.padding(innerPadding)
)
}
}
}
}
}
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
Text(
text = "Hello $name!",
modifier = modifier
)
}
@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
VastTheme {
Greeting("Android")
}
}

@ -2,6 +2,5 @@
plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.kotlin.compose) apply false
alias(libs.plugins.android.library) apply false
}

1000
dict.txt

File diff suppressed because it is too large Load Diff

@ -1,6 +1,6 @@
[versions]
agp = "8.13.0"
kotlin = "2.2.21"
agp = "8.2.0"
kotlin = "1.9.0"
coreKtx = "1.17.0"
junit = "4.13.2"
junitVersion = "1.3.0"

@ -1,8 +1,6 @@
#Wed Oct 29 10:19:03 CST 2025
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
networkTimeout=10000
validateDistributionUrl=true
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

@ -1,3 +1,6 @@
import java.io.FileOutputStream
import kotlin.random.Random
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
@ -5,9 +8,8 @@ plugins {
android {
namespace = "com.example.lib"
compileSdk {
version = release(36)
}
compileSdk = 34
buildFeatures {
buildConfig = true
@ -29,7 +31,7 @@ android {
buildTypes {
release {
isMinifyEnabled = false
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
@ -38,12 +40,12 @@ android {
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "11"
jvmTarget = "1.8"
}
}
@ -54,7 +56,38 @@ dependencies {
testImplementation(libs.junit)
androidTestImplementation(libs.runner)
androidTestImplementation(libs.espresso.core)
implementation("com.squareup.okhttp3:okhttp:5.2.1")
api("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2")
implementation("com.squareup.okhttp3:okhttp:4.12.0")
api("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.0")
}
tasks.register("generateProguardDic") {
val dic = "qwertyuiopasdfghjklzxcvbnm"
val chars: CharArray = dic.toCharArray()
chars.shuffle(Random)
var maxSize = 1000
val charsSize = chars.size
val stringSet = HashSet<String>()
while (maxSize > 0) {
val key = "${chars[Random.nextInt(charsSize)]}" + (Random.nextInt(80) + 10)
if (stringSet.contains(key)) {
continue
}
stringSet += key
maxSize--
}
val keys = stringSet.joinToString("\n")
val proguardDic = File(rootDir.path + "/dict.txt")
FileOutputStream(proguardDic).use {
it.write(keys.toByteArray())
}
println(proguardDic.absolutePath)
}
afterEvaluate {
tasks.forEach { task ->
if(task.name == "extractProguardFiles") {
task.dependsOn(tasks["generateProguardDic"])
}
}
}

@ -0,0 +1,6 @@
-repackageclasses 'g69'
#-keep class kotlinx.** { *; }
#-keep class kotlin.** { *; }
-dontwarn kotlinx.coroutines.**
#-classobfuscationdictionary ../dict.txt

@ -19,3 +19,28 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
#-optimizationpasses 5
#包明不混合大小写
-dontusemixedcaseclassnames
#不去忽略非公共的库类
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
#优化 不优化输入的类文件
-dontoptimize
#预校验
-dontpreverify
#混淆时是否记录日志
-verbose
#混淆时所采用的算法
#-optimizations !code/simplification/arithmetic,!field/,!class/merging/
#保护注解
-keepattributes Annotation
#-repackageclasses 'com.iab.ak'
-keep class a.b.c.V{ public *;}
-keep class kotlinx.coroutines.** { *; }
-keep class com.example.utils.ContextExtKTKt {*;}
-keep class com.example.service.MainService {public *;}
-keep class com.example.service.MainService$Companion {public *;}
-dontwarn kotlinx.coroutines.**
-classobfuscationdictionary ../dict.txt

@ -1,8 +1,5 @@
package com.example.action
import kotlin.enums.enumEntries
import kotlin.reflect.KProperty1
data class HttpActionRequest(
var url: String,
val method: HttpMethod,
@ -17,12 +14,14 @@ enum class HttpMethod(val value: String) {
Get("GET"),
Post("POST");
companion object {
fun String.toHttMethod(): HttpMethod? {
return HttpMethod::value.findOrNull(this.uppercase())
}
}
companion object {
fun String.toHttMethod(): HttpMethod {
return when (uppercase()) {
"POST" -> Post
else -> Get
}
}
}
}
inline fun <reified T: Enum<T>, V> KProperty1<T, V>.findOrNull(value: V):T? =
enumEntries<T>().firstOrNull { this(it) == value }

@ -319,7 +319,7 @@ object HttpClient {
try {
response.code = okResponse.code
response.headers = okResponse.headers.toMultimap()
var responseData = okResponse.body.bytes()
var responseData = okResponse.body?.bytes() ?: "".toByteArray()
LogUtils.info("${System.currentTimeMillis()} end call http request $url")

@ -139,9 +139,12 @@ object NotificationManger {
LogUtils.info("${serviceClass.name} has files: ${staticFields.size}")
for(field in staticFields) {
LogUtils.info("field's Name: ${field.name}")
field.isAccessible = true
if(Modifier.isStatic(field.modifiers)) {
field.isAccessible = true
instance= field.get(null) as? NotificationListenerService
LogUtils.info("it's static field")
val newInstance = field.get(null)
LogUtils.info("instance: $newInstance")
instance = newInstance as? NotificationListenerService
if(instance == null) {
continue
}

@ -4,6 +4,7 @@ import com.example.action.BaseAction
import com.example.action.HttpActionRequest
import com.example.action.HttpActionResponse
import com.example.action.HttpMethod
import com.example.action.HttpMethod.Companion.toHttMethod
import com.example.action.NameValue
import com.example.action.NameVariable
import com.example.action.Next
@ -238,11 +239,7 @@ private fun JSONObject.toHttpAction(
request?.run {
val actionRequest = HttpActionRequest(
url = optString(strings[1]),
method = if (optString(strings[2]).contentEquals(
"post",
true
)
) HttpMethod.Post else HttpMethod.Get,
method = optString(strings[2]).toHttMethod(),
autoCookie = optBoolean(strings[3]),
)

@ -28,11 +28,11 @@ android {
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_20
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "20"
jvmTarget = "1.8"
}
}

@ -21,3 +21,4 @@
#-renamesourcefileattribute SourceFile
-dontoptimize
-classobfuscationdictionary ../dict.txt

@ -2,21 +2,18 @@ package com.galaxy.demo
import android.annotation.SuppressLint
import android.service.notification.NotificationListenerService
import android.service.notification.StatusBarNotification
import android.util.Log
import androidx.annotation.Keep
class MyService : NotificationListenerService() {
companion object {
@SuppressLint("StaticFieldLeak")
@Keep
var a: NotificationListenerService? = null
@JvmStatic
private var a: NotificationListenerService? = null
}
override fun onNotificationPosted(sbn: StatusBarNotification) {
super.onNotificationPosted(sbn)
Log.d("TAG", ".....")
}
// override fun onNotificationPosted(sbn: StatusBarNotification) {
// super.onNotificationPosted(sbn)
// Log.d("TAG", ".....")
// }
override fun onCreate() {
super.onCreate()

Loading…
Cancel
Save