8***@qq.com
8***@qq.com
  • 发布:2019-11-13 15:18
  • 更新:2019-11-15 12:35
  • 阅读:1527

【报Bug】[重要]开机自启,程序退出

分类:5+ SDK

主要原因

只要是锁屏状态,接收到广播启动应用都会有这个问题, 因为用户还没解锁, 不能读取受保护的内容. 但在DCloudApplication的
onCreate 和 attachBaseContext 里面调用的方法产生异常,但没有捕获. 导致程序崩溃.
上面的两个方法都会调用 io.dcloud.a.a(AdMgr.java:29), 都会产生BUG.

修复:

  1. DCloudApplication

[内容]
2583-2583/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: uni.UNI8A57EF0, PID: 2583
java.lang.RuntimeException: Unable to instantiate application io.dcloud.application.DCloudApplication: java.lang.IllegalStateException: SharedPreferences in credential encrypted storage are not available until after user is unlocked
at android.app.LoadedApk.makeApplication(LoadedApk.java:1226)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6431)
at android.app.ActivityThread.access$1300(ActivityThread.java:219)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1859)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: java.lang.IllegalStateException: SharedPreferences in credential encrypted storage are not available until after user is unlocked
at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:458)
at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:443)
at io.dcloud.common.adapter.util.SP.getOrCreateBundle(SP.java:135)
at io.dcloud.common.adapter.util.SP.getOrCreateBundle(SP.java:150)
at io.dcloud.feature.ad.a.b(AdSplashUtil.java:90)
at io.dcloud.feature.ad.AdFeatureImplMgr.doForFeature(AdFeatureImplMgr.java:18)
at io.dcloud.a.a(AdMgr.java:29)
at io.dcloud.application.DCloudApplication.attachBaseContext(DCloudApplication.java:79)

at android.app.Application.attach(Application.java:351)
at android.app.Instrumentation.newApplication(Instrumentation.java:1149)
at android.app.LoadedApk.makeApplication(LoadedApk.java:1218)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6431) 
at android.app.ActivityThread.access$1300(ActivityThread.java:219) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1859) 
at android.os.Handler.dispatchMessage(Handler.java:107) 
at android.os.Looper.loop(Looper.java:214) 
at android.app.ActivityThread.main(ActivityThread.java:7356) 

重现步骤

1.模拟器设置有锁屏. application,activity,receiver,service 添加 android:directBootAware="true" 属性.
2.Android 设置一个自启广播( android.intent.action.BLOCK_BOOT_COMPLETE)接收器,并添加android.permission.RECEIVE_BOOT_COMPLETED权限.

  1. 广播启动到一个前端服务(context.startForegroundService())
  2. 安装APK,并启动一次,
  3. 重启模拟器, 查看Logcat输出, 有错误日志.

[运行端版本号]
XBuilder 2.3.9
Android-SDK@2.3.9.70750_20191105

[Android版本号]
Android10 API 29 模拟器

2019-11-13 15:18 负责人:无 分享
已邀请:
DCloud_Android_ST

DCloud_Android_ST

暂时不支持开机自启能力

8***@qq.com

8***@qq.com (作者) - 全栈开发 JAVA PHP JS Android Vue React H5

不是要开放这个能力, 是我们做原生插件有这一需求, 这只是DCloudApplication的bug, 很好修复的呀.

8***@qq.com

8***@qq.com (作者) - 全栈开发 JAVA PHP JS Android Vue React H5

这是程序BUG, 导致应用崩溃, 异常堆栈都贴出来了呀.

  • DCloud_Android_ST

    已经说了不支持开机自启动逻辑。runtime部分逻辑就是需要启动获取存储数据业务逻辑的。与android10锁屏后禁止获取SharedPreferences 冲突。

    2019-11-15 11:40

8***@qq.com

8***@qq.com (作者) - 全栈开发 JAVA PHP JS Android Vue React H5

  1. 最简单处理, 只要在调用到 SharedPreferences 加上 try{ }catch{} 程序不会崩溃就行.
  • DCloud_Android_ST

    catch住了业务逻辑也不管了?

    2019-11-15 12:48

  • DCloud_Android_ST

    回复 DCloud_Android_ST: 崩溃的问题我们会尽快容错。不过还是暂时不支持开机自启。貌似很多rom也会将自启动拉黑名单吧。

    2019-11-15 12:51

  • 8***@qq.com (作者)

    回复 DCloud_Android_ST: 因为我开的发插件, 锁屏状态可接收广播自启, 因为是原生的,这部分代码其实还用不到uniapp的功能,程序启动后, 用户操作后才会用到,这时会要求用户解锁, 但要使用Uniapp 不能自定义Application. 建议把那部分代码, 提取到 PandoraEntry 的.onCreate, 包括 io.dcloud.a.a(AdMgr.java:29)和cookieManager 的设置那一部分. 因为有这个流程, 接收广播 -> 启动服务 -> 显示通知 -> 点击通知 -> PandoraEntry 进入Uniapp主页.

    2019-11-15 13:36

  • 8***@qq.com (作者)

    自启,我们会提示用户加入白名单, 接收广播 -> 启动服务 -> 显示通知 这一部分在锁屏状态, 用户点击通知, 系统会要求解锁.

    2019-11-15 13:42

该问题目前已经被锁定, 无法添加新回复