MyBookshelf混淆规则Android开源阅读应用代码保护的完整指南【免费下载链接】MyBookshelf阅读是一款可以自定义来源阅读网络内容的工具为广大网络文学爱好者提供一种方便、快捷舒适的试读体验。项目地址: https://gitcode.com/gh_mirrors/my/MyBookshelfMyBookshelf是一款功能强大的Android开源阅读应用它提供了自定义书源、网络小说搜索和舒适的阅读体验。在发布应用时代码混淆是保护应用安全、防止反编译的关键步骤。本文将深入解析MyBookshelf的混淆配置帮助你理解如何保护你的Android应用代码。 MyBookshelf项目简介MyBookshelf阅读是一款可以自定义来源阅读网络内容的工具为广大网络文学爱好者提供方便、快捷舒适的试读体验。项目基于Java和Kotlin混合开发采用MVP架构支持多种书源格式和自定义阅读界面。 为什么需要代码混淆代码混淆是Android应用发布前的重要步骤它可以防止反编译使反编译后的代码难以阅读和理解减小APK体积通过移除无用代码和缩短标识符名称保护商业逻辑隐藏关键算法和业务逻辑提升性能优化代码结构提高运行效率️ MyBookshelf混淆规则详解核心混淆配置文件MyBookshelf的混淆规则位于app/proguard-rules.pro文件中这是一个完整的ProGuard配置示例。让我们分析其中的关键部分1. 基础混淆设置# 代码混淆压缩比在0~7之间默认为5 -optimizationpasses 5 # 混合时不使用大小写混合混合后的类名为小写 -dontusemixedcaseclassnames # 指定不去忽略非公共库的类 -dontskipnonpubliclibraryclasses # 生成映射文件便于调试 -verbose # 不做预校验Android不需要preverify加快混淆速度 -dontpreverify2. 保留重要属性# 保留Annotation不混淆 -keepattributes *Annotation*,InnerClasses # 避免混淆泛型 -keepattributes Signature # 抛出异常时保留代码行号 -keepattributes SourceFile,LineNumberTable3. Android组件保护MyBookshelf特别注重保护Android四大组件和自定义控件# 保留四大组件和自定义Application -keep public class * extends android.app.Activity -keep public class * extends android.app.Application -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider # 保留自定义控件继承自View -keep public class * extends android.view.View{ *** get*(); void set*(***); public init(android.content.Context); public init(android.content.Context, android.util.AttributeSet); public init(android.content.Context, android.util.AttributeSet, int); }4. 数据序列化保护# 保留Parcelable序列化类 -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } # 保留Serializable序列化类 -keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; !static !transient fields; !private fields; !private methods; }5. 回调函数保护# 保护带有回调函数的onXXEvent、**On*Listener -keepclassmembers class * { void *(**On*Event); void *(**On*Listener); } 项目特定保护规则核心业务类保护MyBookshelf保护了多个核心业务模块# 保护js引擎调用的java类 -keep class **.analyzeRule.**{*;} # 保护web相关类 -keep class **.web.**{*;} # 保护widget组件 -keep class com.kunfei.bookshelf.widget.**{*;} # 保护数据模型类 -keep class com.kunfei.bookshelf.bean.**{*;} # 保护资源文件 -keep public class com.kunfei.bookshelf.R$*{ public static final int *; }第三方库处理项目正确处理了多个第三方库的混淆# GreenDAO数据库框架 -keep class org.greenrobot.greendao.**{ *; } -dontwarn org.greenrobot.greendao.database.** # 网络请求库 -keep class retrofit2.**{*;} -keep class okhttp3.**{*;} -keep class okio.**{*;} # RxJava相关 -dontwarn rx.** # 解析库 -keep class org.jsoup.**{*;} -keep class org.simpleframework.xml.**{*;} -dontwarn org.simpleframework.xml.** 构建配置中的混淆设置在app/build.gradle中MyBookshelf配置了构建类型buildTypes { release { signingConfig signingConfigs.myConfig minifyEnabled false proguardFiles getDefaultProguardFile(proguard-android.txt), proguard-rules.pro } debug { signingConfig signingConfigs.myConfig applicationIdSuffix .debug versionNameSuffix debug minifyEnabled false proguardFiles getDefaultProguardFile(proguard-android.txt), proguard-rules.pro } }注意当前配置中minifyEnabled设置为false这意味着混淆功能被禁用。要启用混淆需要将其改为true。 实用混淆技巧1. 移除日志输出# 移除Log类打印减小APK体积 -assumenosideeffects class android.util.Log { public static int v(...); public static int i(...); public static int w(...); public static int d(...); public static int e(...); }2. 枚举类保护# 保留枚举类不被混淆 -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); }3. 资源文件保护# 保留R文件中的资源ID -keep class **.R$* {*;} 优化建议启用混淆的步骤修改build.gradle将minifyEnabled设置为true测试混淆效果构建release版本并测试功能处理混淆问题根据错误日志添加必要的keep规则生成映射文件使用-printmapping参数生成映射文件便于调试常见问题解决ClassNotFoundException添加对应的-keep规则MethodNotFoundException保护特定方法不被混淆资源找不到确保R文件被正确保护第三方库问题添加对应的-dontwarn规则 性能优化混淆算法优化# 指定混淆采用的算法 -optimizations !code/simplification/cast,!field/*,!class/merging/*体积优化通过混淆可以显著减小APK体积缩短类名、方法名、字段名移除未使用的代码内联短方法️ 调试与维护保留调试信息# 保留行号信息便于崩溃分析 -keepattributes SourceFile,LineNumberTable生成映射文件在proguard配置中添加-printmapping mapping.txt这样可以在app/build/outputs/mapping/release/目录下找到映射文件用于反混淆堆栈跟踪。 阅读体验优化MyBookshelf不仅注重代码保护还提供了优秀的阅读体验。应用内置了多种阅读背景 总结MyBookshelf的混淆配置展示了Android应用代码保护的完整实践。通过合理的混淆规则可以保护核心业务逻辑不被轻易反编译优化应用性能和减小体积保持代码可维护性的同时确保安全兼容第三方库避免运行时错误对于开发者来说理解这些混淆规则不仅有助于保护自己的应用还能在遇到混淆相关问题时快速定位和解决。MyBookshelf作为一个开源项目其混淆配置为其他Android应用提供了很好的参考。提示在实际发布应用时记得启用混淆功能将minifyEnabled设为true并根据具体需求调整混淆规则确保应用在保护代码的同时保持稳定运行。【免费下载链接】MyBookshelf阅读是一款可以自定义来源阅读网络内容的工具为广大网络文学爱好者提供一种方便、快捷舒适的试读体验。项目地址: https://gitcode.com/gh_mirrors/my/MyBookshelf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考