Splendid입니다.
다른 갤럭시폰에서 노트4 날씨위젯을 사용할 때 도시 리스트를 보려고 하면 강제종료 혹은 오류가 나죠.
해결법을 알려드리겠습니다.
디오덱스한 현재 휴대폰의 twframework.jar을 추출합니다.
디컴파일합니다.
twframework.jar/smali/com/sec/android/touchwiz/widget
위의 경로로 들어갑니다.
그리고 TwAdapterView.smali 를 열어주세요.
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/sec/android/touchwiz/widget/TwAdapterView$1;,
Lcom/sec/android/touchwiz/widget/TwAdapterView$SelectionNotifier;,
Lcom/sec/android/touchwiz/widget/TwAdapterView$AdapterDataSetObserver;,
Lcom/sec/android/touchwiz/widget/TwAdapterView$AdapterContextMenuInfo;,
Lcom/sec/android/touchwiz/widget/TwAdapterView$OnTwNotifyKeyPressListener;,
Lcom/sec/android/touchwiz/widget/TwAdapterView$OnItemSelectedListener;,
Lcom/sec/android/touchwiz/widget/TwAdapterView$OnItemLongClickListener;,
Lcom/sec/android/touchwiz/widget/TwAdapterView$OnItemClickListener;
}
.end annotation
위의 항목을 찾아주세요.
그리고 구문을 추가합니다.
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/sec/android/touchwiz/widget/TwAdapterView$1;,
Lcom/sec/android/touchwiz/widget/TwAdapterView$SelectionNotifier;,
Lcom/sec/android/touchwiz/widget/TwAdapterView$AdapterDataSetObserver;,
Lcom/sec/android/touchwiz/widget/TwAdapterView$AdapterContextMenuInfo;,
Lcom/sec/android/touchwiz/widget/TwAdapterView$OnTwNotifyKeyPressListener;,
Lcom/sec/android/touchwiz/widget/TwAdapterView$OnTwMultiSelectedListener;,
Lcom/sec/android/touchwiz/widget/TwAdapterView$OnItemSelectedListener;,
Lcom/sec/android/touchwiz/widget/TwAdapterView$OnItemLongClickListener;,
Lcom/sec/android/touchwiz/widget/TwAdapterView$OnItemClickListener;
}
.end annotation
위처럼 구문을 추가해줍니다.
그 다음은
.field mOnItemLongClickListener:Lcom/sec/android/touchwiz/widget/TwAdapterView$OnItemLongClickListener;
.field mOnItemSelectedListener:Lcom/sec/android/touchwiz/widget/TwAdapterView$OnItemSelectedListener;
위 구문을 찾습니다.
그리고 바로 그 아래칸에 구문을 추가하여 아래와 같이 만들어줍니다.
.field mOnItemLongClickListener:Lcom/sec/android/touchwiz/widget/TwAdapterView$OnItemLongClickListener;
.field mOnItemSelectedListener:Lcom/sec/android/touchwiz/widget/TwAdapterView$OnItemSelectedListener;
.field mOnTwMultiSelectedListener:Lcom/sec/android/touchwiz/widget/TwAdapterView$OnTwMultiSelectedListener;
.field mOnTwNotifyKeyPressListener:Lcom/sec/android/touchwiz/widget/TwAdapterView$OnTwNotifyKeyPressListener;
이렇게 하셨으면 맽 끝으로 가서 한줄 띄우고 구문을 추가해줍니다.
.method public final getOnTwMultiSelectedListener()Lcom/sec/android/touchwiz/widget/TwAdapterView$OnTwMultiSelectedListener;
.locals 1
.prologue
.line 437
.local p0, this:Lcom/sec/android/touchwiz/widget/TwAdapterView;,"Lcom/sec/android/touchwiz/widget/TwAdapterView;"
iget-object v0, p0, Lcom/sec/android/touchwiz/widget/TwAdapterView;->mOnTwMultiSelectedListener:Lcom/sec/android/touchwiz/widget/TwAdapterView$OnTwMultiSelectedListener;
return-object v0
.end method
.method public setTwMultiSelectedListener(Lcom/sec/android/touchwiz/widget/TwAdapterView$OnTwMultiSelectedListener;)V
.locals 0
.prologue
.line 429
.local p0, this:Lcom/sec/android/touchwiz/widget/TwAdapterView;,"Lcom/sec/android/touchwiz/widget/TwAdapterView;"
iput-object p1, p0, Lcom/sec/android/touchwiz/widget/TwAdapterView;->mOnTwMultiSelectedListener:Lcom/sec/android/touchwiz/widget/TwAdapterView$OnTwMultiSelectedListener;
.line 430
return-void
.end method
.method public twNotifyMultiSelectedStart()V
.locals 1
.prologue
.line 455
.local p0, this:Lcom/sec/android/touchwiz/widget/TwAdapterView;,"Lcom/sec/android/touchwiz/widget/TwAdapterView;"
iget-object v0, p0, Lcom/sec/android/touchwiz/widget/TwAdapterView;->mOnTwMultiSelectedListener:Lcom/sec/android/touchwiz/widget/TwAdapterView$OnTwMultiSelectedListener;
if-eqz v0, :cond_0
.line 459
:cond_0
return-void
.end method
.method public twNotifyMultiSelectedStart(II)V
.locals 1
.prologue
.line 473
.local p0, this:Lcom/sec/android/touchwiz/widget/TwAdapterView;,"Lcom/sec/android/touchwiz/widget/TwAdapterView;"
iget-object v0, p0, Lcom/sec/android/touchwiz/widget/TwAdapterView;->mOnTwMultiSelectedListener:Lcom/sec/android/touchwiz/widget/TwAdapterView$OnTwMultiSelectedListener;
if-eqz v0, :cond_0
.line 474
iget-object v0, p0, Lcom/sec/android/touchwiz/widget/TwAdapterView;->mOnTwMultiSelectedListener:Lcom/sec/android/touchwiz/widget/TwAdapterView$OnTwMultiSelectedListener;
invoke-interface {v0, p1, p2}, Lcom/sec/android/touchwiz/widget/TwAdapterView$OnTwMultiSelectedListener;->OnTwMultiSelectStart(II)V
.line 477
:cond_0
return-void
.end method
.method public twNotifyMultiSelectedState(Landroid/view/View;IJZZZ)Z
.locals 9
.prologue
.line 442
.local p0, this:Lcom/sec/android/touchwiz/widget/TwAdapterView;,"Lcom/sec/android/touchwiz/widget/TwAdapterView;"
iget-object v0, p0, Lcom/sec/android/touchwiz/widget/TwAdapterView;->mOnTwMultiSelectedListener:Lcom/sec/android/touchwiz/widget/TwAdapterView$OnTwMultiSelectedListener;
if-eqz v0, :cond_0
.line 443
iget-object v0, p0, Lcom/sec/android/touchwiz/widget/TwAdapterView;->mOnTwMultiSelectedListener:Lcom/sec/android/touchwiz/widget/TwAdapterView$OnTwMultiSelectedListener;
move-object v1, p0
move-object v2, p1
move v3, p2
move-wide v4, p3
move v6, p5
move v7, p6
move/from16 v8, p7
invoke-interface/range {v0 .. v8}, Lcom/sec/android/touchwiz/widget/TwAdapterView$OnTwMultiSelectedListener;->onTwMultiSelected(Lcom/sec/android/touchwiz/widget/TwAdapterView;Landroid/view/View;IJZZZ)V
.line 444
const/4 v0, 0x1
.line 447
:goto_0
return v0
:cond_0
const/4 v0, 0x0
goto :goto_0
.end method
.method public twNotifyMultiSelectedStop()V
.locals 1
.prologue
.line 466
.local p0, this:Lcom/sec/android/touchwiz/widget/TwAdapterView;,"Lcom/sec/android/touchwiz/widget/TwAdapterView;"
iget-object v0, p0, Lcom/sec/android/touchwiz/widget/TwAdapterView;->mOnTwMultiSelectedListener:Lcom/sec/android/touchwiz/widget/TwAdapterView$OnTwMultiSelectedListener;
if-eqz v0, :cond_0
.line 469
:cond_0
return-void
.end method
.method public twNotifyMultiSelectedStop(II)V
.locals 1
.prologue
.line 481
.local p0, this:Lcom/sec/android/touchwiz/widget/TwAdapterView;,"Lcom/sec/android/touchwiz/widget/TwAdapterView;"
iget-object v0, p0, Lcom/sec/android/touchwiz/widget/TwAdapterView;->mOnTwMultiSelectedListener:Lcom/sec/android/touchwiz/widget/TwAdapterView$OnTwMultiSelectedListener;
if-eqz v0, :cond_0
.line 482
iget-object v0, p0, Lcom/sec/android/touchwiz/widget/TwAdapterView;->mOnTwMultiSelectedListener:Lcom/sec/android/touchwiz/widget/TwAdapterView$OnTwMultiSelectedListener;
invoke-interface {v0, p1, p2}, Lcom/sec/android/touchwiz/widget/TwAdapterView$OnTwMultiSelectedListener;->OnTwMultiSelectStop(II)V
.line 484
:cond_0
return-void
.end method
이렇게 추가하셨으면 저장하고 닫습니다.
그 다음엔 같은 폴더에 TwAbsListView.smali를 열어줍니다.
.field private mIsCtrlkeyPressed:Z
.field private mIsDoubleTapDone:Z
이 항목을 찾아서 한줄 띄우고 구문을 추가해줍니다.
.field private mIsCtrlkeyPressed:Z
.field private mIsDoubleTapDone:Z
.field private mIsDragBlockEnabled:Z
이렇게 완료가 되었으면
밑으로 가서 아래의 구문을 추가합니다.
.method public setEnableDragBlock(Z)V
.locals 1
.prologue
.line 9476
const/4 v0, 0x0
iput-boolean v0, p0, Lcom/sec/android/touchwiz/widget/TwAbsListView;->mIsDragBlockEnabled:Z
.line 9477
return-void
.end method
그리고 저장합니다.
그리고 첨부파일의 smali를 같은 폴더에 넣고 컴파일해주시면 끝납니다.
결과물
[출처] 갤럭시노트4 날씨위젯 도시 리스트 보기 버그 픽스|작성자 Splendid