feat(proguard): 各模块开启 R8 混淆,添加 proguard-rules.pro 保留公开 API
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
这个提交包含在:
父节点
73fcba76fb
当前提交
aac4bd7baa
@ -8,7 +8,21 @@ group = rootProject.group
|
|||||||
android {
|
android {
|
||||||
namespace = "com.xuqm.sdk.bugcollect"
|
namespace = "com.xuqm.sdk.bugcollect"
|
||||||
compileSdk = 36
|
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() } }
|
publishing { singleVariant("release") { withSourcesJar() } }
|
||||||
|
|
||||||
compileOptions {
|
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
普通文件
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")
|
consumerProguardFiles("consumer-rules.pro")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
isMinifyEnabled = true
|
||||||
|
proguardFiles(
|
||||||
|
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||||
|
"proguard-rules.pro"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility = JavaVersion.VERSION_11
|
sourceCompatibility = JavaVersion.VERSION_11
|
||||||
targetCompatibility = JavaVersion.VERSION_11
|
targetCompatibility = JavaVersion.VERSION_11
|
||||||
|
|||||||
29
sdk-core/proguard-rules.pro
vendored
普通文件
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")
|
consumerProguardFiles("consumer-rules.pro")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
isMinifyEnabled = true
|
||||||
|
proguardFiles(
|
||||||
|
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||||
|
"proguard-rules.pro"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility = JavaVersion.VERSION_11
|
sourceCompatibility = JavaVersion.VERSION_11
|
||||||
targetCompatibility = JavaVersion.VERSION_11
|
targetCompatibility = JavaVersion.VERSION_11
|
||||||
|
|||||||
11
sdk-im/proguard-rules.pro
vendored
普通文件
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")
|
consumerProguardFiles("consumer-rules.pro")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
isMinifyEnabled = true
|
||||||
|
proguardFiles(
|
||||||
|
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||||
|
"proguard-rules.pro"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility = JavaVersion.VERSION_11
|
sourceCompatibility = JavaVersion.VERSION_11
|
||||||
targetCompatibility = JavaVersion.VERSION_11
|
targetCompatibility = JavaVersion.VERSION_11
|
||||||
|
|||||||
15
sdk-license/proguard-rules.pro
vendored
普通文件
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"] = ""
|
manifestPlaceholders["XUQM_HONOR_APP_ID"] = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
isMinifyEnabled = true
|
||||||
|
proguardFiles(
|
||||||
|
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||||
|
"proguard-rules.pro"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility = JavaVersion.VERSION_11
|
sourceCompatibility = JavaVersion.VERSION_11
|
||||||
targetCompatibility = JavaVersion.VERSION_11
|
targetCompatibility = JavaVersion.VERSION_11
|
||||||
|
|||||||
13
sdk-push/proguard-rules.pro
vendored
普通文件
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")
|
consumerProguardFiles("consumer-rules.pro")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
isMinifyEnabled = true
|
||||||
|
proguardFiles(
|
||||||
|
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||||
|
"proguard-rules.pro"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility = JavaVersion.VERSION_11
|
sourceCompatibility = JavaVersion.VERSION_11
|
||||||
targetCompatibility = JavaVersion.VERSION_11
|
targetCompatibility = JavaVersion.VERSION_11
|
||||||
|
|||||||
11
sdk-update/proguard-rules.pro
vendored
普通文件
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")
|
consumerProguardFiles("consumer-rules.pro")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
isMinifyEnabled = true
|
||||||
|
proguardFiles(
|
||||||
|
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||||
|
"proguard-rules.pro"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility = JavaVersion.VERSION_11
|
sourceCompatibility = JavaVersion.VERSION_11
|
||||||
targetCompatibility = JavaVersion.VERSION_11
|
targetCompatibility = JavaVersion.VERSION_11
|
||||||
|
|||||||
8
sdk-webview/proguard-rules.pro
vendored
普通文件
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
|
||||||
正在加载...
在新工单中引用
屏蔽一个用户