Proguard NoClassDefFoundError
Posted
技术标签:
【中文标题】Proguard NoClassDefFoundError【英文标题】: 【发布时间】:2016-02-10 09:37:22 【问题描述】:今天我更新了我的 gradle 以使用最新的播放服务:
build.gradle
classpath 'com.android.tools.build:gradle:1.3.0'
classpath 'com.google.gms:google-services:1.5.0-beta2'
app.gradle
compile 'com.google.android.gms:play-services-analytics:8.3.0'
compile 'com.google.android.gms:play-services-gcm:8.3.0'
我使用 proguard 混淆代码,我得到以下错误:
java.lang.NoClassDefFoundError: my.package.adapters.MyPagerAdapter
我尝试将其添加到 proguard 文件中:
-keep class my.package.adapters.MyPagerAdapter *;
但没有运气。用以前的版本玩服务没问题。 对于从包 android.support.v13.app.FragmentPagerAdapter.
扩展 FragmentPagerAdapter 的每个类,我都会收到此错误。有什么帮助吗?非常感谢。
【问题讨论】:
【参考方案1】:为了防止FragmentPageAdapter派生类被混淆,你需要以下proguard规则:
-keep class * extends android.support.v13.app.FragmentPagerAdapter *;
【讨论】:
您确定您使用的是正确的 proguard 配置吗?您是否设置为真正的“缩小”属性?您的 proguard 配置部分是否像 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'C:/blblabla/proguard-rules-1.5.2.pro'【参考方案2】:如果您对应用程序进行多重索引,请考虑在项目级 build.gradle 中使用 multiDexKeepFile 属性或 multiDexKeepProguard 属性。
更多信息在这里https://developer.android.com/studio/build/multidex.html
基本上,您需要指定要在主 dex 文件中保留哪些类,以便应用正确启动而不会崩溃。在确定 proguard 不是问题后,我个人最终使用了 multiDexKeepProguard。
【讨论】:
以上是关于Proguard NoClassDefFoundError的主要内容,如果未能解决你的问题,请参考以下文章
proguard.ParseException:proguard.cfg 中的未知选项“-encryptstrings”