feat(proguard): 各模块开启 R8 混淆,添加 proguard-rules.pro 保留公开 API

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
这个提交包含在:
XuqmGroup 2026-06-23 13:35:07 +08:00
父节点 73fcba76fb
当前提交 aac4bd7baa
共有 15 个文件被更改,包括 192 次插入1 次删除

查看文件

@ -8,7 +8,21 @@ group = rootProject.group
android {
namespace = "com.xuqm.sdk.bugcollect"
compileSdk = 36
defaultConfig { minSdk = 24 }
defaultConfig {
minSdk = 24
consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
publishing { singleVariant("release") { withSourcesJar() } }
compileOptions {

查看文件

@ -0,0 +1,8 @@
# BugCollect is accessed via reflection from sdk-webview keep in consuming app
-keep class com.xuqm.sdk.bugcollect.BugCollect {
public *;
static <fields>;
}
-keep public class com.xuqm.sdk.bugcollect.LogLevel { public *; }
-keep public class com.xuqm.sdk.bugcollect.Breadcrumb { public *; }
-keep public class com.xuqm.sdk.bugcollect.FunnelTracker { public *; }

22
sdk-bugcollect/proguard-rules.pro vendored 普通文件
查看文件

@ -0,0 +1,22 @@
# BugCollect object: accessed via reflection from sdk-webview (captureError, INSTANCE)
-keep class com.xuqm.sdk.bugcollect.BugCollect {
public *;
static <fields>;
}
# Public types passed to / returned from BugCollect public API
-keep public class com.xuqm.sdk.bugcollect.Breadcrumb { public *; }
-keep public class com.xuqm.sdk.bugcollect.LogLevel { public *; }
-keep public class com.xuqm.sdk.bugcollect.IssueEvent { *; }
-keep public class com.xuqm.sdk.bugcollect.LogEvent { *; }
-keep public class com.xuqm.sdk.bugcollect.FunnelTracker { public *; }
# ContentProvider: class name referenced in AndroidManifest must not be renamed
-keep class com.xuqm.sdk.bugcollect.internal.BugCollectInitProvider
-keepattributes *Annotation*, Signature, InnerClasses, EnclosingMethod
# Gson field names in log payloads
-keepclassmembers class com.xuqm.sdk.bugcollect.** {
@com.google.gson.annotations.SerializedName <fields>;
}

查看文件

@ -19,6 +19,16 @@ android {
consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11

29
sdk-core/proguard-rules.pro vendored 普通文件
查看文件

@ -0,0 +1,29 @@
# ── Public API entry points ───────────────────────────────────────────────────
-keep public class com.xuqm.sdk.XuqmSDK { public *; }
-keep public class com.xuqm.sdk.XuqmLoginSession { public *; }
-keep public class com.xuqm.sdk.XuqmUserInfo { public *; }
-keep public class com.xuqm.sdk.core.** { public *; }
-keep public class com.xuqm.sdk.file.FileSDK { public *; }
-keep public class com.xuqm.sdk.file.FileUploadResult { public *; }
# Compose UI components referenced directly by consumers
-keep public class com.xuqm.sdk.ui.** { public *; }
# ContentProviders: class names referenced in AndroidManifest must not be renamed
-keep class com.xuqm.sdk.internal.XuqmInitializerProvider
-keep class com.xuqm.sdk.internal.XuqmMergedProvider
# Kotlin & Annotation metadata
-keepattributes *Annotation*, Signature, InnerClasses, EnclosingMethod
# Kotlinx serialization
-keepclassmembers @kotlinx.serialization.Serializable class ** { *; }
-keep class kotlinx.serialization.** { *; }
# Gson field names used in network models
-keepclassmembers class com.xuqm.sdk.** {
@com.google.gson.annotations.SerializedName <fields>;
}
# Retrofit: keep service interfaces
-keep,allowobfuscation interface com.xuqm.sdk.network.** { *; }

查看文件

@ -17,6 +17,16 @@ android {
consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11

11
sdk-im/proguard-rules.pro vendored 普通文件
查看文件

@ -0,0 +1,11 @@
# Public API
-keep public class com.xuqm.sdk.im.ImSDK { public *; }
-keep public class com.xuqm.sdk.im.model.** { public *; }
-keep public interface com.xuqm.sdk.im.listener.** { public *; }
-keepattributes *Annotation*, Signature, InnerClasses, EnclosingMethod
# IM message payloads use Gson
-keepclassmembers class com.xuqm.sdk.im.** {
@com.google.gson.annotations.SerializedName <fields>;
}

查看文件

@ -18,6 +18,16 @@ android {
consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11

15
sdk-license/proguard-rules.pro vendored 普通文件
查看文件

@ -0,0 +1,15 @@
# Public API
-keep public class com.xuqm.sdk.license.LicenseSDK { public *; }
-keep public interface com.xuqm.sdk.license.LicenseCallback { public *; }
-keep public class com.xuqm.sdk.license.LicenseConfig { public *; }
-keep public class com.xuqm.sdk.license.LicenseResult { public *; }
-keep public class com.xuqm.sdk.license.model.** { public *; }
# ContentProvider: class name referenced in AndroidManifest must not be renamed
-keep class com.xuqm.sdk.license.internal.LicenseInitializerProvider
-keepattributes *Annotation*, Signature, InnerClasses, EnclosingMethod
# Kotlinx serialization (used by this module)
-keepclassmembers @kotlinx.serialization.Serializable class ** { *; }
-keep class kotlinx.serialization.** { *; }

查看文件

@ -20,6 +20,16 @@ android {
manifestPlaceholders["XUQM_HONOR_APP_ID"] = ""
}
buildTypes {
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11

13
sdk-push/proguard-rules.pro vendored 普通文件
查看文件

@ -0,0 +1,13 @@
# Public API entry point
-keep public class com.xuqm.sdk.push.PushSDK { public *; }
-keep public class com.xuqm.sdk.push.model.** { public *; }
-keep public class com.xuqm.sdk.push.PushNotificationChannelManager { public *; }
# Service / Receiver classes registered in AndroidManifest must NOT be renamed
-keep class com.xuqm.sdk.push.fcm.XuqmFirebaseMessagingService
-keep class com.xuqm.sdk.push.honor.XuqmHonorPushService
-keep class com.xuqm.sdk.push.huawei.XuqmHuaweiPushService
-keep class com.xuqm.sdk.push.xiaomi.XuqmXiaomiPushReceiver
-keep class com.xuqm.sdk.push.vivo.XuqmVivoPushReceiver
-keepattributes *Annotation*, Signature, InnerClasses, EnclosingMethod

查看文件

@ -17,6 +17,16 @@ android {
consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11

11
sdk-update/proguard-rules.pro vendored 普通文件
查看文件

@ -0,0 +1,11 @@
# Public API
-keep public class com.xuqm.sdk.update.UpdateSDK { public *; }
-keep public interface com.xuqm.sdk.update.UpdateListener { public *; }
-keep public class com.xuqm.sdk.update.model.** { public *; }
-keepattributes *Annotation*, Signature, InnerClasses, EnclosingMethod
# Gson model fields in update info payload
-keepclassmembers class com.xuqm.sdk.update.** {
@com.google.gson.annotations.SerializedName <fields>;
}

查看文件

@ -18,6 +18,16 @@ android {
consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11

8
sdk-webview/proguard-rules.pro vendored 普通文件
查看文件

@ -0,0 +1,8 @@
# All webview classes are public API consumed directly by app code
-keep public class com.xuqm.sdk.webview.** { public *; }
# XWebViewActivity is registered in AndroidManifest must not be renamed
-keep class com.xuqm.sdk.webview.XWebViewActivity
# Compose @Composable functions require annotation and signature retention
-keepattributes *Annotation*, Signature, InnerClasses, EnclosingMethod