2011-10-13 61 views
1

我正在使角落圓圈在hdpi設備上工作。除了按下「添加」按鈕(長按屏幕)以及按下應用程序抽屜中的排序樣式按鈕,所有內容都可以正常工作。兩者都導致發射器的F/c。奇怪的是,它正在對我的兩個OG的Droid,以及我的Xoom,但不是我的Droid難以置信2VFY:修改後的索尼愛立信啓動器中的死代碼錯誤

的logcat的:

 I/ActivityManager(24294): Displayed 
    com.sonyericsson.home/.HomeActivity: +1s573ms W/cornerbuttons(26412): 
    Customization file not found: 
    /etc/customization/settings/com/sonyericsson/home/default_settings_topleftcornerbutton.xml 
    W/cornerbuttons(26412): Customization file not found: 
    /etc/customization/settings/com/sonyericsson/home/default_settings_toprightcornerbutton.xml 
    W/cornerbuttons(26412): Customization file not found: 
    /etc/customization/settings/com/sonyericsson/home/default_settings_bottomleftcornerbutton.xml 
    W/cornerbuttons(26412): Customization file not found: 
    /etc/customization/settings/com/sonyericsson/home/default_settings_bottomrightcornerbutton.xml 
    W/app-tray(26412): Customization file not found: 
    /etc/customization/settings/com/sonyericsson/home/default_settings_apptray.xml 
    I/dalvikvm(26412): Could not find method 
    android.app.AlertDialog$Builder.<init>, referenced from method 
    com.sonyericsson.home.HomeActivity$AddDialog.createDialog 
    D/dalvikvm(26412): VFY: dead code 0x0011-0034 in 
    Lcom/sonyericsson/home/HomeActivity$AddDialog;.createDialog 
    ()Landroid/app/Dialog; I/ActivityManager(24294): Displayed 
    com.sonyericsson.home/.HomeActivity: +1s651ms I/dalvikvm(26442): Could 
    not find method android.app.AlertDialog$Builder.<init>, referenced 
    from method com.sonyericsson.home.HomeActivity$SortDialog.createDialog 
    D/dalvikvm(26442): VFY: dead code 0x0019-0047 in 
    Lcom/sonyericsson/home/HomeActivity$SortDialog;.createDialog 
    ()Landroid/app/Dialog; 
    PS: the f/cs occur even without my modifications 

回答

0

當反編譯,你會發現,在SortDialog內部類「HomeActivity $ SortDialog.smali」的createDialog()方法引用Util類來找出用什麼主題來修飾AlertDialogBu​​ilder

SMALI:

.line 2507 
    new-instance v0, Landroid/app/AlertDialog$Builder; 

    iget-object v2, p0, Lcom/sonyericsson/home/HomeActivity$SortDialog;->this$0:Lcom/sonyericsson/home/HomeActivity; 

    iget-object v3, p0, Lcom/sonyericsson/home/HomeActivity$SortDialog;->this$0:Lcom/sonyericsson/home/HomeActivity; 

    invoke-virtual {v3}, Lcom/sonyericsson/home/HomeActivity;->getApplicationContext()Landroid/content/Context; 

    move-result-object v3 

    invoke-static {v3}, Lcom/sonyericsson/home/bidi/Utils;->getDialogAlertThemeStyle(Landroid/content/Context;)I 

    move-result v3 

    invoke-direct {v0, v2, v3}, Landroid/app/AlertDialog$Builder;-><init>(Landroid/content/Context;I)V 

或Java中

int i = Utils.getDialogAlertThemeStyle(HomeActivity.this.getApplicationContext()); 

他們utils的類,然後檢查所保存的主題,它是適用於SortDialog。由於沒有設置主題(我怎麼不知道?)它返回一個0或-1的int(不確定)。

public static final int getDialogAlertThemeStyle(Context paramContext) 
    { 
    if ((sReflectionOk) && (isRtlAlphabet(paramContext))); 
    for (int i = sThemeBidiDialogAlert; ; i = sThemeDialogAlert) 
     return i; 
    } 

    public static final boolean isRtlAlphabet(Context paramContext) 
    { 
    int i = 0; 
    if (sReflectionOk); 
    try 
    { 
     Resources localResources = paramContext.getResources(); 
     int j = **sRtlAlphabetField**; 
     boolean bool = localResources.getBoolean(j); 
     i = bool; 
     return i; 
    } 
    catch (Resources.NotFoundException localNotFoundException) 
    { 
     while (true) 
     LogUtil.reportError("Bidi", "Get rtl alphabet resource failed", localNotFoundException); 
    } 
    } 

j是正在返回什麼和sRtlAlphabetField你看到上面的來電呼籲這是在發現alphabet_isRtl的資源ID不正確初始化,我猜

**sRtlAlphabetField** = Class.forName("com.android.internal.R$bool").getField("alphabet_isRtl").getInt(null); 

啓動程序的Android R.java文件。它不能回收有效的資源標識符,因此爲什麼當Util方法返回-1?或0,它無法用給定的int參數創建AlertDialog的新實例。在HomeActivity $ SortDialog或Util類中輸出i的值的簡單日誌行將顯示它試圖用作主題值的方式,無論哪種方式都可能是gumpf。

這可能是一個長鏡頭,但我敢肯定,這就是爲什麼這個問題正在發生,你希望有在AddToStageDialog,PickActivityDialog,AddDialog和SortDialog「的onCreate這個錯誤()方法。

由於它們都調用同一行:

int i = Utils.getDialogAlertThemeStyle(HomeActivity.this.getApplicationContext()); 

我猜解決將編輯SMALI類:AddToStageDialog,PickActivityDialog,AddDialog和SortDialog讓他們使用創建AlertDialog.Builder只是將上下文作爲參數的構造函數ameter。

AlertDialog.Builder localBuilder1 = new AlertDialog.Builder(localHomeActivity); 

這可以這樣做,但沒有你可以狩獵所有的地方類似電話這樣的主題化的一部分。

祝你好運!

編輯:我這個測試自己,我找到了工作,編輯的smali代碼:

來自:

invoke-direct {v0, v2, v3}, Landroid/app/AlertDialog$Builder;-><init>(Landroid/content/Context;I)V 

到:

invoke-direct {v0, v2}, Landroid/app/AlertDialog$Builder;-><init>(Landroid/content/Context;)V 

做到這一點的對話類我上面提到,它將解決問題:)

相關問題