HTC EVO 4G LTE高级电源菜单的汉化参考

3、Smail语法 apk文件通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件。smali语言是Davlik的寄存器语言,语法上和汇编语言相似,Dalvik VM[1]与JVM的最大的区别之一就是Dalvik VM是基于寄存器的。基于寄存器的意思是,在smali里的所有操作都必须经过寄存器来进行。Smali,Baksmali 分别是指安卓系统里的 Java 虚拟机(Dalvik)所使用的一种 dex 格式文件的汇编器,反汇编器。 阅读详情
 很多第三方ROM会已经包括了高级电源菜单,但是往往,在重启项中的4个选项会是英文的列表,如下:


                   normal
                   hot reboot
                   bootloader
                   recovery


            这点难免让人有些不爽,那么本文就来教大家如何把这个列表变成:


                   正常重启
                   快速重启
                   引导模式
                   刷机模式


     一、实现原理:

            列表中的4项被定义在一个字符串型数组中(数组1),而如果单纯的将这个数组中的4个字符串汉化的话,会导致重启出现错误,这是因为显示值与操作数冲突。好奇的朋友可以试试。那么解决的办法就是再重新定义一个容量为4的字符串型数组(数组2),将汉化后的值赋进去,作用仅仅是显示,与操作数分开,这样就不会造成与操作数的冲突。最终的效果就是在显示的时候读取数组2,而执行操作的时候参数读取自数组1。(理解这里可能需要一些编程基础,不过不懂也不要紧,跟着教程做,会成功的)
   
     二、修改方法:(方法仅供参考,有问题请跟贴回复,谢谢~!)

             1、以压缩包方式打开android.policy.jar,将classes.dex取出,放在smali工具根目录下,运行“解包”,输出文件夹out。此举是将dex反编译为smali文件,便于修改。
             2、进行修改,这里具体的行数以我自己的做说明,实际中多少可能会有些偏差。
           打开\com\android\internal\policy\impl\GlobalActions$SinglePressAction.smali,在24行,找到这样一条语句:
  1. .field protected static final rebootOptions:[Ljava/lang/String;

这条语句的含义是定义了一个字符串型的变量,名称为rebootOptions,通过字面很容易理解为重启设置,就是原理中所述的操作数。同样根据原理所述,我们需要再定义一个同样类型的变量来作为显示。中间空一行,在26行,添加如下语句:
  1. .field protected static final rebootString:[Ljava/lang/String;

变量的名字叫做rebootString,是稍后用来显示的。

         3、继续往下看,第38行后:

              .method static constructor <clinit>()V
                 .registers 3              ——声明使用3个寄存器
             
                 const/4 v0, 0x4      ——v0=4
             
                new-array v0, v0, [Ljava/lang/String;      ——建立新数组,容量为v0,即4
             
                const/4 v1, 0x0     ——v1=0
             
                const-string v2, "Normal"   ——v2=Normal
            
                 aput-object v2, v0, v1       ——v0数组中的第v1个值为v2,即数组中的第一个为Normal(至于0为什么是第一个就不提了,0123就是1234)
             
                 const/4 v1, 0x1
             
                const-string v2, "Hot restart"
             
                aput-object v2, v0, v1
             
                const/4 v1, 0x2
             
                const-string v2, "Bootloader"
             
                 aput-object v2, v0, v1
             
                 const/4 v1, 0x3
             
               const-string v2, "Recovery"
            
               aput-object v2, v0, v1
             
              sput-object v0, Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;->rebootOptions:[Ljava/lang/String;      ——rebootOptions就从v0数组中取值了,作为操作数
 上段原来的代码,有必要的地方都加了注释,会代码的仔细看一看吧。原来的代码,不难看出,这里只定义了给rebootOptions提供参数的一个容量为4的数组。同样,仿照它,再定义一个容量为4的数组,来给上边定义过的rebootString提供参数。

           修改后的代码如下:

             .method static constructor <clinit>()V
                .registers 8
             
                 const/4 v7, 0x4
             
                const/4 v6, 0x3
             
                const/4 v5, 0x2
             
                 const/4 v4, 0x1
            
               const/4 v3, 0x0
             
               new-array v0, v7, [Ljava/lang/String;             ——新的数组v0,容量为v7(4)
             
               const-string v2, "\u6B63\u5E38\u91CD\u542F"    ——“正常重启”的转码结果赋值给v2
             
                aput-object v2, v0, v3                   ——数组v0的第v3位为v2
             
               const-string v2, "\u5FEB\u901F\u91CD\u542F"   ——“快速重启”
             
                aput-object v2, v0, v4
             
                 const-string v2, "\u5F15\u5BFC\u6A21\u5F0F"   ——“引导模式”
             
                aput-object v2, v0, v5
             
                 const-string v2, "\u5237\u673A\u6A21\u5F0F"   ——“刷机模式”
             
               aput-object v2, v0, v6
             
                 sput-object v0, Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;->rebootString:[Ljava/lang/String;    ——数组定义完毕,rebootString的参数将从数组v0中读取
                 new-array v1, v7, [Ljava/lang/String;
            
               const-string v2, "Normal"
             
                aput-object v2, v1, v3
             
                const-string v2, "Hot restart"
             
                aput-object v2, v1, v4
             
                const-string v2, "Bootloader"
             
                 aput-object v2, v1, v5
             
                 const-string v2, "Recovery"
             
                aput-object v2, v1, v6
             
                sput-object v1, Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;->rebootOptions:[Ljava/lang/String;


这样就有了一个新的数组,其中4位内容分别为:正常重启、快速重启、引导模式、刷机模式。而在显示的时候rebootString会调用这个数组里的值,这样就达到了汉化的目的。然后保存文件。
           4、在\com\android\internal\policy\impl\GlobalActions$5.smali中,71行处:

sget-object v2, Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;->rebootOptions:[Ljava/lang/String;

将rebootOptions改为rebootString,意为显示时指定通过rebootString取值。然后保存文件。

          5、将GlobalActions$SinglePressAction.smali和GlobalActions$5.smali修改完毕保存后,回到smali工具的根目录,运行“打包”,生成文件smail-classes.dex。在将这个文件重命名为classes.dex,以压缩包方式打开android.policy.jar,将classes.dex替换进去,不用签名。
           这样,一个新的android.policy.jar就做完了,用adb push或者RE文件浏览器替换回去,修改相应权限和所有者,看看效果吧。

[车联网安全自学篇] Android安全之Smali语法总结「必备」 Android4.4之前使用的是 Dalivk虚拟机,而Smali是用于Dalivk的反汇编程序的实现Smali是用于Dalvik(Android虚拟机)的反汇编程序实现,汇编工具(将Smali代码汇编为dex文件)为smali.jar,与之对应的baksmali.jar则是反汇编程序(https://bitbucket.org/JesusFreke/smali/downloads/) 阅读详情

相关推荐

Python+OpenCV实战:雨天车牌识别准确率提升300%的5个关键技巧

本文针对雨天车牌识别准确率骤降的难题,分享了五个基于Python和OpenCV的实战技巧。通过暗通道先验去雾、雨纹抑制、光照不变量颜色空间转换、多尺度自适应阈值分割以及融合传统特征与轻量级深度学习的混合识别策略,系统性地提升了算法在恶劣天气下的鲁棒性。这些方法能有效解决图像模糊、对比度低、字符断裂粘连等问题,为智能交通等实际应用提供可靠解决方案。

k8l9m0n的博客 716

helloword.java.bak,安卓移動逆向(四)-Smail_HelloWorld

着手編寫一個Smail類型的HelloWord開始編寫不要直接復制,要一個一個字符敲,否則沒有意義!!不要直接復制,要一個一個字符敲,否則沒有意義!!!!不要直接復制,要一個一個字符敲,否則沒有意義!!!!!!.class public LHelloWorld; #定義類名.super Ljava/lang/Object; #定義父類.method public static main{[L...

weixin_39884144的博客 148

【福建dem】原始高程数据tif格式

DEM(Digital Elevation Model,数字高程模型)是一种地理信息系统中的关键数据集,它提供了地表地形的三维信息,通常用于分析地貌特征、模拟水文过程、规划建设、灾害预警等多个领域。这种数据对于地理分析非常有价值,例如,它可以用于计算坡度、坡向、地形粗糙度等地形特征,或者进行洪水模拟、地质灾害评估、太阳能辐射分析等。“福建dem原始高程数据tif格式”是研究和理解福建省地形地貌的重要资源,结合GIS工具,可以揭示丰富的地理信息,为科研、工程和决策提供有力支持。

鸿业远图科技 943

libsmali-java_深入理解Dalvik字节码指令及Smali文件

熟悉java的童鞋一定会记得该类型的方法有个默认的参数指向当前对象,在smali中,方法的默认对象参数用p0表示.举例说明: # direct methods.method public constructor ()V.registers 2.prologue.line 8invoke-direct {p0}, Landroid/app/Activity;->()V.line 10const...

weixin_35669712的博客 545

车载毫米波雷达实战:用MATLAB复现DDMA-MIMO雷达的Empty-band算法(附代码解析)

本文详细介绍了车载毫米波雷达中DDMA-MIMO技术的实战应用,重点解析了Empty-band算法的原理与MATLAB实现。通过搭建仿真环境,文章深入探讨了发射天线通道解调与相位法速度解模糊两大核心难题的解决方案,并提供了完整的代码解析,为雷达算法工程师提供了从理论到实践的清晰指南。

hill8的博客 559

物料帐配置之 重估消耗

物料帐配置 ML material ledger

SAP刺客的博客 5910

安卓逆向_3 --- Dalvik 字节码、Smali 详解

Dalvik 字节码、Smali 详解

freeking101的博客 9731

微信内置浏览器抓包全攻略:从ADB配置到Chrome调试(附常见问题解决)

本文提供了一套完整的微信内置浏览器抓包与调试解决方案。从ADB工具的深度配置与稳定性连接开始,详细讲解了如何开启X5内核调试开关,并利用Chrome DevTools建立远程连接。文章重点剖析了Network面板进行网络请求抓取、性能分析和问题定位的实战技巧,并附带了设备连接失败、无网络请求等常见问题的排查指南,帮助开发者高效解决微信H5页面调试难题。

gitlab7runner的博客 543

【移动安全实战篇】————1、Android手机下xx.apk JAVA破解之旅

前言 这几天手机上装了个软件,用了没多久就收费了,颇为不爽,于是便想看看能否破解,便有了下文,请注意该文章只为技术交流,请不要进行非法破解。 软件描述 这个apk使用一定次数后就会扣掉积分 当积分少于0的时候 便不能使用,每次启动程序的时候便会提示积分为0,需要注册,这说明程序在启动的时候就已经检测了积分,刚好可以利用这点 练手软件 http://pan.baidu.com/share/...

Fly_鹏程万里 3108

MQTT阿里云OTA 调试记录

2.验证,这个验证是什么意思呢,就是阿里云会把你包的信息,比如包大小,streamid(相当于包的识别码),版本号发送给你的设备,然后如果你没发送升级成功的包给阿里云,这里会是一直验证中的状态,那你的设备每次重新连接阿里云,发送connect包给阿里云的时候,阿里云就会发送一次这个验证(upgrade)包。提取到了之后就可以发送请求包了,这个请求包比较坑,也可能是我没付费,他的包一次最多只有1024个字节的数据。之前说了,验证状态下,设备发送connect包给阿里云,阿里云就会发一个upgrade包给你。

qq_42585211的博客 1231

STM32F103ZE驱动PMW3901光流模块,从SPI配置到数据读取的完整避坑指南

本文详细解析了STM32F103ZE驱动PMW3901光流模块的全过程,从SPI配置、硬件连接到数据读取与处理,提供了完整的避坑指南。重点介绍了SPI参数配置、初始化序列优化、运动数据滤波等关键技巧,帮助开发者快速实现精准的光流检测。

weixin_42631411的博客 514

反编译,返回0值

const/4 v0, 0x0     return v0

andylao62的专栏 986

【1】Python交叉编译到OpenHarmony标准系统运行(arm32位)

本文介绍如何Python语言如何在OpenHarmony标准系统运行,包括5.0r和4.1r以及4.0r,和未来版本的OpenHarmony版本上。 Python语言在OpenHarmony上使用,需要将Python解释器CPython移植到OpenHarmony标准系统。通过交叉编译的方式。

weixin_58069108的博客 928

编写一个 smali 文件 & 简单算术表达式的计算

编写一个 smali 文件 &amp;amp; 简单算术表达式的计算一、smali 文件的编写(Ⅰ)smali 文件的编写(Ⅱ)具体操作过程(Ⅲ)运行结果二、编写 smali 文件,计算(7+5)*(7-5)并输出结果(Ⅰ)smali 文件的编写(Ⅱ)具体操作过程(Ⅲ)运行结果三、一些问题及解决方法 一、smali 文件的编写 (Ⅰ)smali 文件的编写 编写 “HelloXidian.smali” 文...

carol980206的博客 1010

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

smali 语法学习历程

怎么学习smali呢?最好的学习方法某过于写一个能跑的Hello world 出来,那样既可以检测学习效果,又可以

1448

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Smali 语法学习

可以根据Dalvik opcodes来学习这些 smali 指令 new-instance new-instance v0, Ljava/lang/String; # 创建String 对象 invoke-direct invoke-direct {p0}, Ljava/lang/Object;-&amp;amp;amp;amp;amp;amp;amp;amp;gt;()V # 表示直接调用无参构造方法 invoke-virtu...

就不呵呵呵的博客 4690

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

smali修改Textview+smali常用语法

Smali语言其实就是Davlik的寄存器语言;Smali语言就是android的应用程序.apk通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件的展示语言,我们可以通过分析修改Smali程序达到修改源程序的目的。   下面给出修改一个android工程其中Textview的教程。    如图,下面是android工程listeditte

icy_xm的专栏 3142

android7.1电池管理,MIUI9 安卓7.1 添加高级电源菜单

.method public onCommand(Ljava/lang/String;Ljava/lang/Double;Ljava/lang/String;)V.locals 5const/4 v1, 0x0const-string/jumbo v0, “airplane”invoke-virtual {v0, p1}, Ljava/lang/String;->equals(Ljava/l...

weixin_33473486的博客 593

linux lib.a反编译,android反编译-smali文件语法

原始类型V void (只能用于返回值类型)Z booleanB byte[B byte arrayS shortC charI intJ longF floatD Double寄存器与变量java中变量都是存放在内存中的,android为了提高性能,变量都是存放在寄存器中的,寄存器为32位,可以支持任何类型,其中/Long和double是64位的,需要使用两个寄存器保存。寄存器采用v和p来命名v...

weixin_34392227的博客 1464

Android逆向基础笔记—Dalvik字节码小记_const/4 v2, 0x1

dalvik字节码感觉还是不是太懂。这玩意也太乱了吧。然后我有些看不懂,就百度一阵,也没有结果。就自己研究了下下,把自己不懂的地方写出来。不对的地方,大家请指出。

sorgs 1万+

聊天挂机脚本

一款多达几十个聊天挂机脚本,喜欢的可以加Q裙交流 379---354---178 aput-object v6, v4, v5 const/4 v5, 0x2 const/4 v6, 0x5 new-array v6, v6, [Ljava/lang/Object; const/4 v7, 0x0 const-string v8, "回复" aput-object v8, v6, v7 const/4 v7, 0x1...

QQ_1707452246的博客 1万+

android reboot 功能的添加

最近做一款手机,需要添加一个手机重启功能,后来查看源码发现,代码中有reboot功能,只需要我们添加可视的界面就可以了,现在讲我添加的代码复制在上面,方便以后查阅。 添加这个功能主要用到了两个类: frameworks\base\policy\src\com\android\internal\policy\impl\GlobalActions.java frameworks\base\co...

hyshucom 304

Smali语法详解

smali文件格式 每个smali文件都由若干条语句组成,所有的语句都遵循着一套语法规则。在smali 文件的头3 行描述了当前类的一些信息,格式如下: [java] view plaincopy .class  [ 修饰关键字]   .super   .source    打开MainActivity.smali 文件,头3 行代码如下: [java]

lostinai的专栏 3万+

吾爱破解安卓逆向入门教程

一、环境配置安装 java jdk,并设置好环境变量。测试: java -version二、初识 APK、Dalvik字节码以及Smali1. apk是什么?apk实质上是一个zip压缩包,将apk后缀修改为zip,解压之后可以看到其内部结构:2. apk 的组成assets: 资源目录1,assets 和 res 都是资源目录但有所区别: res 目录下的资源文件在编译时会自动生成索引文件(R

龙哥盟 9万+

瞎玩第三节 一直能提示 move the box

做这个没啥意思,就是瞎玩,第一步去找的是修改流程逻辑,发现太绕。 最后通过查看判断省几个提示,找到处理的地方。  const-string v4, "%d hint%s active"     new-array v5, v8, [Ljava/lang/Object;     iget-object v1, p0, Lua/co/cts/movethebox/LevelAc

程序员入门进阶 1093

APK反编译之一:基础知识

作者:lpohvbe | http://blog.youkuaiyun.com/lpohvbe/article/details/7981386 这部分涉及的内容比较多,我会尽量从最基础开始说起,但需要读者一定的android开发基础。但注意可能讲解详细得令人作呕,请根据个人理解程度斟酌。 APK、Dalvik字节码和smali文件 APK文件     大家都应该知道APK文件其实就是一个MIME为ZI...

weixin_34080951的博客 287
上一篇: HtcLlinkifydispatcher fix
下一篇: [MOD] Lower Autobrighntess values - battery saver
ximo
博客等级 码龄24年 18粉丝 9原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值