打成系统包时遇到的异常

本文解析了Android应用升级失败的常见原因,包括新APK缺少必要配置、数据库变更时版本号未更新及SO库缺失导致的问题。提供了详细的解决方案,如添加android:sharedUserId属性、实现数据库迁移代码及正确部署SO库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、新的apk提示升级失败
原因:新apk中缺少android:sharedUserId=“android.uid.system”

2.提示数据库已变更,但版本号未改变异常
原因:当数据库变更的时候需要增加版本号,并配置如下代码

    public static final Migration MIGRATION_1_2 = new Migration(1, 2) {
        @Override
        public void migrate(@NonNull SupportSQLiteDatabase database) {
            database.execSQL("CREATE TABLE IF NOT EXISTS table_break_record (" +
                    "_id                INTEGER NOT NULL," +
                    "model_name         TEXT ," +
                    "time               INTEGER NOT NULL," +
                    "time_consuming     INTEGER NOT NULL," +
                    " PRIMARY KEY(_id)" +
                    ")");
        }
    };
 @Singleton
    @Provides
    CodamaDb provideDb(CustomApp app) {
        return Room.databaseBuilder(app, CodamaDb.class, "codama.db")
                .addMigrations(MIGRATION_1_2)//重点
                .build();
    }

3、apk通过adb install或升级正常,但制作成刷机卡后就一直闪退,提示so库找不到
原因:adb push到system/app中时需要把用到的so库也push到/system/lib中,而通过安装能正常使用是因为,安装时应用时安装在data/app目录下,同时会把so库映射到data/app-lib目录下。并且当系统启动时会扫描所有非系统应用,如果发现有和系统应用包名相同,校验通过并且版本更高,则会认为该应用为这个系统应用的升级版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值