You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Target SDK至31后Android 12应用启动权限异常求助

问题描述

将应用Target SDK版本升级至31后,应用可在Android 11正常运行,但无法在Android 12启动。已为所有使用intent filter的Activity添加android:exported属性,仍出现权限拒绝错误,无法启动应用。

错误日志

ProcessException: 进程异常退出:
启动: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x20000000 cmp=..包名..MainActivity (包含附加信息) }

执行'start'时发生异常:
java.lang.SecurityException: 权限拒绝: 从null (pid=7644, uid=2000)启动Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x30000000 cmp=..包名..MainActivity (包含附加信息) },该组件未从uid 11272导出
    at com.android.server.wm.ActivityTaskSupervisor.checkStartAnyActivityPermission(ActivityTaskSupervisor.java:1335)
    at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:1252)
    at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:883)
    at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1871)
    at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1742)
    at com.android.server.am.ActivityManagerService.startActivityAsUserWithFeature(ActivityManagerService.java:3543)
    at com.android.server.am.ActivityManagerShellCommand.runStartActivity(ActivityManagerShellCommand.java:596)
    at com.android.server.am.ActivityManagerShellCommand.onCommand(ActivityManagerShellCommand.java:201)
    at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)
    at android.os.ShellCommand.exec(ShellCommand.java:38)
    at com.android.server.am.ActivityManagerService.onShellCommand(ActivityManagerService.java:10429)
    at android.os.Binder.shellCommand(Binder.java:986)
    at android.os.Binder.onTransact(Binder.java:860)
    at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:6049)
    at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3034)
    at android.os.Binder.execTransactInternal(Binder.java:1220)
    at android.os.Binder.execTransact(Binder.java:1179)
命令: /Users/flipitnews/Library/Android/sdk/platform-tools/adb -s RZ8M22CVXEF shell am start -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -f 0x20000000 --ez enable-dart-profiling true com.flipitnews.finance/com.flipitnews.finance.flipitnews_flutter_app.MainActivity
#0      RunResult.throwException (package:flutter_tools/src/base/process.dart:123:5)
#1      _DefaultProcessUtils.run (package:flutter_tools/src/base/process.dart:275:19)
<asynchronous suspension>
#2      AndroidDevice.startApp (package:flutter_tools/src/android/android_device.dart:677:28)
<asynchronous suspension>
#3      FlutterDevice.runCold (package:flutter_tools/src/resident_runner.dart:504:33)
<asynchronous suspension>
#4      ColdRunner.run (package:flutter_tools/src/run_cold.dart:57:28)
<asynchronous suspension>
#5      AppDomain.launch.<anonymous closure> (package:flutter_tools/src/commands/daemon.dart:641:9)
<asynchronous suspension>
#6      AppDomain.launch (package:flutter_tools/src/commands/daemon.dart:639:5)
<asynchronous suspension>
#7      RunCommand.runCommand (package:flutter_tools/src/commands/run.dart:596:15)
<asynchronous suspension>
#8      FlutterCommand.run.<anonymous closure> (package:flutter_tools/src/runner/flutter_command.dart:1209:27)
<asynchronous suspension>
#9      AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:150:19)
<asynchronous suspension>
#10     CommandRunner.runCommand (package:args/command_runner.dart:209:13)
<asynchronous suspension>
#11     FlutterCommandRunner.runCommand.<anonymous closure> (package:flutter_tools/src/runner/flutter_command_runner.dart:281:9)
<asynchronous suspension>
#12     AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:150:19)
<asynchronous suspension>
#13     FlutterCommandRunner.runCommand (package:flutter_tools/src/runner/flutter_command_runner.dart:229:5)
<asynchronous suspension>
#14     run.<anonymous closure>.<anonymous closure> (package:flutter_tools/runner.dart:62:9)
<asynchronous suspension>
#15     AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:150:19)
<asynchronous suspension>
#16     main (package:flutter_tools/executable.dart:91:3)
<asynchronous suspension>

排查与解决方法

  • 确认Launcher Activity的android:exported配置:检查AndroidManifest.xml中带有MAIN和LAUNCHER intent-filter的MainActivity,确保android:exported="true",且配置未被其他合并的Manifest覆盖。示例配置:
    <activity
        android:name=".MainActivity"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    
  • 检查所有带intent-filter的组件:Android 12要求所有包含<intent-filter>的组件(包括Service、BroadcastReceiver、ContentProvider)都必须显式声明android:exported属性,不止Activity。比如第三方推送SDK的Receiver、后台Service等,都要补充该属性。
  • 处理第三方库的组件:如果依赖的第三方库未适配Android 12,其组件可能缺少android:exported。可以在自己的AndroidManifest.xml中重新声明这些组件并添加android:exported属性,覆盖库中的配置。
  • 清理缓存并重新构建:执行以下命令清理项目缓存,避免旧配置残留:
    flutter clean
    flutter pub get
    flutter run
    
  • 检查Manifest合并结果:在Android Studio中打开AndroidManifest.xml,切换到Merged Manifest标签,查看最终生成的Manifest中所有组件的android:exported属性是否正确,确认没有被意外覆盖。

内容的提问来源于stack exchange,提问作者Lalit Rawat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 06:35:17