番茄花园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

最近看过此主题的会员

查看: 1254|回复: 11

[实用教程] [4.1 JB]如何在下拉菜单中增加15键开关,可调随意整开关顺序

[复制链接]

升级   65.63%

  • TA的每日心情

    2014-7-3 18:12
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2013-1-28 21:32:10 | 显示全部楼层 |阅读模式
    本帖最后由 fox008 于 2013-1-28 21:36 编辑

    本教程之内容理论上适用于各种型号的I9300官方固件(含官方基础上修改的),就是含有TouchWiz的。
    本教程仅适用于Android4.1(JellyBean)
    使用本教程引发的任何问题,本人以及本论坛不承担任何责任!
    反编译回编译教程略


    所需工具如下: system.zip (1.31 MB, 下载次数: 4)
    更多图片 小图 大图
    组图打开中,请稍候......

    评分

    参与人数 1秘银 +10 贡献 +1 收起 理由
    累累 + 10 + 1 很给力!

    查看全部评分

    升级   65.63%

  • TA的每日心情

    2014-7-3 18:12
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2013-1-28 21:33:07 | 显示全部楼层
    步骤1:反编译SystemUI.apk (/system/app目录下),如果是官方odex的固件,需要先deodex再操作,具体步骤不在本教程讲授范围内。
    本帖隐藏的内容
    步骤2:在反编译出来的目录中,找到
    SystemUI.apk\res\layout\tw_status_bar_expanded.xml对照原文件修改为如下的样子(自行对照增减):

    (增减部分可参考http://lt.imobile.com.cn/forum.php?mod=viewthread&tid=9983444&extra=page%3D1
    • <include android:layout_width="fill_parent" android:layout_height="@dimen/tw_notification_panel_header_height" layout="@layout/tw_status_bar_expanded_header" />
    •         <com.wanamlite.systemui.quickpanel.PowerWidget android:id="@id/exp_power_stat" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/notification_panel_header_height" />
    •         <HorizontalScrollView android:id="@id/quicksetting_scroller" android:scrollbars="none" android:layout_width="wrap_content" android:layout_height="@dimen/quick_setting_button_height" android:layout_marginTop="@dimen/tw_notification_panel_header_height">
    •             <com.android.systemui.statusbar.policy.quicksetting.QuickSettingPanel androidrientation="horizontal" android:id="@id/quicksetting_container" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:divider="@drawable/tw_black_bg" android:showDividers="middle" />
    •         </HorizontalScrollView>

    复制代码






    步骤3:找到 "SystemUI.apk\res\values\ids.xml" ,增加一个ID(一般加在最后一行):

    • <item type="id" name="exp_power_stat">false</item>

    复制代码


       

    升级   65.63%

  • TA的每日心情

    2014-7-3 18:12
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2013-1-28 21:33:28 | 显示全部楼层

    步骤4:找到 "SystemUI.apk\smali\com\android\systemui\statusbar \phone\PhoneStatusBar.smali" ,如下操作:

    加入 mPowerWidget field :
    找到
    • .field mPostCollapseCleanupjava/lang/Runnable;

    复制代码



    新增一行,加入:
    • field mPowerWidget:Lcom/wanamlite/systemui/quickpanel/PowerWidget;

    复制代码


    在它之后应该是:
    • .field mQueueLock:Ljava/lang/Object;

    复制代码


    Method "addIcon" :
    找到:
    • invoke-virtual {v1, v0, p3, v2}, Landroid/widget/LinearLayout;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
    •     .line 1086

    复制代码

    (这里的.line xxxx)可能略有偏差
    在其后面另起一行,加入:
    • iget-object v1, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mPowerWidget:Lcom/wanamlite/systemui/quickpanel/PowerWidget;
    • invoke-virtual {v1}, Lcom/wanamlite/systemui/quickpanel/PowerWidget;->updateWidget()V

    复制代码

    之后一行应该是:
    • return-void

    复制代码




    Method "makeStatusBarView" :
    本帖隐藏的内容找到此行:
    • invoke-virtual {v13, v14}, Landroid/widget/ScrollView;->setVerticalScrollBarEnabled(Z)V

    复制代码


    在后面新起一行,加入这段:
    •     move-object/from16 v0, p0
    •     iget-object v13, v0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mStatusBarWindow:Lcom/android/systemui/statusbar/phone/StatusBarWindowView;
    •     const v14, 0x7f0d0109
    •     invoke-virtual {v13, v14}, Lcom/android/systemui/statusbar/phone/StatusBarWindowView;->findViewById(I)Landroid/view/View;
    •     move-result-object v13
    •     check-cast v13, Lcom/wanamlite/systemui/quickpanel/PowerWidget;
    •     move-object/from16 v0, p0
    •     iput-object v13, v0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mPowerWidget:Lcom/wanamlite/systemui/quickpanel/PowerWidget;

    复制代码



    注意:上文中提及的0x7f0f0109
    这个ID应该与你"exp_power_stat"这个资源的ID对应,具体可以在/res/values/public.xml里面找。makeStatusBarView这个method里面也有相应的id.
    后面两行大概是:
    • .line 716
    •     new-instance v13, Lcom/android/systemui/statusbar/phone/PhoneStatusBar$MyTicker;

    复制代码

    其中.line xxx具体数字可能因固件有些小差异
    本帖隐藏的内容接下来,继续寻找这段:
    • move-object/from16 v0, p0
    •     iget-object v13, v0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mBroadcastReceiver:Landroid/content/BroadcastReceiver;
    •     invoke-virtual {v1, v13, v2}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;

    复制代码

    在后面增加这段:
    • move-object/from16 v0, p0
    • iget-object v13, v0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mPowerWidget:Lcom/wanamlite/systemui/quickpanel/PowerWidget;
    • invoke-virtual {v13}, Lcom/wanamlite/systemui/quickpanel/PowerWidget;->setupWidget()V

    复制代码

    之后几行大概是这样:


    • .line 806
    •     sget-boolean v13, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->useTouchWizGUI:Z

    复制代码

    其中.line xxx具体数字可能因固件有些小差异




    Smali修改暂告一段落,

    接下来,解压附件中的"wanamlite.zip" ,将其中 "com" 和"wanamlite"文件夹拷贝到之前反编译的文件夹 "SystemUI.apk\smali\"中。

    至此SystemUI已经修改完成。


    再来,下载附件中 "system.zip" ,首先修改 "lidroid-res.apk" :
    1.按照文章最开始链接的反编译教程,用apktool导入下面几个框架
    • apktool_d if framework-res.apk
    • apktool_d if twframework-res.apk
    • apktool_d if wanam3.apk
    • apktool_d if wanam4.apk
    • apktool_d if wanam5.apk

    复制代码

    (apktool_d命令是用那个教程中给好的apktool弄的,如果是自己下载的apktool,应该是apktool而不是apktool_d。framework-res.apk和twframework-res.apk在固件的/system/framework目录下有,后面三个apk在本文附件中有下载)


    本帖隐藏的内容2.解包 "lidroid-res.apk"(参考教程中方法),打开 "apktool.yml", 找到这里 :
    • [hide]isFrameworkApk: true
    • usesFramework:
    •   ids:
    •   - 1
    • sdkInfo:
    •   minSdkVersion: '16'
    •   targetSdkVersion: '16'

    复制代码


    将其修改为:
    • isFrameworkApk: true
    • usesFramework:
    •   ids:
    •   - 1
    •   - 2
    •   - 3
    •   - 4
    • sdkInfo:
    •   minSdkVersion: '16'
    •   targetSdkVersion: '16'

    复制代码

    然后回编译。

    这个文件改好之后,丢到 "system/framework"目录下




    然后刚才压缩包里还有个 "QuickPanelSettings.apk" ,放到 "/system/app"目录下


    大功告成!!!

    升级   65.63%

  • TA的每日心情

    2014-7-3 18:12
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2013-1-28 21:41:38 | 显示全部楼层
    希望累大发威

    点评

    支持一下啊,这个比较麻烦,要有空搞搞  详情 回复 发表于 2013-1-29 09:36

    升级   16.48%

  • TA的每日心情
    奋斗
    2016-10-3 18:22
  • 签到天数: 172 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-1-28 23:11:00 | 显示全部楼层
    这个有点深度, 細仔看清楚先.

    升级   3.45%

  • TA的每日心情
    开心
    2017-5-29 21:05
  • 签到天数: 158 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-1-29 00:09:36 来自番茄论坛手机版 | 显示全部楼层
    难度有点大。
    对于E文,它认识我而我不怎么认识它。
    可以的话发个卡刷包吧。
    感谢分享!!

    升级   82%

  • TA的每日心情
    开心
    2016-3-1 13:41
  • 签到天数: 8 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2013-1-29 00:19:22 | 显示全部楼层
    好东西!!~
  • TA的每日心情

    前天 14:07
  • 签到天数: 1900 天

    连续签到: 20 天

    [LV.Master]伴坛终老

    发表于 2013-1-29 09:36:43 | 显示全部楼层
    fox008 发表于 2013-1-28 21:41
    希望累大发威

    支持一下啊,这个比较麻烦,要有空搞搞

    升级   55.13%

  • TA的每日心情
    慵懒
    2015-12-28 15:31
  • 签到天数: 52 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2013-1-29 09:46:44 | 显示全部楼层
    很详细的教程,不过能否给我们这些懒人做个通用的卡刷包呐{:soso__8233811615348050067_4:}

    点评

    这个要等累大啊,反编译SYSTEMUI比较麻烦,我试过没搞成功  发表于 2013-1-29 10:02

    升级   84.75%

  • TA的每日心情
    慵懒
    2014-10-23 13:32
  • 签到天数: 26 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2013-1-29 17:22:53 | 显示全部楼层
    代码里面居然还有这么多表情,汗颜啊~!~!
     懒得打字嘛,点击右侧快捷回复;  
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表