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

Android 14安装APK时“Package installer keeps stopping”错误求助

Android 14真机安装APK时Package installer崩溃问题

我的Kotlin Android应用在Android 13及以下版本能正常安装运行,但在Android 14真机上安装APK时,出现“Package installer keeps stopping”错误。模拟器上运行正常,真机无法完成安装。错误截图显示系统提示Package installer停止运行。

项目Manifest文件

<?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-feature
        android:name="android.hardware.camera"
        android:required="false" />

    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
        android:maxSdkVersion="32" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <application
        android:name=".MyApp"
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@drawable/app_logo"
        android:label="@string/app_name"
        android:roundIcon="@drawable/app_logo"
        android:supportsRtl="true"
        android:theme="@style/Theme.CUCApplication"
        android:usesCleartextTraffic="true"
        tools:targetApi="31">
        <activity
            android:name=".ui.activities.MapsActivity"
            android:exported="false" />

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="" />

        <activity
            android:name=".ui.activities.VideoViewActivity"
            android:exported="false" />
        <activity
            android:name=".ui.activities.ImageViewActivity"
            android:exported="false" />
        <activity
            android:name=".ui.activities.CallingActivity"
            android:exported="false" />

        <service
            android:name=".call.CallService"
            android:enabled="true"
            android:exported="false" />

        <activity
            android:name=".ui.activities.GroupCallActivity"
            android:exported="false" />
        <activity
            android:name=".ui.activities.MessageInfoActivity"
            android:exported="false" />

        <service
            android:name=".notifications.FcmService"
            android:enabled="true"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>

        <activity
            android:name=".ui.activities.SelectChatsActivity"
            android:exported="false" />
        <activity
            android:name=".ui.activities.CallActivity"
            android:exported="false" />
        <activity
            android:name=".ui.activities.CreateGroupActivity"
            android:exported="false" />
        <activity
            android:name=".ui.activities.RegistrationActivity"
            android:exported="false" />
        <activity
            android:name=".ui.activities.LoginActivity"
            android:exported="false"
            android:label="@string/title_activity_login" />
        <activity
            android:name=".ui.activities.MessageActivity"
            android:exported="false"
            android:label="@string/title_activity_message"
            android:theme="@style/Theme.CUCApplication" />
        <activity
            android:name=".ui.activities.StartupActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".MainActivity"
            android:exported="false"
            android:theme="@style/Theme.CUCApplication" />

        <receiver
            android:name=".di.NotificationBroadcastReceiver"
            android:exported="false">
            <intent-filter>
                <action android:name="ooo" />
            </intent-filter>
        </receiver>
        <receiver
            android:name=".di.NotificationReplyReceiver"
            android:exported="false">
            <intent-filter>
                <action android:name="replyy" />
            </intent-filter>
        </receiver>
        <receiver
            android:name=".db.RoomDbCleaner"
            android:exported="false">
            <intent-filter>
                <action android:name="ooo" />
            </intent-filter>
        </receiver>
        <receiver
            android:name=".di.AlarmSchedulerBootReceiver"
            android:enabled="false"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

Gradle(app)配置

import org.jetbrains.kotlin.js.facade.exceptions.TranslationRuntimeException

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("kotlin-kapt")
    id("com.google.gms.google-services")
    id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
}

android {
    namespace = "com.dev.cucapp"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.dev.cucapp"
        minSdk = 24
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
    buildFeatures {
        viewBinding = true
        dataBinding = true

    }
}


dependencies {

    implementation("androidx.core:core-ktx:1.9.0")
    implementation("androidx.appcompat:appcompat:1.6.1")
    implementation("com.google.android.material:material:1.9.0")
    implementation("androidx.constraintlayout:constraintlayout:2.1.4")
    implementation("androidx.legacy:legacy-support-v4:1.0.0")
    implementation("androidx.annotation:annotation:1.7.0")
    implementation("com.google.firebase:firebase-messaging:23.3.0")
    implementation("com.google.android.gms:play-services-maps:18.2.0")
    implementation("com.google.android.gms:play-services-location:21.1.0")
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")

    //data store & prefernces store
    implementation("androidx.datastore:datastore-preferences:1.0.0")
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9")
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9")

    //lifecycle cscope
    implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
    implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.2")
    implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2")


    //recyclerview
    implementation("androidx.recyclerview:recyclerview:1.3.2")

    //image library
    implementation("com.github.dhaval2404:imagepicker:2.1")

    //retrofit library
    implementation("com.squareup.retrofit2:retrofit:2.9.0")
    implementation("com.squareup.retrofit2:converter-gson:2.9.0")
    implementation("com.squareup.retrofit2:converter-scalars:2.7.1")

    //gson
    implementation("com.google.code.gson:gson:2.10.1")

    // Room
    val room_version = "2.5.2"
    implementation("androidx.room:room-runtime:$room_version")
    implementation("androidx.room:room-ktx:$room_version")
    kapt("androidx.room:room-compiler:$room_version")

    //socket
    implementation ("io.socket:socket.io-client:2.1.0") {
        // excluding org.json which is provided by Android
        exclude(group="org.json", module="json")
    }

    //videosdk.live
    implementation("live.videosdk:rtc-android-sdk:0.1.21")

    //notify
    implementation("io.karn:notify:1.4.0")

    //signal
    implementation(files("libs/libsignal-android-0.32.1.aar"))

    //video picker
    val pickerVersion = "1.1.0"
    implementation("com.github.FunkyMuse.MediaPicker:core:$pickerVersion")
    implementation("com.github.FunkyMuse.MediaPicker:videopicker:$pickerVersion")

}

排查与解决方案

1. 清理重复权限声明

Manifest中重复声明了CAMERA和INTERNET权限,Android 14对Manifest解析校验更严格,重复权限可能触发安装失败。删除以下重复行:

  • 第二行<uses-permission android:name="android.permission.CAMERA" />
  • 第二行<uses-permission android:name="android.permission.INTERNET" />

2. 修复APK安装环境问题

  • 重新生成签名完整的Release APK,确保签名过程无错误
  • 在真机上打开“允许安装未知应用”的全部相关选项,部分设备需单独授予Package installer权限
  • 进入系统设置,找到Package installer应用,清理其缓存和数据后重试安装

3. 升级老旧第三方依赖

部分低版本库未适配Android 14,建议升级:

  • 将kotlinx-coroutines-android和kotlinx-coroutines-core从1.3.9升级到最新稳定版
  • 检查live.videosdk:rtc-android-sdk官方是否有Android 14适配版本,替换当前0.1.21版本
  • 升级com.github.dhaval2404:imagepicker到最新版,确保支持Android 14媒体权限逻辑

4. 验证备份规则文件

Android 14对备份规则格式要求更严格,检查data_extraction_rules.xml和backup_rules.xml是否存在语法错误。若暂时不需要备份功能,可移除Manifest中android:dataExtractionRules和android:fullBackupContent属性测试。

5. 获取安装日志定位问题

通过ADB命令抓取安装时的详细错误日志,明确崩溃原因:

adb logcat | grep -i "PackageInstaller"

内容的提问来源于stack exchange,提问作者Sheraz Ahmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:22:02