Thể theo nguyện vọng của anh [chị] em đã yêu cầu , hôm nay mình xin giới thiệu với các bạn cách đưa lockscreen "khóa màn hình" kiểu LG 4x sang SKY . dưới đây mình minh họa từ sky830ke . Hình minh họa sau khi đã làm thành công : Yêu cầu cần có : - rom phải được deodex . - công cụ không thể thiếu apktool , notepad++ đã có trên diễn đàn rất nhiều. anh em search phát nhé . - làm việc với các file sau : android.policy.jar , framework.jar , services.jar và framework-res.apk Bắt đầu : Phần 1 : làm việc với file android.policy.jar : DECOMPILE android.policy.jar và vào đường dẫn sau : \com\android\internal\policy\impl\ KeyguardViewManager.smali mở file KeyguardViewManager bằng Notepad++ và tìm dòng sau : Mã: const v4, 0x4100800 sau đó thay thế bằng : Mã: const v4, 0x4000800 save và compile file android.policy.jar Phần 2 : làm việc với file services.jar : DECOMPILE services.jar và vào đường dẫn sau : \com\android\server\wm\WindowAnimator.smali tìm dòng sau : Mã: .method private updateWindowsAndWallpaperLocked()V trong dòng lệnh này : Mã: .method private updateWindowsAndWallpaperLocked()V - - - - xóa hết tất cả method trong này và thay thế bằng lệnh phía dưới. - - - - .end method thay thế : Mã: .method private updateWindowsAndWallpaperLocked()V .registers 19 .prologue .line 203 move-object/from16 v0, p0 iget v15, v0, Lcom/android/server/wm/WindowAnimator;->mAnimTransactionSequence:I add-int/lit8 v15, v15, 0x1 move-object/from16 v0, p0 iput v15, v0, Lcom/android/server/wm/WindowAnimator;->mAnimTransactionSequence:I .line 205 const/4 v10, 0x0 .line 206 .local v10, unForceHiding:Ljava/util/ArrayList;,"Ljava/util/ArrayList<Lcom/android/server/wm/WindowStateAnimator;>;" const/4 v11, 0x0 .line 208 .local v11, wallpaperInUnForceHiding:Z move-object/from16 v0, p0 iget-object v15, v0, Lcom/android/server/wm/WindowAnimator;->mService:Lcom/android/server/wm/WindowManagerService; iget-object v15, v15, Lcom/android/server/wm/WindowManagerService;->mWindows:Ljava/util/ArrayList; invoke-virtual {v15}, Ljava/util/ArrayList;->size()I move-result v15 add-int/lit8 v8, v15, -0x1 .local v8, i:I :goto_18 if-ltz v8, :cond_271 .line 209 move-object/from16 v0, p0 iget-object v15, v0, Lcom/android/server/wm/WindowAnimator;->mService:Lcom/android/server/wm/WindowManagerService; iget-object v15, v15, Lcom/android/server/wm/WindowManagerService;->mWindows:Ljava/util/ArrayList; invoke-virtual {v15, v8}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object; move-result-object v13 check-cast v13, Lcom/android/server/wm/WindowState; .line 210 .local v13, win:Lcom/android/server/wm/WindowState; iget-object v14, v13, Lcom/android/server/wm/WindowState;->mWinAnimator:Lcom/android/server/wm/WindowStateAnimator; .line 211 .local v14, winAnimator:Lcom/android/server/wm/WindowStateAnimator; iget v6, v14, Lcom/android/server/wm/WindowStateAnimator;->mAttrFlags:I .line 213 .local v6, flags:I iget-object v15, v14, Lcom/android/server/wm/WindowStateAnimator;->mSurface:Landroid/view/Surface; if-eqz v15, :cond_14d .line 214 iget-boolean v12, v14, Lcom/android/server/wm/WindowStateAnimator;->mWasAnimating:Z .line 215 .local v12, wasAnimating:Z move-object/from16 v0, p0 iget-wide v15, v0, Lcom/android/server/wm/WindowAnimator;->mCurrentTime:J invoke-virtual/range {v14 .. v16}, Lcom/android/server/wm/WindowStateAnimator;->stepAnimationLocked(J)Z move-result v9 .line 225 .local v9, nowAnimating:Z if-eqz v9, :cond_82 .line 226 iget-object v15, v14, Lcom/android/server/wm/WindowStateAnimator;->mAnimation:Landroid/view/animation/Animation; if-eqz v15, :cond_7d .line 227 const/high16 v15, 0x10 and-int/2addr v15, v6 if-eqz v15, :cond_4f iget-object v15, v14, Lcom/android/server/wm/WindowStateAnimator;->mAnimation:Landroid/view/animation/Animation; invoke-virtual {v15}, Landroid/view/animation/Animation;->getDetachWallpaper()Z move-result v15 if-eqz v15, :cond_4f .line 229 move-object/from16 v0, p0 iput-object v13, v0, Lcom/android/server/wm/WindowAnimator;->mDetachedWallpaper:Lcom/android/server/wm/WindowState; .line 231 :cond_4f iget-object v15, v14, Lcom/android/server/wm/WindowStateAnimator;->mAnimation:Landroid/view/animation/Animation; invoke-virtual {v15}, Landroid/view/animation/Animation;->getBackgroundColor()I move-result v4 .line 232 .local v4, backgroundColor:I if-eqz v4, :cond_7d .line 233 move-object/from16 v0, p0 iget-object v15, v0, Lcom/android/server/wm/WindowAnimator;->mWindowAnimationBackground:Lcom/android/server/wm/WindowState; if-eqz v15, :cond_75 iget v15, v14, Lcom/android/server/wm/WindowStateAnimator;->mAnimLayer:I move-object/from16 v0, p0 iget-object v0, v0, Lcom/android/server/wm/WindowAnimator;->mWindowAnimationBackground:Lcom/android/server/wm/WindowState; move-object/from16 v16, v0 move-object/from16 v0, v16 iget-object v0, v0, Lcom/android/server/wm/WindowState;->mWinAnimator:Lcom/android/server/wm/WindowStateAnimator; move-object/from16 v16, v0 move-object/from16 v0, v16 iget v0, v0, Lcom/android/server/wm/WindowStateAnimator;->mAnimLayer:I move/from16 v16, v0 move/from16 v0, v16 if-ge v15, v0, :cond_7d .line 236 :cond_75 move-object/from16 v0, p0 iput-object v13, v0, Lcom/android/server/wm/WindowAnimator;->mWindowAnimationBackground:Lcom/android/server/wm/WindowState; .line 237 move-object/from16 v0, p0 iput v4, v0, Lcom/android/server/wm/WindowAnimator;->mWindowAnimationBackgroundColor:I .line 241 .end local v4 #backgroundColor:I :cond_7d const/4 v15, 0x1 move-object/from16 v0, p0 iput-boolean v15, v0, Lcom/android/server/wm/WindowAnimator;->mAnimating:Z .line 247 :cond_82 iget-object v15, v13, Lcom/android/server/wm/WindowState;->mAppToken:Lcom/android/server/wm/AppWindowToken; if-nez v15, :cond_1ac const/4 v2, 0x0 .line 249 .local v2, appAnimator:Lcom/android/server/wm/AppWindowAnimator; :goto_87 if-eqz v2, :cond_d0 iget-object v15, v2, Lcom/android/server/wm/AppWindowAnimator;->animation:Landroid/view/animation/Animation; if-eqz v15, :cond_d0 iget-boolean v15, v2, Lcom/android/server/wm/AppWindowAnimator;->animating:Z if-eqz v15, :cond_d0 .line 251 const/high16 v15, 0x10 and-int/2addr v15, v6 if-eqz v15, :cond_a2 iget-object v15, v2, Lcom/android/server/wm/AppWindowAnimator;->animation:Landroid/view/animation/Animation; invoke-virtual {v15}, Landroid/view/animation/Animation;->getDetachWallpaper()Z move-result v15 if-eqz v15, :cond_a2 .line 253 move-object/from16 v0, p0 iput-object v13, v0, Lcom/android/server/wm/WindowAnimator;->mDetachedWallpaper:Lcom/android/server/wm/WindowState; .line 255 :cond_a2 iget-object v15, v2, Lcom/android/server/wm/AppWindowAnimator;->animation:Landroid/view/animation/Animation; invoke-virtual {v15}, Landroid/view/animation/Animation;->getBackgroundColor()I move-result v4 .line 256 .restart local v4 #backgroundColor:I if-eqz v4, :cond_d0 .line 257 move-object/from16 v0, p0 iget-object v15, v0, Lcom/android/server/wm/WindowAnimator;->mWindowAnimationBackground:Lcom/android/server/wm/WindowState; if-eqz v15, :cond_c8 iget v15, v14, Lcom/android/server/wm/WindowStateAnimator;->mAnimLayer:I move-object/from16 v0, p0 iget-object v0, v0, Lcom/android/server/wm/WindowAnimator;->mWindowAnimationBackground:Lcom/android/server/wm/WindowState; move-object/from16 v16, v0 move-object/from16 v0, v16 iget-object v0, v0, Lcom/android/server/wm/WindowState;->mWinAnimator:Lcom/android/server/wm/WindowStateAnimator; move-object/from16 v16, v0 move-object/from16 v0, v16 iget v0, v0, Lcom/android/server/wm/WindowStateAnimator;->mAnimLayer:I move/from16 v16, v0 move/from16 v0, v16 if-ge v15, v0, :cond_d0 .line 260 :cond_c8 move-object/from16 v0, p0 iput-object v13, v0, Lcom/android/server/wm/WindowAnimator;->mWindowAnimationBackground:Lcom/android/server/wm/WindowState; .line 261 move-object/from16 v0, p0 iput v4, v0, Lcom/android/server/wm/WindowAnimator;->mWindowAnimationBackgroundColor:I .line 266 .end local v4 #backgroundColor:I :cond_d0 if-eqz v12, :cond_101 iget-boolean v15, v14, Lcom/android/server/wm/WindowStateAnimator;->mAnimating:Z if-nez v15, :cond_101 move-object/from16 v0, p0 iget-object v15, v0, Lcom/android/server/wm/WindowAnimator;->mService:Lcom/android/server/wm/WindowManagerService; iget-object v15, v15, Lcom/android/server/wm/WindowManagerService;->mWallpaperTarget:Lcom/android/server/wm/WindowState; if-ne v15, v13, :cond_101 .line 267 move-object/from16 v0, p0 iget v15, v0, Lcom/android/server/wm/WindowAnimator;->mBulkUpdateParams:I or-int/lit8 v15, v15, 0x2 move-object/from16 v0, p0 iput v15, v0, Lcom/android/server/wm/WindowAnimator;->mBulkUpdateParams:I .line 268 move-object/from16 v0, p0 iget v15, v0, Lcom/android/server/wm/WindowAnimator;->mPendingLayoutChanges:I or-int/lit8 v15, v15, 0x4 move-object/from16 v0, p0 iput v15, v0, Lcom/android/server/wm/WindowAnimator;->mPendingLayoutChanges:I .line 270 move-object/from16 v0, p0 iget-object v15, v0, Lcom/android/server/wm/WindowAnimator;->mService:Lcom/android/server/wm/WindowManagerService; const-string v16, "updateWindowsAndWallpaperLocked 2" move-object/from16 v0, p0 iget v0, v0, Lcom/android/server/wm/WindowAnimator;->mPendingLayoutChanges:I move/from16 v17, v0 invoke-virtual/range {v15 .. v17}, Lcom/android/server/wm/WindowManagerService;->debugLayoutRepeats(Ljava/lang/String;I)V .line 275 :cond_101 move-object/from16 v0, p0 iget-object v15, v0, Lcom/android/server/wm/WindowAnimator;->mPolicy:Landroid/view/WindowManagerPolicy; iget-object v0, v13, Lcom/android/server/wm/WindowState;->mAttrs:Landroid/view/WindowManager$LayoutParams; move-object/from16 v16, v0 move-object/from16 v0, v16 invoke-interface {v15, v13, v0}, Landroid/view/WindowManagerPolicy;->doesForceHide(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/WindowManager$LayoutParams;)Z move-result v15 if-eqz v15, :cond_1b2 .line 276 if-nez v12, :cond_142 if-eqz v9, :cond_142 .line 280 move-object/from16 v0, p0 iget v15, v0, Lcom/android/server/wm/WindowAnimator;->mBulkUpdateParams:I or-int/lit8 v15, v15, 0x4 move-object/from16 v0, p0 iput v15, v0, Lcom/android/server/wm/WindowAnimator;->mBulkUpdateParams:I .line 281 move-object/from16 v0, p0 iget v15, v0, Lcom/android/server/wm/WindowAnimator;->mPendingLayoutChanges:I or-int/lit8 v15, v15, 0x4 move-object/from16 v0, p0 iput v15, v0, Lcom/android/server/wm/WindowAnimator;->mPendingLayoutChanges:I .line 283 move-object/from16 v0, p0 iget-object v15, v0, Lcom/android/server/wm/WindowAnimator;->mService:Lcom/android/server/wm/WindowManagerService; const-string v16, "updateWindowsAndWallpaperLocked 3" move-object/from16 v0, p0 iget v0, v0, Lcom/android/server/wm/WindowAnimator;->mPendingLayoutChanges:I move/from16 v17, v0 invoke-virtual/range {v15 .. v17}, Lcom/android/server/wm/WindowManagerService;->debugLayoutRepeats(Ljava/lang/String;I)V .line 286 move-object/from16 v0, p0 iget-object v15, v0, Lcom/android/server/wm/WindowAnimator;->mService:Lcom/android/server/wm/WindowManagerService; const/16 v16, 0x1 move/from16 v0, v16 iput-boolean v0, v15, Lcom/android/server/wm/WindowManagerService;->mFocusMayChange:Z .line 288 :cond_142 invoke-virtual {v13}, Lcom/android/server/wm/WindowState;->isReadyForDisplay()Z move-result v15 if-eqz v15, :cond_14d .line 289 const/4 v15, 0x0 move-object/from16 v0, p0 iput v15, v0, Lcom/android/server/wm/WindowAnimator;->mForceHiding:I .line 344 .end local v2 #appAnimator:Lcom/android/server/wm/AppWindowAnimator; .end local v9 #nowAnimating:Z .end local v12 #wasAnimating:Z :cond_14d :goto_14d iget-object v3, v13, Lcom/android/server/wm/WindowState;->mAppToken:Lcom/android/server/wm/AppWindowToken; .line 345 .local v3, atoken:Lcom/android/server/wm/AppWindowToken; iget v15, v14, Lcom/android/server/wm/WindowStateAnimator;->mDrawState:I const/16 v16, 0x3 move/from16 v0, v16 if-ne v15, v0, :cond_17c .line 346 if-eqz v3, :cond_15d iget-boolean v15, v3, Lcom/android/server/wm/AppWindowToken;->allDrawn:Z if-eqz v15, :cond_17c .line 347 :cond_15d invoke-virtual {v14}, Lcom/android/server/wm/WindowStateAnimator;->performShowLocked()Z move-result v15 if-eqz v15, :cond_17c .line 348 move-object/from16 v0, p0 iget v15, v0, Lcom/android/server/wm/WindowAnimator;->mPendingLayoutChanges:I or-int/lit8 v15, v15, 0x8 move-object/from16 v0, p0 iput v15, v0, Lcom/android/server/wm/WindowAnimator;->mPendingLayoutChanges:I .line 350 move-object/from16 v0, p0 iget-object v15, v0, Lcom/android/server/wm/WindowAnimator;->mService:Lcom/android/server/wm/WindowManagerService; const-string v16, "updateWindowsAndWallpaperLocked 5" move-object/from16 v0, p0 iget v0, v0, Lcom/android/server/wm/WindowAnimator;->mPendingLayoutChanges:I move/from16 v17, v0 invoke-virtual/range {v15 .. v17}, Lcom/android/server/wm/WindowManagerService;->debugLayoutRepeats(Ljava/lang/String;I)V .line 356 :cond_17c if-nez v3, :cond_26d const/4 v2, 0x0 .line 358 .restart local v2 #appAnimator:Lcom/android/server/wm/AppWindowAnimator; :goto_17f if-eqz v2, :cond_1a8 iget-object v15, v2, Lcom/android/server/wm/AppWindowAnimator;->thumbnail:Landroid/view/Surface; if-eqz v15, :cond_1a8 .line 359 iget v15, v2, Lcom/android/server/wm/AppWindowAnimator;->thumbnailTransactionSeq:I move-object/from16 v0, p0 iget v0, v0, Lcom/android/server/wm/WindowAnimator;->mAnimTransactionSequence:I move/from16 v16, v0 move/from16 v0, v16 if-eq v15, v0, :cond_19a .line 360 move-object/from16 v0, p0 iget v15, v0, Lcom/android/server/wm/WindowAnimator;->mAnimTransactionSequence:I iput v15, v2, Lcom/android/server/wm/AppWindowAnimator;->thumbnailTransactionSeq:I .line 361 const/4 v15, 0x0 iput v15, v2, Lcom/android/server/wm/AppWindowAnimator;->thumbnailLayer:I .line 363 :cond_19a iget v15, v2, Lcom/android/server/wm/AppWindowAnimator;->thumbnailLayer:I iget v0, v14, Lcom/android/server/wm/WindowStateAnimator;->mAnimLayer:I move/from16 v16, v0 move/from16 v0, v16 if-ge v15, v0, :cond_1a8 .line 364 iget v15, v14, Lcom/android/server/wm/WindowStateAnimator;->mAnimLayer:I iput v15, v2, Lcom/android/server/wm/AppWindowAnimator;->thumbnailLayer:I .line 208 :cond_1a8 add-int/lit8 v8, v8, -0x1 goto/16 :goto_18 .line 247 .end local v2 #appAnimator:Lcom/android/server/wm/AppWindowAnimator; .end local v3 #atoken:Lcom/android/server/wm/AppWindowToken; .restart local v9 #nowAnimating:Z .restart local v12 #wasAnimating:Z :cond_1ac iget-object v15, v13, Lcom/android/server/wm/WindowState;->mAppToken:Lcom/android/server/wm/AppWindowToken; iget-object v2, v15, Lcom/android/server/wm/AppWindowToken;->mAppAnimator:Lcom/android/server/wm/AppWindowAnimator; goto/16 :goto_87 .line 300 .restart local v2 #appAnimator:Lcom/android/server/wm/AppWindowAnimator; :cond_1b2 move-object/from16 v0, p0 iget-object v15, v0, Lcom/android/server/wm/WindowAnimator;->mPolicy:Landroid/view/WindowManagerPolicy; iget-object v0, v13, Lcom/android/server/wm/WindowState;->mAttrs:Landroid/view/WindowManager$LayoutParams; move-object/from16 v16, v0 move-object/from16 v0, v16 invoke-interface {v15, v13, v0}, Landroid/view/WindowManagerPolicy;->canBeForceHidden(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/WindowManager$LayoutParams;)Z move-result v15 if-eqz v15, :cond_14d .line 301 iget v15, v14, Lcom/android/server/wm/WindowStateAnimator;->mAttrFlags:I const/high16 v16, 0x8 and-int v15, v15, v16 if-nez v15, :cond_21e const/4 v7, 0x1 .line 304 .local v7, hideWhenLocked:Z :goto_1cb move-object/from16 v0, p0 iget v15, v0, Lcom/android/server/wm/WindowAnimator;->mForceHiding:I const/16 v16, 0x1 move/from16 v0, v16 if-ne v15, v0, :cond_1dd invoke-virtual {v14}, Lcom/android/server/wm/WindowStateAnimator;->isAnimating()Z move-result v15 if-eqz v15, :cond_1e9 if-nez v7, :cond_1e9 :cond_1dd move-object/from16 v0, p0 iget v15, v0, Lcom/android/server/wm/WindowAnimator;->mForceHiding:I const/16 v16, 0x2 move/from16 v0, v16 if-ne v15, v0, :cond_220 if-eqz v7, :cond_220 .line 307 :cond_1e9 const/4 v15, 0x0 const/16 v16, 0x0 move/from16 v0, v16 invoke-virtual {v13, v15, v0}, Lcom/android/server/wm/WindowState;->hideLw(ZZ)Z move-result v5 .line 333 .local v5, changed:Z :cond_1f2 :goto_1f2 if-eqz v5, :cond_14d const/high16 v15, 0x10 and-int/2addr v15, v6 if-eqz v15, :cond_14d .line 334 move-object/from16 v0, p0 iget v15, v0, Lcom/android/server/wm/WindowAnimator;->mBulkUpdateParams:I or-int/lit8 v15, v15, 0x2 move-object/from16 v0, p0 iput v15, v0, Lcom/android/server/wm/WindowAnimator;->mBulkUpdateParams:I .line 335 move-object/from16 v0, p0 iget v15, v0, Lcom/android/server/wm/WindowAnimator;->mPendingLayoutChanges:I or-int/lit8 v15, v15, 0x4 move-object/from16 v0, p0 iput v15, v0, Lcom/android/server/wm/WindowAnimator;->mPendingLayoutChanges:I .line 337 move-object/from16 v0, p0 iget-object v15, v0, Lcom/android/server/wm/WindowAnimator;->mService:Lcom/android/server/wm/WindowManagerService; const-string v16, "updateWindowsAndWallpaperLocked 4" move-object/from16 v0, p0 iget v0, v0, Lcom/android/server/wm/WindowAnimator;->mPendingLayoutChanges:I move/from16 v17, v0 invoke-virtual/range {v15 .. v17}, Lcom/android/server/wm/WindowManagerService;->debugLayoutRepeats(Ljava/lang/String;I)V goto/16 :goto_14d .line 301 .end local v5 #changed:Z .end local v7 #hideWhenLocked:Z :cond_21e const/4 v7, 0x0 goto :goto_1cb .line 311 .restart local v7 #hideWhenLocked:Z :cond_220 const/4 v15, 0x0 const/16 v16, 0x0 move/from16 v0, v16 invoke-virtual {v13, v15, v0}, Lcom/android/server/wm/WindowState;->showLw(ZZ)Z move-result v5 .line 314 .restart local v5 #changed:Z if-eqz v5, :cond_1f2 .line 315 move-object/from16 v0, p0 iget v15, v0, Lcom/android/server/wm/WindowAnimator;->mBulkUpdateParams:I and-int/lit8 v15, v15, 0x4 if-eqz v15, :cond_24e invoke-virtual {v13}, Lcom/android/server/wm/WindowState;->isVisibleNow()Z move-result v15 if-eqz v15, :cond_24e .line 317 if-nez v10, :cond_240 .line 318 new-instance v10, Ljava/util/ArrayList; .end local v10 #unForceHiding:Ljava/util/ArrayList;,"Ljava/util/ArrayList<Lcom/android/server/wm/WindowStateAnimator;>;" invoke-direct {v10}, Ljava/util/ArrayList;-><init>()V .line 320 .restart local v10 #unForceHiding:Ljava/util/ArrayList;,"Ljava/util/ArrayList<Lcom/android/server/wm/WindowStateAnimator;>;" :cond_240 invoke-virtual {v10, v14}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z .line 321 iget-object v15, v13, Lcom/android/server/wm/WindowState;->mAttrs:Landroid/view/WindowManager$LayoutParams; iget v15, v15, Landroid/view/WindowManager$LayoutParams;->flags:I const/high16 v16, 0x10 and-int v15, v15, v16 if-eqz v15, :cond_24e .line 322 const/4 v11, 0x1 .line 325 :cond_24e move-object/from16 v0, p0 iget-object v15, v0, Lcom/android/server/wm/WindowAnimator;->mCurrentFocus:Lcom/android/server/wm/WindowState; if-eqz v15, :cond_262 move-object/from16 v0, p0 iget-object v15, v0, Lcom/android/server/wm/WindowAnimator;->mCurrentFocus:Lcom/android/server/wm/WindowState; iget v15, v15, Lcom/android/server/wm/WindowState;->mLayer:I iget v0, v13, Lcom/android/server/wm/WindowState;->mLayer:I move/from16 v16, v0 move/from16 v0, v16 if-ge v15, v0, :cond_1f2 .line 329 :cond_262 move-object/from16 v0, p0 iget-object v15, v0, Lcom/android/server/wm/WindowAnimator;->mService:Lcom/android/server/wm/WindowManagerService; const/16 v16, 0x1 move/from16 v0, v16 iput-boolean v0, v15, Lcom/android/server/wm/WindowManagerService;->mFocusMayChange:Z goto :goto_1f2 .line 356 .end local v2 #appAnimator:Lcom/android/server/wm/AppWindowAnimator; .end local v5 #changed:Z .end local v7 #hideWhenLocked:Z .end local v9 #nowAnimating:Z .end local v12 #wasAnimating:Z .restart local v3 #atoken:Lcom/android/server/wm/AppWindowToken; :cond_26d iget-object v2, v3, Lcom/android/server/wm/AppWindowToken;->mAppAnimator:Lcom/android/server/wm/AppWindowAnimator; goto/16 :goto_17f .line 371 .end local v3 #atoken:Lcom/android/server/wm/AppWindowToken; .end local v6 #flags:I .end local v13 #win:Lcom/android/server/wm/WindowState; .end local v14 #winAnimator:Lcom/android/server/wm/WindowStateAnimator; :cond_271 if-eqz v10, :cond_294 .line 372 invoke-virtual {v10}, Ljava/util/ArrayList;->size()I move-result v15 add-int/lit8 v8, v15, -0x1 :goto_279 if-ltz v8, :cond_294 .line 373 move-object/from16 v0, p0 iget-object v15, v0, Lcom/android/server/wm/WindowAnimator;->mPolicy:Landroid/view/WindowManagerPolicy; invoke-interface {v15, v11}, Landroid/view/WindowManagerPolicy;->createForceHideEnterAnimation(Z)Landroid/view/animation/Animation; move-result-object v1 .line 374 .local v1, a:Landroid/view/animation/Animation; if-eqz v1, :cond_291 .line 375 invoke-virtual {v10, v8}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object; move-result-object v14 check-cast v14, Lcom/android/server/wm/WindowStateAnimator; .line 376 .restart local v14 #winAnimator:Lcom/android/server/wm/WindowStateAnimator; invoke-virtual {v14, v1}, Lcom/android/server/wm/WindowStateAnimator;->setAnimation(Landroid/view/animation/Animation;)V .line 377 const/4 v15, 0x1 iput-boolean v15, v14, Lcom/android/server/wm/WindowStateAnimator;->mAnimationIsEntrance:Z .line 372 .end local v14 #winAnimator:Lcom/android/server/wm/WindowStateAnimator; :cond_291 add-int/lit8 v8, v8, -0x1 goto :goto_279 .line 381 .end local v1 #a:Landroid/view/animation/Animation; :cond_294 return-void .end method Sau đó save và compile lại .
Phần 3 : làm việc với file Framework-res.apk DECOMPILE framework-res.apk tìm theo đường dẫn sau : \framework-res.apk\res\layout\keyguard_screen_tab_unlock.xml mở file keyguard_screen_tab_unlock.xml bằng notepad++ thay thế tất cả các code trong file này bằng code sau : Mã: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:gravity="center_horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <com.android.internal.widget.WaveView android:id="@id/unlock_widget" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <GridLayout android:gravity="center_horizontal" android:orientation="vertical" android:id="@id/root" android:layout_width="fill_parent" android:layout_height="fill_parent"> <com.android.internal.widget.DigitalClock android:id="@id/time" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/keyguard_lockscreen_status_line_clockfont_top_margin" android:layout_marginBottom="12.0dip"> <TextView android:textAppearance="?textAppearanceMedium" android:textSize="@dimen/keyguard_lockscreen_clock_font_size" android:textColor="@color/lockscreen_clock_background" android:ellipsize="none" android:id="@id/timeDisplayBackground" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="6.0dip" android:singleLine="true" /> <TextView android:textAppearance="?textAppearanceMedium" android:textSize="@dimen/keyguard_lockscreen_clock_font_size" android:textColor="@color/lockscreen_clock_foreground" android:ellipsize="none" android:id="@id/timeDisplayForeground" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="6.0dip" android:singleLine="true" android:layout_alignLeft="@id/timeDisplayBackground" android:layout_alignTop="@id/timeDisplayBackground" /> </com.android.internal.widget.DigitalClock> <LinearLayout android:orientation="horizontal" android:id="@id/date_line" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:textAppearance="?textAppearanceMedium" android:textSize="@dimen/keyguard_lockscreen_status_line_font_size" android:ellipsize="marquee" android:id="@id/date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" /> <TextView android:textAppearance="?textAppearanceMedium" android:textSize="@dimen/keyguard_lockscreen_status_line_font_size" android:ellipsize="marquee" android:id="@id/alarm_status" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="16.0dip" android:singleLine="true" android:drawablePadding="4.0dip" /> </LinearLayout> <TextView android:textAppearance="?textAppearanceMedium" android:textSize="@dimen/keyguard_lockscreen_status_line_font_size" android:ellipsize="marquee" android:id="@id/status1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:singleLine="true" android:drawablePadding="4.0dip" /> <RelativeLayout android:orientation="horizontal" android:id="@id/weather_panel" android:paddingTop="4.0dip" android:layout_width="fill_parent" android:layout_height="wrap_content"> <ImageView android:id="@id/weather_image" android:paddingLeft="8.0dip" android:paddingRight="8.0dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_dialog_alert" android:layout_centerHorizontal="true" android:layout_centerVertical="true" /> <RelativeLayout android:orientation="horizontal" android:padding="4.0dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toLeftOf="@id/weather_image" android:layout_centerVertical="true"> <TextView android:textSize="14.0sp" android:textStyle="bold" android:textColor="?textColorPrimary" android:ellipsize="marquee" android:gravity="right" android:id="@id/weather_city" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:layout_alignParentRight="true" /> <TextView android:textSize="12.0sp" android:textColor="?textColorPrimary" android:ellipsize="marquee" android:gravity="right" android:id="@id/weather_condition" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:layout_below="@id/weather_city" android:layout_alignParentRight="true" /> <TextView android:textSize="8.0sp" android:textColor="?textColorSecondary" android:gravity="right" android:id="@id/update_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/weather_condition" android:layout_alignParentRight="true" /> </RelativeLayout> <RelativeLayout android:orientation="horizontal" android:id="@id/weather_temps_panel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/weather_image" android:layout_centerVertical="true"> <TextView android:textSize="20.0sp" android:textColor="?textColorPrimary" android:id="@id/weather_temp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" /> <View android:id="@id/weather_divider" android:background="@drawable/divider_horizontal_dark" android:layout_width="44.0dip" android:layout_height="1.0dip" android:layout_below="@id/weather_temp" /> <TextView android:textSize="12.0sp" android:textColor="?textColorPrimary" android:id="@id/weather_low_high" android:paddingTop="2.0dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/weather_divider" android:layout_centerHorizontal="true" /> </RelativeLayout> </RelativeLayout> <Space android:layout_gravity="fill" /> <Button android:layout_gravity="right" android:id="@id/emergencyCallButton" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="4.0dip" android:layout_marginRight="16.0dip" android:text="@string/lockscreen_emergency_call" android:drawableLeft="@drawable/lockscreen_emergency_button" android:drawablePadding="4.0dip" style="?android:attr/buttonBarButtonStyle" /> <RelativeLayout android:layout_width="fill_parent" android:layout_height="302.0dip"> <LinearLayout android:gravity="center_vertical" android:id="@id/calendar_panel" android:paddingLeft="12.0dip" android:paddingRight="12.0dip" android:layout_width="fill_parent" android:layout_height="wrap_content" android:minHeight="28.0dip"> <ImageView android:gravity="center" android:layout_gravity="center_vertical" android:layout_width="36.0dip" android:layout_height="wrap_content" android:src="@drawable/ic_lock_idle_calendar" /> <View android:background="@drawable/divider_horizontal_dark" android:paddingTop="6.0dip" android:paddingBottom="6.0dip" android:layout_width="1.0dip" android:layout_height="fill_parent" /> <RelativeLayout android:paddingLeft="4.0dip" android:paddingTop="6.0dip" android:paddingBottom="6.0dip" android:layout_width="0.0dip" android:layout_height="wrap_content" android:layout_weight="1.0"> <TextView android:textSize="14.0sp" android:textColor="?textColorPrimary" android:ellipsize="marquee" android:id="@id/calendar_event_title" android:fadingEdge="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" /> <TextView android:textSize="12.0sp" android:textColor="?textColorSecondary" android:ellipsize="marquee" android:id="@id/calendar_event_details" android:focusable="true" android:focusableInTouchMode="true" android:fadingEdge="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scrollHorizontally="true" android:singleLine="true" android:layout_below="@id/calendar_event_title" android:layout_alignLeft="@id/calendar_event_title" android:marqueeRepeatLimit="marquee_forever" /> </RelativeLayout> </LinearLayout> <TextView android:textAppearance="?textAppearanceMedium" android:textSize="@dimen/keyguard_lockscreen_status_line_font_size" android:textColor="?textColorSecondary" android:ellipsize="marquee" android:gravity="center_horizontal" android:id="@id/carrier" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="12.0dip" android:singleLine="true" android:layout_alignParentBottom="true" /> </RelativeLayout> <LinearLayout android:gravity="center" android:orientation="horizontal" android:layout_width="fill_parent" android:weightSum="2.0" style="?android:attr/buttonBarStyle"> <Button android:textSize="@dimen/keyguard_lockscreen_status_line_font_size" android:layout_gravity="center_horizontal" android:id="@id/emergencyCallButton" android:visibility="gone" android:layout_width="0.0dip" android:layout_height="wrap_content" android:text="@string/lockscreen_emergency_call" android:drawableLeft="@drawable/lockscreen_emergency_button" android:drawablePadding="0.0dip" android:layout_weight="1.0" style="?android:attr/buttonBarButtonStyle" /> </LinearLayout> <include android:layout_gravity="fill" android:id="@id/transport" android:layout_width="0.0dip" android:layout_height="0.0dip" android:layout_column="0" android:layout_row="0" android:layout_rowSpan="5" android:layout_columnSpan="1" layout="@layout/keyguard_transport_control" /> </GridLayout> </RelativeLayout> sau đó tìm theo đường dẫn tiếp theo : \framework-res.apk\res\layout\keyguard_transport_control.xml mở file keyguard_transport_control.xml bằng nodtepad++ . thay thế tất cả code trong file này bằng code sau : Mã: <?xml version="1.0" encoding="utf-8"?> <com.android.internal.widget.TransportControlView android:id="@id/transport_controls" xmlns:android="http://schemas.android.com/apk/res/android"> <FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:layout_gravity="fill" android:id="@id/albumart" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaleType="centerCrop" android:adjustViewBounds="false" /> </FrameLayout> <LinearLayout android:layout_gravity="bottom" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:textAppearance="?textAppearanceMedium" android:ellipsize="end" android:gravity="center_horizontal" android:id="@id/title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="16.0dip" android:layout_marginTop="8.0dip" android:layout_marginRight="16.0dip" android:singleLine="true" /> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="5.0dip"> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1.0"> <ImageView android:layout_gravity="center" android:id="@id/btn_prev" android:background="?selectableItemBackground" android:padding="10.0dip" android:clickable="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_media_previous" android:contentDescription="@string/lockscreen_transport_prev_description" /> </FrameLayout> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1.0"> <ImageView android:layout_gravity="center" android:id="@id/btn_play" android:background="?selectableItemBackground" android:padding="10.0dip" android:clickable="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_media_play" android:contentDescription="@string/lockscreen_transport_play_description" /> </FrameLayout> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1.0"> <ImageView android:layout_gravity="center" android:id="@id/btn_next" android:background="?selectableItemBackground" android:padding="10.0dip" android:clickable="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_media_next" android:contentDescription="@string/lockscreen_transport_next_description" /> </FrameLayout> </LinearLayout> </LinearLayout> </com.android.internal.widget.TransportControlView> tiếp theo tải 4 file ảnh này về copy vào thư mục \framework-res.apk\res\drawable-xhdpi : \framework-res.apk\res\drawable-xhdpi sau đó recompile file framework-res.apk lại .
Phần 4 : Decompile file framework.jar và vào đường dẫn sau : \com\android\internal\widget xóa 2 file WaveView.smali và TransportControlView.smali thay thế bằng 2 file sau : http://pan.baidu.com/share/link?shareid=3599539401&uk=1060115368 dùng Notepad++ mở 2 file WaveView.smali, TransportControlView.smali . trở lại apktool Decompile lại file framework-res.apk bạn đã làm ở Phần 3 và tìm theo đường dẫn sau mở file \res\values\public.xml Mở file public.xml bằng notepad++ . và làm theo code sau : Mã: WaveView.smali public.xml line 198, const v1, 0x10404f8 <public type="string" name="description_target_camera" id="0x010404f8" /> line 308, const v1, 0x1080622 <public type="drawable" name="unlock_ring" id="0x01080622" /> line 357, const v1, 0x1080620 <public type="drawable" name="unlock_default" id="0x01080620" /> line 406, const v1, 0x1080621 <public type="drawable" name="unlock_halo" id="0x01080621" /> line 455, const v1, 0x1080623 <public type="drawable" name="unlock_wave" id="0x01080623" /> Mã: TransportControlView.smali public.xml line 777, const v1, 0x1080024 <public type="drawable" name="ic_media_play" id="0x01080024" /> line 781, const v0, 0x104033a <public type="string" name="lockscreen_permanent_disabled_sim_instructions" id="0x0104033a" /> line 836, const v1, 0x108008a <public type="drawable" name="stat_sys_warning" id="0x0108008a" /> line 840, const v0, 0x104033a <public type="string" name="lockscreen_permanent_disabled_sim_instructions" id="0x0104033a" /> line 850, const v1, 0x1080023 <public type="drawable" name="ic_media_pause" id="0x01080023" /> line 854, const v0, 0x1040339 <public type="string" name="lockscreen_permanent_disabled_sim_message_short" id="0x01040339" /> line 867, const v1, 0x1080347 <public type="drawable" name="ic_media_stop" id="0x01080347" /> line 871, const v0, 0x104033b <public type="string" name="lockscreen_transport_prev_description" id="0x0104033b" /> line 1143, const v5, 0x1020016 <public type="id" name="title" id="0x01020016" /> line 1159, const v5, 0x10202db <public type="id" name="albumart" id="0x010202db" /> line 1170, const v5, 0x10202dc <public type="id" name="btn_prev" id="0x010202dc" /> line 1181, const v5, 0x10202dd <public type="id" name="btn_play" id="0x010202dd" /> line 1192, const v5, 0x10202de <public type="id" name="btn_next" id="0x010202de" /> ví dụ : ở file publi.xml bạn tìm dòng Mã: <public type="string" name="description_target_camera" id=" xem id của nó là bao nhiêu . sau đó bạn quay sang fileWaveView.smali thay thế id vừa lấy được ở publi vào dòng số 198 trên notepad++ Sau khi đã thay thế ok . bạn Compile file framework.jar lại . copy 4 file vừa làm việc ở trên vào System/framework . nhớ set permission là RW-R--R-- nha bạn . Chúc các bạn thành công ( Nguồn XDA )
@patonline85 đưa giúp mình 4 cái ảnh để đưa vào thư mục: \framework-res.apk\res\drawable-xhdpi với nhé. Cám ơn nhiều
4 ảnh bị thiếu đây anh em owiii: for HDPI DEVICES download : http://d-h.st/Eil exstract it and put it to \framework-res.apk\res\drawable-hdpi for XHDPI DEVICES download : http://d-h.st/OZx exstract it and put it to \framework-res.apk\res\drawable-xhdpi
E cũng ko bít..làm như trên..đến bước 3..sửa code xong thì khi đóng gói thì k đc.nó báo 1 loạt lỗi ở trong file puplic anh ah..e nghĩ code frame ko hợp vs frame 7xx
Anh em chú ý, Bước 1 và 2 mục đích để màn hình khóa trở thành trong suốt. Xong B1 và B2 anh em có thể test được rồi, màn khóa mà ra trong suốt là ok
Anh tìm ra chỗ lỗi rồi: - Ở phần 3: trong file keyguard_screen_tab_unlock.xml Không cần phải thay thế bằng file mới mà chỉ cần thay dòng này: Mã: <com.android.internal.widget.multiwaveview.GlowPadView android:gravity="top" android:orientation="horizontal" android:id="@id/unlock_widget" android:focusable="true" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentBottom="true" android:innerRadius="@dimen/glowpadview_inner_radius" android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera" android:directionDescriptions="@array/lockscreen_direction_descriptions" android:outerRingDrawable="@drawable/ic_lockscreen_outerring" android:pointDrawable="@drawable/ic_lockscreen_glowdot" android:glowRadius="@dimen/glowpadview_glow_radius" android:targetDrawables="@array/lockscreen_targets_with_camera" android:handleDrawable="@drawable/ic_lockscreen_handle" android:outerRadius="@dimen/glowpadview_target_placement_radius" android:vibrationDuration="20" android:snapMargin="@dimen/glowpadview_snap_margin" android:feedbackCount="1" /> Bằng dòng này là ok: Mã: <com.android.internal.widget.WaveView android:id="@id/unlock_widget" android:layout_width="fill_parent" android:layout_height="fill_parent" />