Android:缩小混淆动态访问的类
Posted
技术标签:
【中文标题】Android:缩小混淆动态访问的类【英文标题】:Android: minification obfuscating dynamically accessed classes 【发布时间】:2016-11-09 00:23:50 【问题描述】:我正在使用Samsung's Motion library 为三星手机创建计步器。当我在 gradle 配置文件中创建一个没有缩小的 APK 时,系统可以工作。但是,当我尝试在发布到商店之前应用缩小时,
buildTypes
release
minifyEnabled true
signingConfig signingConfigs.config
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
debuggable false
jniDebuggable false
我收到错误消息,声称某些库(例如 android.hardware.motion
)不存在。
我已经检查并:
Class.forName("android.hardware.scontext.SContextManager");
如果我删除该行 缩小启用真 我没有错误,所以它必须是代码混淆。
我已尝试将诸如
之类的语句添加到我的 proguard 规则文件中-keep class android.hardware.** *;
-keep class com.samsung.android.sdk.** *;
但这似乎不起作用。 任何想法?谢谢!
【问题讨论】:
您是否尝试禁用 proguard 并检查发布 .apk? 我插入了:-dontoptimize -dontshrink -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose
,但没有帮助
如果您使用 gradle(推荐),您只需删除以 proguardFiles
开头的行(android.buildTypes.release
部分)。
我使用 gradle。排除 android buildTypes proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
行没有帮助
我刚刚更新了。这是缩小。不知道为什么,如果我删除它会发生什么
【参考方案1】:
缺少的类确实只在实际设备上可用。 为了让 ProGuard 处理您的应用程序,您必须包含以下配置:
-dontwarn com.samsung.android.sdk.motion.**
-dontnote com.samsung.android.sdk.motion.**
这将忽略来自 samsung sdk 的警告和注释。
【讨论】:
这是正确的,尽管本身还不够。但是,我将其标记为正确,因为您使我走上了正确的道路。正确的解决方案是:-dontwarn com.samsung.android.** -dontnote com.samsung.android.** -keep class com.samsung.** *; -keep class android.hardware.** *;
我毫不怀疑所有提到的规则都是必要的。特别是-keep class android.hardware.** *;
毫无意义,因为该软件包已安装在设备上,因此 ProGuard 不会考虑。我测试了 Samsung SDK 中的示例项目,我的规则足以成功构建它。
你是对的。除了三星添加到 android.hardware 包中,因此发生的事情是新部分被混淆了。任何较小的子集都不适合我以上是关于Android:缩小混淆动态访问的类的主要内容,如果未能解决你的问题,请参考以下文章