HarmonyOS 鸿蒙Next 启动另一个app中的uiAbility,崩溃
HarmonyOS 鸿蒙Next 启动另一个app中的uiAbility,崩溃 模拟器中安装两个APP,一个APP1 一个APP2
现在从APP1点击一个按钮,准备启动APP2中的ability,代码执行后,直接crash。
crash 日志:
1-15 14:24:33.393 7713-7721/? I m/.liuwei.learn: jit_compiled:[OK] java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(int) @ /apex/com.android.art/javalib/core-oj.jar
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: FATAL EXCEPTION: main
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: Process: com.liuwei.learn1, PID: 7713
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: java.lang.SecurityException: Permission Denial: starting Intent { pkg=com.liuwei.newapp cmp=com.liuwei.newapp/EntryAbility (has extras) } from ProcessRecord{5890136 7713:com.liuwei.learn1/u0a61} (pid=7713, uid=10061) not exported from uid 10075
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at android.os.Parcel.createExceptionOrNull(Parcel.java:2443)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at android.os.Parcel.createException(Parcel.java:2427)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at android.os.Parcel.readException(Parcel.java:2410)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at android.os.Parcel.readException(Parcel.java:2352)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:2401)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at android.app.Instrumentation.execStartActivity(Instrumentation.java:1776)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at android.app.Activity.startActivityForResult(Activity.java:5656)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at android.app.Activity.startActivity(Activity.java:6074)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at com.huawei.android.template.ActivityCallbackHandler.handleStartActivity(ActivityCallbackHandler.java:85)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at com.huawei.android.template.ActivityCallbackHandler.handleMessage(ActivityCallbackHandler.java:65)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:117)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:205)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at android.os.Looper.loop(Looper.java:293)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at android.app.ActivityThread.loopProcess(ActivityThread.java:9824)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:9813)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:586)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1201)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: Caused by: android.os.RemoteException: Remote stack trace:
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at com.android.server.wm.ActivityTaskSupervisor.checkStartAnyActivityPermission(ActivityTaskSupervisor.java:1252)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:1382)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:873)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1417)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1389)
11-15 14:24:33.394 7713-7713/? E AndroidRuntime: callee: null 3245/17752
APP2 内的相关新消息:
"bundleName": "com.liuwei.newapp",
"name": "entry",
"name": "EntryAbility",
APP1中的启动代码:
async gotoOuterApp(){
try {
let want: Want = {
bundleName: "com.liuwei.newapp",
moduleName: "entry",
abilityName: "EntryAbility",
}
let context = getContext(this) as common.UIAbilityContext;
await context.startAbility(want)
console.info("start ability succeed")
} catch (err){
console.info(`start ability failed with ${err} `)
}
}
更多关于HarmonyOS 鸿蒙Next 启动另一个app中的uiAbility,崩溃的实战教程也可以访问 https://www.itying.com/category-93-b0.html
开发者你好,应用程序试图启动一个不被允许的Activity,导致权限拒绝异常。需要检查应用程序的权限设置,确保启动Activity的应用程序具有正确的权限。
更多关于HarmonyOS 鸿蒙Next 启动另一个app中的uiAbility,崩溃的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
被调用的ability的被调用权限是打开状态的
“exported”: true,
依然会报权限错误,
解决了没,和你的问题一模一样
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: Process: com.example.myapplication, PID: 4255
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: java.lang.SecurityException: Permission Denial: starting Intent { pkg=com.example.myapplication2 cmp=com.example.myapplication2/EntryAbility (has extras) } from ProcessRecord{dd05299 4255:com.example.myapplication/u0a74} (pid=4255, uid=10074)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at android.os.Parcel.createExceptionOrNull(Parcel.java:2443)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at android.os.Parcel.createException(Parcel.java:2427)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at android.os.Parcel.readException(Parcel.java:2410)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at android.os.Parcel.readException(Parcel.java:2352)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:2401)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at android.app.Instrumentation.execStartActivity(Instrumentation.java:1776)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at android.app.Activity.startActivityForResult(Activity.java:5656)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at android.app.Activity.startActivity(Activity.java:6074)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at com.huawei.android.template.ActivityCallbackHandler.handleStartActivity(ActivityCallbackHandler.java:85)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at com.huawei.android.template.ActivityCallbackHandler.handleMessage(ActivityCallbackHandler.java:65)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at android.os.Handler.dispatchMessage(Handler.java:117)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at android.os.Looper.loopOnce(Looper.java:205)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at android.os.Looper.loop(Looper.java:293)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at android.app.ActivityThread.loopProcess(ActivityThread.java:9824)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at android.app.ActivityThread.main(ActivityThread.java:9813)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at java.lang.reflect.Method.invoke(Native Method)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:586)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1201)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: Caused by: android.os.RemoteException: Remote stack trace:
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at com.android.server.wm.ActivityTaskSupervisor.checkStartAnyActivityPermission(ActivityTaskSupervisor.java:1252)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:1382)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:873)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1417)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1389)
02-19 15:46:16.806 4255-4255/com.example.myapplication E AndroidRuntime/: callee: null 3919/10442,
在HarmonyOS鸿蒙Next中,启动另一个应用中的UIAbility
时,如果遇到崩溃问题,可能的原因包括以下几个方面:
-
权限问题:启动其他应用的
UIAbility
需要确保目标应用已授予相关权限,如ohos.permission.START_ABILITIES
。如果权限未正确配置,系统会拒绝启动请求,导致崩溃。 -
目标
UIAbility
未正确配置:目标应用的UIAbility
必须在config.json
中正确声明,并且exported
属性应设置为true
,否则无法被其他应用调用。 -
跨应用通信限制:鸿蒙系统对跨应用通信有严格限制。如果目标
UIAbility
未明确支持跨应用启动,或未使用want
正确传递参数,可能会导致崩溃。 -
目标应用未安装或未启动:如果目标应用未安装或未启动,系统无法找到对应的
UIAbility
,从而导致崩溃。 -
版本兼容性:鸿蒙Next可能对某些API或行为进行了调整,如果目标应用的
UIAbility
未适配新版本,可能会导致崩溃。 -
参数传递错误:在启动
UIAbility
时,如果传递的want
参数不符合目标应用的要求,可能会导致目标应用无法正确处理请求,进而崩溃。 -
系统资源限制:在某些情况下,系统资源不足可能导致启动
UIAbility
时崩溃。
解决这些问题需要检查权限配置、config.json
声明、want
参数传递等,并确保目标应用已正确安装和启动。如果问题仍然存在,可以进一步分析日志以定位具体原因。