相信不少机友都已经对索尼新发布的Xperia带有的悬浮小工具功能虎视眈眈了。Xperia可以很方便的不切换应用程序下使用计算器笔记本等等。可是有些手机本身不支持Xperia,那样怎么办呢?小编接下来就告诉各位机友们如何移植Xperia到CM系统之上。
警告:本教程涉及到的修改比较深层次,如果无法看懂教程请不要盲目尝试操作。请自行搭建好反编译环境。
第一步:
反编译你当前ROM里的framework-res.apk文件,在导出目录中找到 res/values/strings.xml 将下面几行插到最后代码:
打开 AndroidManifest.xml,然后添加下面两行代码:
以及
如下图所示

重新编译framework-res.apk
第二步:
反编译 android.policy.jar,找到 com/android/internal/policy/impl/PhoneWindowManager.smal,添加下面红色的段落Code:
.field static final RECENT_APPS_BEHAVIOR_DISMISS_AND_SWITCH:I = 0x3
.field static final RECENT_APPS_BEHAVIOR_EXIT_TOUCH_MODE_AND_SHOW:I = 0x1
.field static final RECENT_APPS_BEHAVIOR_SHOW_OR_DISMISS:I = 0x0
.field static final SHOW_PROCESSES_ON_ALT_MENU:Z = false
.field static final SHOW_STARTING_ANIMATIONS:Z = true ----------------------添加这行,如果你没有的话
.field static final SMALLAPP_LAYER:I = 0x3
.field public static final SYSTEM_DIALOG_REASON_ASSIST:Ljava/lang/String; = "assist"
.field public static final SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS:Ljava/lang/String; = "globalactions"
.field public static final SYSTEM_DIALOG_REASON_HOME_KEY:Ljava/lang/String; = "homekey"
.field public static final SYSTEM_DIALOG_REASON_KEY:Ljava/lang/String; = "reason"
.field public static final SYSTEM_DIALOG_REASON_RECENT_APPS:Ljava/lang/String; = "recentapps"
然后找到如下部分
.method public checkAddPermission(Landroid/view/WindowManager$LayoutParams;)I
.locals 4
.parameter "attrs"
.prologue
const/4 v2, 0x0
.line 1588
iget v1, p1, Landroid/view/WindowManager$LayoutParams;->type:I
.line 1590
.local v1, type:I
const/16 v3, 0x7d0
if-lt v1, v3, :cond_0
const/16 v3, 0xbb7
if-le v1, v3, :cond_1
.line 1622
:cond_0
:goto_0
return v2
.line 1594
:cond_1
const/4 v0, 0x0
.line 1595
.local v0, permission:Ljava/lang/String;
sparse-switch v1, :sswitch_data_0
.line 1614
const-string v0, "android.permission.INTERNAL_SYSTEM_WINDOW"
.line 1616
:goto_1
:sswitch_0
if-eqz v0, :cond_0
.line 1617
iget-object v3, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mContext:Landroid/content/Context;
invoke-virtual {v3, v0}, Landroid/content/Context;->checkCallingOrSelfPermission(Ljava/lang/String;)I
move-result v3
if-eqz v3, :cond_0
.line 1619
const/4 v2, -0x8
goto :goto_0
.line 1611
:sswitch_1
const-string v0, "android.permission.SYSTEM_ALERT_WINDOW"
.line 1612
goto :goto_1
.line 1595
nop
:sswitch_data_0
.sparse-switch
0x7d2 -> :sswitch_1
0x7d3 -> :sswitch_1
0x7d5 -> :sswitch_0
0x7d6 -> :sswitch_1
0x7d7 -> :sswitch_1
0x7da -> :sswitch_1
0x7db -> :sswitch_0
0x7dd -> :sswitch_0
0x7e7 -> :sswitch_0
.end sparse-switch
.end method
将所有 蓝色 标记部分替换为红色 标记部分
.method public checkAddPermission(Landroid/view/WindowManager$LayoutParams;)I
.locals 4
.parameter "attrs"
.prologue
const/4 v2, 0x0
.line 1115
iget v1, p1, Landroid/view/WindowManager$LayoutParams;->type:I
.line 1117
.local v1, type:I
const/16 v3, 0x7d0
if-lt v1, v3, :cond_0
const/16 v3, 0xbb7
if-le v1, v3, :cond_1
.line 1152
:cond_0
:goto_0
return v2
.line 1121
:cond_1
const/4 v0, 0x0
.line 1122
.local v0, permission:Ljava/lang/String;
sparse-switch v1, :sswitch_data_0
.line 1144
const-string v0, "android.permission.INTERNAL_SYSTEM_WINDOW"
.line 1146
:goto_1
:sswitch_0
if-eqz v0, :cond_0
.line 1147
iget-object v3, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mContext:Landroid/content/Context;
invoke-virtual {v3, v0}, Landroid/content/Context;->checkCallingOrSelfPermission(Ljava/lang/String;)I
move-result v3
if-eqz v3, :cond_0
.line 1149
const/4 v2, -0x8
goto :goto_0
.line 1137
:sswitch_1
const-string v0, "android.permission.SYSTEM_ALERT_WINDOW"
.line 1138
goto :goto_1
.line 1141
:sswitch_2
const-string v0, "com.sony.smallapp.permission.SMALLAPP"
.line 1142
goto :goto_1
.line 1122
:sswitch_data_0
.sparse-switch
0x7d2 -> :sswitch_1
0x7d3 -> :sswitch_1
0x7d5 -> :sswitch_0
0x7d6 -> :sswitch_1
0x7d7 -> :sswitch_1
0x7da -> :sswitch_1
0x7db -> :sswitch_0
0x7dd -> :sswitch_0
0xbb5 -> :sswitch_2
0xbb6 -> :sswitch_2
.end sparse-switch
.end method
保存并重新编译 android policy.jar
第三步:
下载1反编译framework.jar,将整个sony文件夹放入 导出文件夹中smali/com,然后重新编译 framework.jar
第四步:
下载2添加浮动工具框架到system/app、system/etc以及system/framewrok,所有文件都被打包好了,也可以使用它们直接加入到你制作的刷机包。
第五步:
你还需要下载一个Slauncher来启动这些小工具,可以在google play里找到,完成! 你可以在多数基于CM的ROM中享受这些小工具。截图为Galaxy SL运行CM10 并安装了 xperia主题:


小编点评:
说到Sony漂浮小工具移植的复杂性还是比较高的。因为涉及到代码的修改和文件的编译。所以小白们还是不要尝试了。而且小编这篇教程写得也比较的简洁,所以一般童鞋们是看不懂滴。此方法仅在多数Xperia设备以及Galaxy SL使用CM9、cm10、PA、PACMAN中测试。其他非此类机型的手机千万不要尝试哦。