MixPanelAPI NoClassDefFoundError

时间:2014-09-04 10:57:19

标签: android proguard mixpanel

在调用 com.mixpanel.android.mpmetrics.MixpanelAPI

时,我正在努力解决 java.lang.NoClassDefFoundError

这是因为我运行 proguard (我必须)。但是我添加了 proguard 排除:

-keep public class com.mixpanel.android.mpmetrics.**

-keep public class com.mixpanel.android.mpmetrics.MixpanelAPI { *; }

但它没有帮助。

值得一提的是,我以这种方式得到 MixpanelAPI lib

        compile "com.mixpanel.android:mixpanel-android:4.0.0@aar"

所以 aar ,而不是标准 jar

如何使用proguard运行它但不丢失 Mixpanel 代码?

3 个答案:

答案 0 :(得分:4)

从版本4.5开始,Mixpanel建议使用以下proguard设置

-keep class com.mixpanel.android.abtesting.** { *; }
-keep class com.mixpanel.android.mpmetrics.** { *; }
-keep class com.mixpanel.android.surveys.** { *; }
-keep class com.mixpanel.android.util.** { *; }
-keep class com.mixpanel.android.java_websocket.** { *; }

-keepattributes InnerClasses

-keep class **.R
-keep class **.R$* {
    <fields>;
}

您可以在Mixpanel库的自述文件中找到这些说明,位于版本4.5的更改日志中的https://github.com/mixpanel/mixpanel-android/blob/master/README.md

答案 1 :(得分:0)

这可能是解决方案:

-keep class com.mixpanel.android.mpmetrics.** { *; }
-keep class com.mixpanel.android.surveys.** { *; }
-keep class com.mixpanel.android.util.** { *; }

答案 2 :(得分:0)

在我的情况下,问题是不正确的MultiDex实现,我在添加到主类MultiDex.install(this)后解决了它;

public class MyMainClass extends Application {
    @Override
    public void onCreate() {
        MultiDex.install(this);
...
}