Sony漂浮窗口小工具移植教程.docx
《Sony漂浮窗口小工具移植教程.docx》由会员分享,可在线阅读,更多相关《Sony漂浮窗口小工具移植教程.docx(9页珍藏版)》请在冰豆网上搜索。
![Sony漂浮窗口小工具移植教程.docx](https://file1.bdocx.com/fileroot1/2023-2/9/9c02ca76-ba48-4645-94a6-085a76144476/9c02ca76-ba48-4645-94a6-085a761444761.gif)
Sony漂浮窗口小工具移植教程
Sony漂浮窗口小工具移植教程
相信不少机友都已经对索尼新发布的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:
.fieldstaticfinalRECENT_APPS_BEHAVIOR_DISMISS_AND_SWITCH:
I=0x3
.fieldstaticfinalRECENT_APPS_BEHAVIOR_EXIT_TOUCH_MODE_AND_SHOW:
I=0x1
.fieldstaticfinalRECENT_APPS_BEHAVIOR_SHOW_OR_DISMISS:
I=0x0
.fieldstaticfinalSHOW_PROCESSES_ON_ALT_MENU:
Z=false
.fieldstaticfinalSHOW_STARTING_ANIMATIONS:
Z=true----------------------添加这行,如果你没有的话
.fieldstaticfinalSMALLAPP_LAYER:
I=0x3
.fieldpublicstaticfinalSYSTEM_DIALOG_REASON_ASSIST:
Ljava/lang/String;="assist"
.fieldpublicstaticfinalSYSTEM_DIALOG_REASON_GLOBAL_ACTIONS:
Ljava/lang/String;="globalactions"
.fieldpublicstaticfinalSYSTEM_DIALOG_REASON_HOME_KEY:
Ljava/lang/String;="homekey"
.fieldpublicstaticfinalSYSTEM_DIALOG_REASON_KEY:
Ljava/lang/String;="reason"
.fieldpublicstaticfinalSYSTEM_DIALOG_REASON_RECENT_APPS:
Ljava/lang/String;="recentapps"
然后找到如下部分
.methodpubliccheckAddPermission(Landroid/view/WindowManager$LayoutParams;)I
.locals4
.parameter"attrs"
.prologue
const/4v2,0x0
.line1588
igetv1,p1,Landroid/view/WindowManager$LayoutParams;->type:
I
.line1590
.localv1,type:
I
const/16v3,0x7d0
if-ltv1,v3,:
cond_0
const/16v3,0xbb7
if-lev1,v3,:
cond_1
.line1622
:
cond_0
:
goto_0
returnv2
.line1594
:
cond_1
const/4v0,0x0
.line1595
.localv0,permission:
Ljava/lang/String;
sparse-switchv1,:
sswitch_data_0
.line1614
const-stringv0,"android.permission.INTERNAL_SYSTEM_WINDOW"
.line1616
:
goto_1
:
sswitch_0
if-eqzv0,:
cond_0
.line1617
iget-objectv3,p0,Lcom/android/internal/policy/impl/PhoneWindowManager;->mContext:
Landroid/content/Context;
invoke-virtual{v3,v0},Landroid/content/Context;->checkCallingOrSelfPermission(Ljava/lang/String;)I
move-resultv3
if-eqzv3,:
cond_0
.line1619
const/4v2,-0x8
goto:
goto_0
.line1611
:
sswitch_1
const-stringv0,"android.permission.SYSTEM_ALERT_WINDOW"
.line1612
goto:
goto_1
.line1595
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
.endsparse-switch
.endmethod
将所有蓝色标记部分替换为红色标记部分
.methodpubliccheckAddPermission(Landroid/view/WindowManager$LayoutParams;)I
.locals4
.parameter"attrs"
.prologue
const/4v2,0x0
.line1115
igetv1,p1,Landroid/view/WindowManager$LayoutParams;->type:
I
.line1117
.localv1,type:
I
const/16v3,0x7d0
if-ltv1,v3,:
cond_0
const/16v3,0xbb7
if-lev1,v3,:
cond_1
.line1152
:
cond_0
:
goto_0
returnv2
.line1121
:
cond_1
const/4v0,0x0
.line1122
.localv0,permission:
Ljava/lang/String;
sparse-switchv1,:
sswitch_data_0
.line1144
const-stringv0,"android.permission.INTERNAL_SYSTEM_WINDOW"
.line1146
:
goto_1
:
sswitch_0
if-eqzv0,:
cond_0
.line1147
iget-objectv3,p0,Lcom/android/internal/policy/impl/PhoneWindowManager;->mContext:
Landroid/content/Context;
invoke-virtual{v3,v0},Landroid/content/Context;->checkCallingOrSelfPermission(Ljava/lang/String;)I
move-resultv3
if-eqzv3,:
cond_0
.line1149
const/4v2,-0x8
goto:
goto_0
.line1137
:
sswitch_1
const-stringv0,"android.permission.SYSTEM_ALERT_WINDOW"
.line1138
goto:
goto_1
.line1141
:
sswitch_2
const-stringv0,"com.sony.smallapp.permission.SMALLAPP"
.line1142
goto:
goto_1
.line1122
:
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
.endsparse-switch
.endmethod
保存并重新编译androidpolicy.jar
第三步:
反编译framework.jar,将整个sony文件夹放入导出文件夹中smali/com,然后重新编译framework.jar
第四步:
添加浮动工具框架到system/app、system/etc以及system/framewrok,所有文件都被打包好了,也可以使用它们直接加入到你制作的刷机包。
第五步:
你还需要下载一个Slauncher来启动这些小工具,可以在googleplay里找到,完成!
你可以在多数基于CM的ROM中享受这些小工具。
截图为GalaxySL运行CM10并安装了xperia主题。
本文来源:
安卓软件网