Android极简启动器开机启动RealDash异常:设备持续重启排查
问题描述
我想开发一款无图形界面的Android极简启动器,实现手机开机后立即启动RealDash应用。但将其设置为默认启动器后,设备持续重启,RealDash并未启动。以下是我的代码及Logcat日志,请问是否需要指定应用完整路径,或是我遗漏了其他配置?
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" tools:targetApi="31"> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <receiver android:name=".BootReceiver" android:enabled="true" android:exported="false"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> </application> </manifest>
MainActivity.kt
package com.example.customlauncher import android.os.Bundle import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Launch RealDash app val launchIntent = packageManager.getLaunchIntentForPackage("com.napko.RealDash") if (launchIntent != null) { startActivity(launchIntent) } finish() // finish the launcher activity } }
Logcat日志
---------------------------- PROCESS STARTED (22037) for package com.example.customlauncher ---------------------------- 2024-02-25 22:34:59.522 22037-22037 .customlauncher com.example.customlauncher W Redefining intrinsic method java.lang.Thread java.lang.Thread.currentThread(). This may cause the unexpected use of the original definition of java.lang.Thread java.lang.Thread.currentThread()in methods that have already been compiled. 2024-02-25 22:34:59.522 22037-22037 .customlauncher com.example.customlauncher W Redefining intrinsic method boolean java.lang.Thread.interrupted(). This may cause the unexpected use of the original definition of boolean java.lang.Thread.interrupted()in methods that have already been compiled. 2024-02-25 22:34:59.525 22037-22037 Compatibil...geReporter com.example.customlauncher D Compat change id reported: 171979766; UID 10197; state: ENABLED 2024-02-25 22:34:59.525 22037-22037 Compatibil...geReporter com.example.customlauncher D Compat change id reported: 242716250; UID 10197; state: ENABLED 2024-02-25 22:34:59.566 22037-22037 ziparchive com.example.customlauncher W Unable to open '/data/data/com.example.customlauncher/code_cache/.overlay/base.apk/classes3.dm': No such file or directory 2024-02-25 22:34:59.566 22037-22037 ziparchive com.example.customlauncher W Unable to open '/data/app/~~mrf1UK2bf5ChJHWL4Pfr7Q==/com.example.customlauncher-4HwPQ03pDZ8cgYftNU_W6g==/base.dm': No such file or directory 2024-02-25 22:34:59.566 22037-22037 ziparchive com.example.customlauncher W Unable to open '/data/app/~~mrf1UK2bf5ChJHWL4Pfr7Q==/com.example.customlauncher-4HwPQ03pDZ8cgYftNU_W6g==/base.dm': No such file or directory 2024-02-25 22:34:59.615 22037-22037 nativeloader com.example.customlauncher D Configuring clns-6 for other apk /data/app/~~mrf1UK2bf5ChJHWL4Pfr7Q==/com.example.customlauncher-4HwPQ03pDZ8cgYftNU_W6g==/base.apk. target_sdk_version=34, uses_libraries=, library_path=/data/app/~~mrf1UK2bf5ChJHWL4Pfr7Q==/com.example.customlauncher-4HwPQ03pDZ8cgYftNU_W6g==/lib/x86_64, permitted_path=/data:/mnt/expand:/data/user/0/com.example.customlauncher 2024-02-25 22:34:59.651 22037-22037 GraphicsEnvironment com.example.customlauncher V Currently set values for: 2024-02-25 22:34:59.651 22037-22037 GraphicsEnvironment com.example.customlauncher V angle_gl_driver_selection_pkgs=[] 2024-02-25 22:34:59.655 22037-22037 GraphicsEnvironment com.example.customlauncher V angle_gl_driver_selection_values=[] 2024-02-25 22:34:59.668 22037-22037 GraphicsEnvironment com.example.customlauncher V ANGLE GameManagerService for com.example.customlauncher: false 2024-02-25 22:34:59.668 22037-22037 GraphicsEnvironment com.example.customlauncher V com.example.customlauncher is not listed in per-application setting 2024-02-25 22:34:59.668 22037-22037 GraphicsEnvironment com.example.customlauncher V Neither updatable production driver nor prerelease driver is supported. 2024-02-25 22:34:59.883 22037-22312 libEGL com.example.customlauncher D loaded /vendor/lib64/egl/libEGL_emulation.so 2024-02-25 22:34:59.908 22037-22312 libEGL com.example.customlauncher D loaded /vendor/lib64/egl/libGLESv1_CM_emulation.so 2024-02-25 22:34:59.909 22037-22312 libEGL com.example.customlauncher D loaded /vendor/lib64/egl/libGLESv2_emulation.so 2024-02-25 22:35:02.335 22037-22037 AndroidRuntime com.example.customlauncher D Shutting down VM 2024-02-25 22:35:02.350 22037-22037 AndroidRuntime com.example.customlauncher E FATAL EXCEPTION: main Process: com.example.customlauncher, PID: 22037 java.lang.RuntimeException: Unable to instantiate receiver com.example.customlauncher.BootReceiver: java.lang.ClassNotFoundException: Didn't find class "com.example.customlauncher.BootReceiver" on path: DexPathList[[dex file "/data/data/com.example.customlauncher/code_cache/.overlay/base.apk/classes3.dex", zip file "/data/app/~~mrf1UK2bf5ChJHWL4Pfr7Q==/com.example.customlauncher-4HwPQ03pDZ8cgYftNU_W6g==/base.apk"],nativeLibraryDirectories=[/data/app/~~mrf1UK2bf5ChJHWL4Pfr7Q==/com.example.customlauncher-4HwPQ03pDZ8cgYftNU_W6g==/lib/x86_64, /system/lib64, /system_ext/lib64]] at android.app.ActivityThread.handleReceiver(ActivityThread.java:4435) at android.app.ActivityThread.-$$Nest$mhandleReceiver(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2256) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:205) at android.os.Looper.loop(Looper.java:294) at android.app.ActivityThread.main(ActivityThread.java:8177) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.customlauncher.BootReceiver" on path: DexPathList[[dex file "/data/data/com.example.customlauncher/code_cache/.overlay/base.apk/classes3.dex", zip file "/data/app/~~mrf1UK2bf5ChJHWL4Pfr7Q==/com.example.customlauncher-4HwPQ03pDZ8cgYftNU_W6g==/base.apk"],nativeLibraryDirectories=[/data/app/~~mrf1UK2bf5ChJHWL4Pfr7Q==/com.example.customlauncher-4HwPQ03pDZ8cgYftNU_W6g==/lib/x86_64, /system/lib64, /system_ext/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at android.app.AppComponentFactory.instantiateReceiver(AppComponentFactory.java:110) at androidx.core.app.CoreComponentFactory.instantiateReceiver(CoreComponentFactory.java:59) at android.app.ActivityThread.handleReceiver(ActivityThread.java:4428) at android.app.ActivityThread.-$$Nest$mhandleReceiver(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2256) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:205) at android.os.Looper.loop(Looper.java:294) at android.app.ActivityThread.main(ActivityThread.java:8177) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971) 2024-02-25 22:35:02.495 22037-22037 Process com.example.customlauncher I Sending signal. PID: 22037 SIG: 9 ---------------------------- PROCESS ENDED (22037) for package com.example.customlauncher ----------------------------
问题分析与解决方法
核心崩溃原因:BootReceiver类缺失
Logcat明确报错ClassNotFoundException: com.example.customlauncher.BootReceiver,你在Manifest中注册了该广播接收器,但未创建对应的BootReceiver.kt文件,导致应用启动即崩溃,进而触发系统重复重启启动器。- 解决:直接删除Manifest中
<receiver>相关配置即可——作为默认启动器,系统会自动在开机后启动它的MainActivity,完全不需要监听BOOT_COMPLETED广播。
- 解决:直接删除Manifest中
循环重启问题修复
当你的启动器作为默认HOME应用时,若MainActivity直接finish但未成功启动目标应用,系统会判定启动器崩溃,反复尝试重启它,形成循环。- 验证目标应用包名:通过
adb shell pm list packages | grep RealDash命令确认RealDash的真实包名是否为com.napko.RealDash,避免包名错误导致启动失败。 - 添加错误兜底逻辑:如果获取不到RealDash的启动Intent,不要直接finish,显示一个简单的错误提示界面,阻止系统重复启动:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val launchIntent = packageManager.getLaunchIntentForPackage("com.napko.RealDash") if (launchIntent != null) { startActivity(launchIntent) finish() } else { // 显示错误提示,避免系统循环重启 setContentView(android.widget.TextView(this).apply { text = "RealDash未安装或包名错误" textSize = 20f gravity = android.view.Gravity.CENTER }) } }
- 验证目标应用包名:通过
无图形界面优化
若要实现完全无界面启动,可给MainActivity设置透明主题,避免启动时闪屏:
在Manifest的<activity>标签中添加:android:theme="@android:style/Theme.Translucent.NoTitleBar"冗余配置清理
删除Manifest中的RECEIVE_BOOT_COMPLETED权限,因为默认启动器无需该权限即可被系统自动启动。
内容的提问来源于stack exchange,提问作者Juhász Tamás
相关产品推荐
相关产品推荐

