当前位置: 首页 > 知识库问答 >
问题:

如何修复在打瞌睡模式下漏掉警报的应用程序?

冀萧迟
2023-03-14

请注意,禁用应用程序的电池优化不会帮助打瞌睡模式,正如这里所回答的。

共有1个答案

任云瀚
2023-03-14

这个答案适用于由于使用AlarmManagerSetSetExact方法而导致延迟唤醒的应用程序。这些方法设置的警报仅在打瞌睡“维护”窗口期间或设备由于用户干预或其他情况而唤醒时提供。

解决方案是分别使用SetandAllowWhileIdleSetExactandAllowWhileIdle方法;但是能够修改和重新编译APK才是诀窍。

>

  • 获取apktool:单击“Current Release”链接下载jar,apktool2.1.1.jar
  • 获取要修复的应用程序的apk。我已经使用apk20.com找到了我想要修复的应用程序的可下载apk,但也有一些方法可以将应用程序的apk安装在手机上。
  • 假设java二进制文件在您的路径中,并且apktool jar和apk在当前dir中,使用apktool反汇编apk:

    $ java -jar apktool_2.1.1.jar d com.example.android-app.apk
    

    反汇编的文件(smali格式)将位于当前目录中的com.example.android-app/下。

    将所有已反汇编的smali文件中出现的alarmmanager;->set/setexact替换为alarmmanager;->setexactandallowwhileidle。您可以手动执行此操作,也可以使用findsed自动执行此操作:

    $ find com.example.android-app -name *.smali -exec \
        sed -i -e 's/AlarmManager;->set\(Exact\)\?(/AlarmManager;->setExactAndAllowWhileIdle(/g' {} +
    

    这将用setexactandallowwhileidle替换setsetexact

    重新生成APK:

    $ java -jar apktool_2.1.1.jar b com.example.android-app
    

    请注意用于构建的b以及缺少用于引用修改文件所在目录的.apk。结果apk创建为com.example.android-app/dist/com.example.android-app.apk

    在APK上签字。如果您以前从未签署过jar文件,那么这就是恼人的部分:

    $ keytool -genkeypair -validity 36500
    Enter keystore password:  android
    Re-enter new password: android
    What is your first and last name?
      [Unknown]:
    What is the name of your organizational unit?
      [Unknown]:
    What is the name of your organization?
      [Unknown]:
    What is the name of your City or Locality?
      [Unknown]:
    What is the name of your State or Province?
      [Unknown]:
    What is the two-letter country code for this unit?
      [Unknown]:
    Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
      [no]:  yes
    
    Enter key password for <mykey>
            (RETURN if same as keystore password):
    
    $ jarsigner -tsa http://timestamp.digicert.com com.example.android-app/dist/com.example.android-app.apk mykey
    Enter Passphrase for keystore: android
    jar signed.
    

    这个签名过程是必不可少的,因为如果你的apk没有被签名,并且带有一个神秘的消息,比如,你的android手机会拒绝你的apk:

    分析错误

    分析包时出现问题。

    如果需要,您可能希望备份或保存应用程序的配置。

    把重建的apk安装到你的手机上。有各种方法可以做到这一点,但这两种是最简单的:

    >

  • 启用USB调试,然后运行:

    $ adb install com.example.android-app/dist/com.example.android-app.apk
    

  •  类似资料: