2013-10-17 63 views
1

當我的2.3.x版本設備使用ProGuard縮小我的應用程序後,我得到這個錯誤上運行我的應用程序後Proguard的injectView不工作了

10-17 11:36:10.045: WARN/System.err(17989): Caused by: java.lang.NullPointerException: Can't inject null value into class de.mobile.ui.BaseActivity.drawerLayout when field is not @Nullable 
10-17 11:36:10.045: WARN/System.err(17989): at roboguice.inject.ViewListener$ViewMembersInjector.reallyInjectMemberViews(ViewListener.java:179) 
10-17 11:36:10.045: WARN/System.err(17989): at roboguice.inject.ViewListener$ViewMembersInjector.reallyInjectMembers(ViewListener.java:138) 
10-17 11:36:10.045: WARN/System.err(17989): at roboguice.inject.ViewListener$ViewMembersInjector.injectViews(ViewListener.java:246) 
10-17 11:36:10.045: WARN/System.err(17989): at roboguice.inject.ContextScopedRoboInjector.injectViewMembers(ContextScopedRoboInjector.java:258) 
10-17 11:36:10.045: WARN/System.err(17989): at de.mobile.ui.BaseActivity.onContentChanged(BaseActivity.java:484) 
10-17 11:36:10.045: WARN/System.err(17989): at com.actionbarsherlock.internal.ActionBarSherlockCompat.setContentView(ActionBarSherlockCompat.java:876) 
10-17 11:36:10.045: WARN/System.err(17989): at com.actionbarsherlock.app.SherlockFragmentActivity.setContentView(SherlockFragmentActivity.java:267) 
10-17 11:36:10.045: WARN/System.err(17989): at de.mobile.ui.webview.WebViewActivity.createUI(WebViewActivity.java:135) 
10-17 11:36:10.045: WARN/System.err(17989): at de.mobile.ui.BaseActivity.onCreate(BaseActivity.java:157) 
10-17 11:36:10.045: WARN/System.err(17989): at de.mobile.ui.webview.WebViewActivity.onCreate(WebViewActivity.java:76) 

這裏是我的WebViewActivity

@Override 
    protected void createUI(final Bundle savedInstanceState) { 
     LOG.debug("createUI"); 

     // hack to enable keyboard in webviews which is not usable on Android 2.3.x together with new MenuSlider 
     if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) { 
      final LinearLayout layout = new LinearLayout(this); 
      final int CONTENT_VIEW_ID = 10101010; // any id 
      layout.setId(CONTENT_VIEW_ID); 
      layout.setBackgroundColor(Color.WHITE); 

      setContentView(layout, 
       new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 
        LinearLayout.LayoutParams.MATCH_PARENT)); 

      FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
      fragmentTransaction.add(CONTENT_VIEW_ID, getWebViewFragment()); 
      fragmentTransaction.commit(); 

      return; 
     } 

     setContentView(R.layout.web_activity); 

     FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction.add(R.id.web_layout, getWebViewFragment()); 
     fragmentTransaction.commit(); 

    } 
代碼

,在這裏我得到了BaseActivity空

@Override 
    public void onContentChanged() { 
     super.onContentChanged(); 
     RoboGuice.getInjector(this).injectViewMembers(this); 
    } 

這裏是我的ProGuard文件

-target 1.6 
-ignorewarnings 
-dontoptimize 
-dontobfuscate 
-dontskipnonpubliclibraryclasses 
-dontpreverify 
-verbose 

-renamesourcefileattribute SourceFile 

-keepattributes SourceFile,LineNumberTable,*Annotation* 

-printmapping map.txt 
-printseeds seed.txt 
-printusage unused.txt 

# The -optimizations option disables some arithmetic simplifications that Dalvik 1.0 and 1.5 can't handle. 
-optimizations !code/simplification/arithmetic 

-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } 

-keep class de.mobile.** 
-keepclassmembers class de.mobile.** { public <init>(...); } 
-keepclassmembers class de.mobile.** { 
    *** set*(***); 
    *** get*(); 
} 
-keep class de.mobile.** {*;} 
-keepclassmembers class de.mobile.** {*;} 

-keep class de.mobile.test.R* 
-keep class de.mobile.**.*Test { public void test*(); } 

