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

Android 12构建报错:因android:exported属性导致APK无法安装

Android 12应用安装失败,已设置android:exported仍无法解决

我正在为Android 12构建应用,遇到了和android:exported属性相关的问题。知道Android 12及以后版本要求清单里所有组件必须显式设置这个属性后,我已经给所有带intent filter的Activity、Service和Broadcast Receiver都配置了android:exported,但还是装不上应用。

反复检查过清单文件,确认所有android:exported属性设置都没问题,但错误依旧。安装时提示:Error: APK file cannot be installed on this device

查了Android 12官方文档和发布说明,还是解决不了。有没有人碰到过类似情况,或者能给点排查思路?

感谢帮忙!

我的AndroidManifest.xml内容

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.myapp.android">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.BIND_TELECOM_CONNECTION_SERVICE"/>
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />

    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus"/>
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

    <application
      android:name=".MainApplication"
      android:label="@string/app_name"
      android:icon="@mipmap/ic_launcher"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:requestLegacyExternalStorage="true"
      android:allowBackup="false"
      android:theme="@style/AppTheme"
      android:usesCleartextTraffic="true">
      <meta-data
            android:name="com.google.firebase.messaging.default_notification_icon"
            android:resource="@drawable/ic_notification" />
        
        <meta-data
            android:name="com.google.firebase.messaging.default_notification_color"
            android:resource="@color/colorAccent" />
      <receiver android:name="io.invertase.firebase.notifications.RNFirebaseNotificationReceiver" android:exported="false"/>
        <receiver android:enabled="true" android:exported="true"  android:name="io.invertase.firebase.notifications.RNFirebaseNotificationsRebootReceiver">
            <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <action android:name="android.intent.action.QUICKBOOT_POWERON"/>
            <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
            <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>
      <meta-data
        android:name="com.google.firebase.messaging.default_notification_channel_id"
        android:value="@string/default_notification_channel_id"/>
      <service android:name="io.invertase.firebase.messaging.RNFirebaseMessagingService" android:exported="false">
            <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>
      <service android:name="io.invertase.firebase.messaging.RNFirebaseBackgroundMessagingService" android:exported="false"/>
      <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:launchMode="singleTask"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
        android:exported="false"
        android:windowSoftInputMode="adjustResize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter android:label="myCall">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
            <data android:scheme="myapp"
                    android:host="call"
                     />
            <!-- note that the leading "/" is required for pathPrefix-->
        </intent-filter>

        <intent-filter android:label="filter_react_native">
          <action android:name="android.intent.action.VIEW" />
          <category android:name="android.intent.category.DEFAULT" />
          <category android:name="android.intent.category.BROWSABLE" />
          <data android:scheme="demo" />
          <data android:host="first" />
          <data android:host="second" />
          <data android:host="third" />
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="miapp" android:host="miapp" />
        </intent-filter>

        <intent-filter android:label="@string/app_name">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <!-- Accepts URIs that begin with "example://gizmos” -->
            <data android:scheme="jw"
                    android:host="home" />
            <data android:scheme="jw"
                    android:host="Messages" />
            <data android:scheme="jw"
                    android:host="SearchResult" />
        </intent-filter>
      </activity>
      <activity android:name="com.facebook.react.devsupport.DevSettingsActivity"  android:exported="true"/>
      <service android:name="com.voximplant.foregroundservice.VIForegroundService" android:exported="true"> </service>
    </application>

</manifest>

排查思路与解决方案

  • 修正MainActivity的android:exported值
    你的MainActivity包含android.intent.action.MAIN和android.intent.category.LAUNCHER的intent filter,这是应用的入口Activity,必须设置android:exported="true"——系统launcher需要启动它。你当前设为false,这是核心问题,改成true后再尝试安装。

  • 检查依赖库的清单合并问题
    即使自己的清单都设置了android:exported,第三方依赖库可能引入未显式设置该属性的组件。可以通过Android Studio的Build > Analyze APK...查看合并后的完整清单,确认所有组件都有android:exported属性。如果发现遗漏,在自己的清单里用对应标签覆盖设置。

  • 查看详细安装错误日志
    现有提示太笼统,用adb logcat *:E命令获取详细日志,安装时观察日志里的具体错误信息,通常会明确指出哪个组件有问题。

  • 确认SDK版本配置
    检查build.gradle里的targetSdkVersion和compileSdkVersion是否都设为31(Android 12)及以上,版本不匹配可能触发兼容性检查失败。

内容的提问来源于stack exchange,提问作者jhosep islam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 02:54:50