Я использую Proguard для обфускации моего приложения для Android. Все работает отлично, за исключением одного Activity
.NoClassDefFoundError Proguard Activity
java.lang.NoClassDefFoundError: com.myapp.android.MediaActivity
Когда я не пользуюсь Proguard, Activity
работает нормально. У меня есть только эта проблема при использовании Proguard.
Мой Activity
объявлен на AndroidManifest
, и все мои остальные Activity
работают нормально, у меня есть проблема только на этом.
Вот мой Proguard конфигурации:
-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*
-keep class com.myapp.android.MediaActivity { *; }
-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
-keep public class * extends android.view.View {
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public void set*(...);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * implements android.os.Parcelable {
static android.os.Parcelable$Creator CREATOR;
}
-keepclassmembers class **.R$* {
public static <fields>;
}
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
# Also keep - Enumerations. Keep the special static
# methods that are required in enumeration classes.
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# We want to keep methods in Activity that could be used in the XML attribute onClick
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
# keep setters in Views so that animations can still work.
# see http://proguard.sourceforge.net/manual/examples.html#beans
-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}
# We want to keep methods in Activity that could be used in the XML attribute onClick
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-keepclassmembers class **.R$* {
public static <fields>;
}
Как вы можете видеть, я также добавить эту конкретную линию, чтобы попытаться заставить его работать, но это не так:
-keep class com.myapp.android.MediaActivity { *; }
EDIT: Вот импорт в MediaActivity:
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.TextView;
import com.myapp.android.fragment.places.FragmentSupportPlacesBase;
import com.myapp.android.fragment.grid.BaseCursorGridFragmentSupport;
import com.myapp.android.fragment.grid.SupportScreenShotCursorGridFragment;
import com.myapp.android.fragment.grid.SupportTimelineCursorGridFragment;
import com.myapp.android.model.Place;
import com.myapp.android.model.SelectedInfo;
import java.util.ArrayList;
import java.util.List;
Кто-нибудь, как любые идеи, почему это происходит, и как я могу это исправить?
Можете ли вы разместить импорт «MediaActivity»? Возможно, проблема в том, что Proguard запутывает некоторые из этих классов. – antonio
Я добавил импорт в вопрос. Возможно, вы правы, но многие мои действия используют этот тип импорта. Фрагменты, объекты модели, панель инструментов, довольно простые вещи ... – Andros