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 {
|
||||
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
普通文件
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
普通文件
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
普通文件
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
普通文件
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
普通文件
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
普通文件
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
普通文件
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
|
||||
正在加载...
在新工单中引用
屏蔽一个用户