强制老版本SDK编译的应用使用Android 4.4的对齐唤醒机制

本文介绍了如何使使用低于Android 4.4 SDK编译的应用也能享受到4.4系统的唤醒对齐机制以节省电量。通过反编译和修改framework.jar中的AlarmManager,设置关键变量mAlwaysExact,再重新打包替换,可以在没有targetSdkVersion限制的情况下实现唤醒对齐。操作过程包括获取root权限、反编译、修改smali代码、重新打包并替换系统文件。
摘要由CSDN通过智能技术生成

唤醒对齐是Android 4.4的一个新特性,小米的MIUI V5中也有类似的特性。在Android 4.4的唤醒机制中,为了省电,AlarmManager会把唤醒的请求进行对齐。细节可参考SDK中AlarmManager的说明。坏处是以前要求8点准时的闹钟,现在可能会被调整到8点10。应用程序可通过setWindow或setExact来要求大概齐时间定时或精确定时。

但Android 4.4的对齐唤醒仅仅针对使用SDK level 19编译出的应用有效,之前SDK编译出的应用是无效的。我们可以通过反编译framework来修改AlarmManager,让其对之前版本SDK编译的应用也生效。

通过阅读Android4.4的源码 ,我们可以知道AlarmManager类中,mAlwaysExact这个变量是控制是否使用对齐唤醒的关键,mAlwaysExact的值为false则可以使用对其唤醒。mAlwaysExact又是根据应用程序的上下文的targetSdkVersion来确定值的。

    AlarmManager(IAlarmManager service, Context ctx) {
        mService = service;

        final int sdkVersion = ctx.getApplicationInfo().targetSdkVersion;
        mAlwaysExact = (sdkVersion < Build.VERSION_CODES.KITKAT);
    }
下面我们就来对AlarmManager动手,来强制使用对齐唤醒。

首先手机必须有root权限,提取出/system/framework/framework.jar,然后使用baksmali对其进行反编译。

java -jar baks

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值