在PL/SQL 里面有把锁一样的按钮,点击它会跳出“these query result are not updateable,include the ROWID to get updateab

在PL/SQL 里有把锁一样的按钮,点击它会跳出“these query result are not updateable,include the ROWID to get updateab”

 

 

 

一期项目阶段针对上述问题我看了很多方法,最后发现解决方法很简单,直接在查询的sql语句后面加上for update 然后执行语句,那把小锁就能打开了,还能直接点后面的...直接往数据库里面插入数据,更新数据库中的数据。

 

具体过程如下:

1.首先运行没加for update的语句,这会儿要出问题了

 

 

2.运行加了for update语句,

 

<think>嗯,用户问的是在运行adb install安装APK时遇到错误“Persistent apps are not updateable”。首先,我需要理解这个错误的具体含义。Persistent apps通常指的是在AndroidManifest.xml中设置了android:persistent="true"的应用程序,这类应用会被系统视为常驻进程,通常由系统厂商或OEM预装,比如系统桌面、电话服务等关键组件。 接下来,这个错误提示说明用户尝试更新一个已经被标记为持久化的应用。根据Android系统的设计,这类应用不允许通过常规的adb install或普通应用安装流程进行更新,主要是为了防止关键系统组件被意外修改,从而影响系统稳定性。因此,系统会阻止这种更新操作,抛出这个错误。 需要进一步考虑用户可能的场景。用户可能是在尝试替换或更新一个系统预装的应用,比如自定义ROM或者进行系统级开发。普通用户可能较少遇到这种情况,但开发者或系统定制人员可能会碰到。用户可能的真实需求是希望修改或替换某个系统应用,但遇到了权限问题。 接下来,解决这个问题的方法可能有几种。首先,如果用户有系统权限,比如root权限,可以尝试将APK推送到系统分区,并设置正确的权限。这需要remount系统分区为可写,通常使用adb remount命令,但需要设备已解并具有root权限。其次,用户可能需要手动删除旧的APK文件,特别是在/system分区或/vendor分区中的残留文件,因为这些分区通常是只读的,导致无法直接覆盖安装。此外,还有一种可能是用户安装的应用已经被标记为持久化,但并未正确配置,可能需要修改AndroidManifest.xml中的persistent属性,但这需要重新编译APK,并且可能需要系统签名。 另外,需要注意用户是否在正确的环境下操作。例如,某些系统分区在正常启动时是只读的,可能需要进入恢复模式或使用特定的工具来挂载为可写。如果用户没有这些权限,可能需要寻找其他方法,比如通过Magisk模块来覆盖系统应用,或者使用其他系统定制工具。 同时,还需要提醒用户操作的风险,修改系统分区或系统应用可能导致设备变砖或失去保修,特别是对于普通用户而言,可能需要谨慎操作,并确保有备份或恢复的方法。 总结可能的解决方案步骤,首先检查目标应用是否是系统应用,确认是否具有persistent属性。如果有root权限,尝试通过adb remount挂载系统分区,手动替换APK并设置权限。或者,如果不需要持久化属性,修改APK的清单文件并重新签名安装。此外,检查是否有残留的旧版本APK在系统分区,并删除它们。 最后,需要验证这些步骤的有效性,并确保用户理解每个步骤的风险和前提条件,比如需要解bootloader,安装自定义Recovery,或者使用特定的工具如Magisk。如果用户不具备这些条件,可能需要寻找替代方案,或者联系设备制造商获取支持。</think>当使用`adb install`安装APK出现 **"Persistent apps are not updateable"** 错误时,这通常意味着你正在尝试更新一个被系统标记为**持久化应用(Persistent Application)**的程序。以下是深度解析与解决方案: --- ### 一、错误本质解析 1. **Persistent App定义** - 在`AndroidManifest.xml`中声明: ```xml <application android:persistent="true"> ``` - 系统级常驻进程(如SystemUI/Phone服务) - 拥有`android.uid.system`等特殊UID 2. **系统保护机制** - 防止关键系统组件被篡改 - 禁止通过常规adb命令更新 - 更新需**系统签名**+**分区写入权限** --- ### 二、典型场景对照表 | 场景类型 | 特征 | 风险等级 | |-------------------------|-------------------------------|----------| | 系统预装应用更新 | /system/app或/system/priv-app | ⚠️高危 | | 自定义ROM开发 | 修改framework层组件 | ⚠️高危 | | 第三方应用声明persistent | 错误配置manifest | ⚠️中危 | --- ### 三、解决方案(需root权限) #### 方案1:手动替换系统分区文件 ```bash adb root adb remount # 挂载系统分区为可写 adb push your.apk /system/priv-app/OldApp/ adb shell chmod 644 /system/priv-app/OldApp/your.apk adb reboot ``` #### 方案2:清除残留配置 ```bash # 删除旧版APK的所有痕迹 adb shell pm path com.example.oldapp | cut -d':' -f2 | xargs -n1 adb shell rm # 删除数据目录 adb shell pm uninstall --user 0 com.example.oldapp ``` #### 方案3:修改APK属性(需反编译) 1. 使用APKTool反编译: ```bash apktool d your.apk ``` 2. 修改`AndroidManifest.xml`: ```xml <!-- 删除或改为false --> <application android:persistent="false"> ``` 3. 重新签名并安装: ```bash apktool b your -o modified.apk zipalign -v 4 modified.apk aligned.apk apksigner sign --ks your.keystore aligned.apk adb install aligned.apk ``` --- ### 四、深度技术原理 1. **系统分区保护机制** - `/system`分区挂载为只读: $$mount\ |\ grep\ system \Rightarrow /dev/block/bootdevice/by-name/system\ on\ /system\ type\ ext4\ (ro,seclabel,relatime)$$ - 需要`remount`为rw: ```bash mount -o remount,rw /system ``` 2. **签名验证流程** - 系统应用需要**平台签名**: ```java if (apk.isPrivileged() && !checkPlatformSignature(apk)) { throw new PackageManagerException("Invalid platform signature"); } ``` --- ### 五、风险预警 1. **软砖风险**:错误修改系统应用可能导致系统无法启动 2. **安全风险**:禁用persistent属性可能影响系统服务稳定性 3. **兼容性问题**:非官方签名可能导致CTS验证失败 建议在**自定义ROM编译环境**中通过`make update-api`方式集成修改,或使用Magisk模块实现无损修改。普通应用开发者应避免声明`android:persistent`属性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值