这个答案适用于由于使用AlarmManager
的Set
和SetExact
方法而导致延迟唤醒的应用程序。这些方法设置的警报仅在打瞌睡“维护”窗口期间或设备由于用户干预或其他情况而唤醒时提供。
解决方案是分别使用SetandAllowWhileIdle
和SetExactandAllowWhileIdle
方法;但是能够修改和重新编译APK才是诀窍。
>
apktool2.1.1.jar
假设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
。您可以手动执行此操作,也可以使用find
和sed
自动执行此操作:
$ find com.example.android-app -name *.smali -exec \
sed -i -e 's/AlarmManager;->set\(Exact\)\?(/AlarmManager;->setExactAndAllowWhileIdle(/g' {} +
这将用setexactandallowwhileidle
替换set
和setexact
。
重新生成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
谁能给我建议哪种最好的方法来不中断地运行应用程序?
我正在使用后台服务,以获得用户的位置和上传到服务器。 我使用了一个扩展Service类的LocationTrack类和扩展BroadcastReciver的AlramReciver。 我已经在manifest中添加了所有权限,并在manifest文件中注册了AlarmReciver和LocationTracker类。 Oreo-在前台启动服务 https://developer.android.c
进入Androids的Doze模式(锁定屏幕,运行adb shell dumpsys电池拔出,然后运行adb shell dumpsys deviceidle Force-Idle) 几秒钟/分钟后,在“运行”选项卡下,将出现以下内容: 和 捕获的异常是:MyDatabase getDatabaselData[cloud_firestore/unavailable]服务当前不可用。 pubspec
-然而在那之后的很多讨论,声称这不完全是真的,我认为很难知道应用程序应该做什么特殊的背景操作。
我克隆了react应用程序的回购协议。 运行 收到3次严重程度较高的警告。 在尝试修复(npm audit fix--force)时,我总共得到31个漏洞 以下是警告: 审计结果表明: