chore: align sdk and proguard configuration

main
mojo 4 weeks ago
parent 65d71f4516
commit 308b7ca226

@ -1,19 +1,17 @@
plugins { plugins {
alias(libs.plugins.android.application) alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
} }
android { android {
namespace = "com.example.vast" namespace = "com.example.vast"
compileSdk { compileSdk = 34
version = release(36)
}
defaultConfig { defaultConfig {
applicationId = "com.example.vast" applicationId = "com.example.vast"
minSdk = 24 minSdk = 24
targetSdk = 36 targetSdk = 34
versionCode = 1 versionCode = 1
versionName = "1.0" versionName = "1.0"
@ -22,7 +20,7 @@ android {
buildTypes { buildTypes {
release { release {
isMinifyEnabled = false isMinifyEnabled = true
proguardFiles( proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"), getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro" "proguard-rules.pro"
@ -36,25 +34,16 @@ android {
kotlinOptions { kotlinOptions {
jvmTarget = "11" jvmTarget = "11"
} }
buildFeatures { // buildFeatures {
compose = true // compose = true
} // }
} }
dependencies { dependencies {
implementation(libs.androidx.core.ktx) implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.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) testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(libs.androidx.espresso.core)
androidTestImplementation(platform(libs.androidx.compose.bom)) 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 package com.example.vast
import android.app.Activity
import android.os.Bundle import android.os.Bundle
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
@ -13,35 +14,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import com.example.vast.ui.theme.VastTheme import com.example.vast.ui.theme.VastTheme
class MainActivity : ComponentActivity() { class MainActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) 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 { plugins {
alias(libs.plugins.android.application) apply false alias(libs.plugins.android.application) apply false
alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.kotlin.compose) apply false
alias(libs.plugins.android.library) 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] [versions]
agp = "8.13.0" agp = "8.2.0"
kotlin = "2.2.21" kotlin = "1.9.0"
coreKtx = "1.17.0" coreKtx = "1.17.0"
junit = "4.13.2" junit = "4.13.2"
junitVersion = "1.3.0" junitVersion = "1.3.0"

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

@ -1,3 +1,6 @@
import java.io.FileOutputStream
import kotlin.random.Random
plugins { plugins {
alias(libs.plugins.android.library) alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.android)
@ -5,9 +8,8 @@ plugins {
android { android {
namespace = "com.example.lib" namespace = "com.example.lib"
compileSdk { compileSdk = 34
version = release(36)
}
buildFeatures { buildFeatures {
buildConfig = true buildConfig = true
@ -29,7 +31,7 @@ android {
buildTypes { buildTypes {
release { release {
isMinifyEnabled = false isMinifyEnabled = true
proguardFiles( proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"), getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro" "proguard-rules.pro"
@ -38,12 +40,12 @@ android {
} }
compileOptions { compileOptions {
sourceCompatibility = JavaVersion.VERSION_11 sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_1_8
} }
kotlinOptions { kotlinOptions {
jvmTarget = "11" jvmTarget = "1.8"
} }
} }
@ -54,7 +56,38 @@ dependencies {
testImplementation(libs.junit) testImplementation(libs.junit)
androidTestImplementation(libs.runner) androidTestImplementation(libs.runner)
androidTestImplementation(libs.espresso.core) androidTestImplementation(libs.espresso.core)
implementation("com.squareup.okhttp3:okhttp:5.2.1") implementation("com.squareup.okhttp3:okhttp:4.12.0")
api("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2") 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

@ -18,4 +18,29 @@
# If you keep the line number information, uncomment this to # If you keep the line number information, uncomment this to
# hide the original source file name. # hide the original source file name.
#-renamesourcefileattribute SourceFile #-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 package com.example.action
import kotlin.enums.enumEntries
import kotlin.reflect.KProperty1
data class HttpActionRequest( data class HttpActionRequest(
var url: String, var url: String,
val method: HttpMethod, val method: HttpMethod,
@ -17,12 +14,14 @@ enum class HttpMethod(val value: String) {
Get("GET"), Get("GET"),
Post("POST"); Post("POST");
companion object { companion object {
fun String.toHttMethod(): HttpMethod? { fun String.toHttMethod(): HttpMethod {
return HttpMethod::value.findOrNull(this.uppercase()) 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 { try {
response.code = okResponse.code response.code = okResponse.code
response.headers = okResponse.headers.toMultimap() 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") LogUtils.info("${System.currentTimeMillis()} end call http request $url")

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

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

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

@ -20,4 +20,5 @@
# hide the original source file name. # hide the original source file name.
#-renamesourcefileattribute SourceFile #-renamesourcefileattribute SourceFile
-dontoptimize -dontoptimize
-classobfuscationdictionary ../dict.txt

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

Loading…
Cancel
Save