-keep class de.shop.api.** {*;} 
-keepclassmembers class de.shop.api.** {*;} 
-keepclassmembers class de.shop.api.client.** { public <init>(...); } 

-keep class com.madgag.android.blockingprompt.** 

-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*(...); } 

-keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } 
-keepclassmembers class android.support.v4.app.Fragment { *** getActivity(); public *** onCreate(); public *** onCreateOptionsMenu(...); } 

-keep public class * extends junit.framework.TestCase 
-keep class junit.framework.** 

-keepclassmembers class * { @com.google.inject.Provides *; @android.test.suitebuilder.annotation.* *; void test*(...); } 
# There's no way to keep all @Observes methods, so use the On*Event convention to identify event handlers 
-keepclassmembers class * { 
    void *(**On*Event); 
} 

-keep public class roboguice.** {*;} 
-keepclassmembers class roboguice.** {*;} 
-keep class com.google.** {*;} 
-keep class com.google.inject.Binder 
-keep class com.google.inject.Key 
-keep class com.google.inject.Provider 
-keep class com.google.inject.TypeLiteral 

-keepclassmembers class * { @com.google.inject.Inject <init>(...); } 
-keepclassmembers class com.google.inject.assistedinject.FactoryProvider2 { *; } 
-keepclassmembers class com.google.** { 
    private void finalizeReferent(); 
    protected void finalizeReferent(); 
    public void finalizeReferent(); 
    void finalizeReferent(); 

    private *** startFinalizer(java.lang.Class,java.lang.Object); 
    protected *** startFinalizer(java.lang.Class,java.lang.Object); 
    public *** startFinalizer(java.lang.Class,java.lang.Object); 
    *** startFinalizer(java.lang.Class,java.lang.Object); 
} 

-keepclassmembers class * extends com.actionbarsherlock.ActionBarSherlock { public <init>(...); } 

-keepnames class * implements java.io.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>; 
    private void writeObject(java.io.ObjectOutputStream); 
    private void readObject(java.io.ObjectInputStream); 
    java.lang.Object writeReplace(); 
    java.lang.Object readResolve(); 
} 

-keep class org.taptwo.android.widget.** 
-keepclassmembers class org.taptwo.android.widget.** { public <init>(...); } 
-keepclassmembers class org.taptwo.android.widget.** { 
    *** set*(***); 
    *** get*(); 
} 

#ACRA specifics 
# we need line numbers in our stack traces otherwise they are pretty useless 
-renamesourcefileattribute SourceFile 
-keepattributes SourceFile,LineNumberTable 

# ACRA needs "annotations" so add this... 
-keepattributes *Annotation* 

# keep this class so that logging will show 'ACRA' and not a obfuscated name like 'a'. 
# Note: if you are removing log messages elsewhere in this file then this isn't necessary 
-keep class org.acra.ACRA { 
    *; 
} 

# keep this around for some enums that ACRA needs 
-keep class org.acra.ReportingInteractionMode { 
    *; 
} 
-keepnames class org.acra.ReportField { 
    *; 
} 

# keep this otherwise it is removed by ProGuard 
-keep public class org.acra.ErrorReporter 
{ 
    public void addCustomData(java.lang.String,java.lang.String); 
    public void putCustomData(java.lang.String,java.lang.String); 
    public void removeCustomData(java.lang.String); 
} 

# keep this otherwise it is removed by ProGuard 
-keep public class org.acra.ErrorReporter 
{ 
    public void handleSilentException(java.lang.Throwable); 
} 

# Trademob Tracking 

-keep class com.loopj.** { *; } 
-keep class com.trademob.tracking.** { *; } 


-assumenosideeffects class android.util.Log { 
    public static boolean isLoggable(java.lang.String, int); 
    public static int v(...); 
    public static int i(...); 
    public static int w(...); 
    public static int d(...); 
    public static int e(...); 
} 

-assumenosideeffects class * implements org.slf4j.Logger { 
    public void trace(...); 
    public void debug(...); 
    public void info(...); 
    public void warn(...); 
    public void error(...); 
} 
+0

我可以調試這個嗎? – AdrianoCelentano

回答

-2

升級我的Proguard版本有所幫助,我猜我是因爲proguard刪除了一些註釋。

+0

您爲ProGuard添加了哪些解決方案? – Dejan