You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用ADB降级安装不同Target SDK版本APK时遇权限限制报错的解决方法咨询

解决ADB降级安装APK时的Target SDK权限限制问题

刚好碰到过类似的情况,你遇到的[-26]错误其实是Android系统的一道安全关卡:当前已装应用的Target SDK是29,支持运行时权限,而你要降级的旧APK Target SDK仅为7,完全没有运行时权限的逻辑,系统怕这种降级会搞乱权限管理,所以直接阻止了。

给你几个可行的解决思路:

1. 先卸载现有应用再装旧版(最稳妥)

这是最直接的办法,虽然会丢失应用数据,但能彻底绕开权限限制:

adb uninstall <你的包名>
adb install <旧APK路径>

要是想保留数据,可以先备份再操作:

# 备份应用数据
adb backup -apk <你的包名>
# 卸载当前版本
adb uninstall <你的包名>
# 安装旧版本
adb install <旧APK路径>
# 恢复备份的数据
adb restore backup.ab

不过备份恢复不一定能完美适配旧版本,可能会有小问题,得做好心理准备。

2. 用Android 12+专属的ADB参数绕过

从Android 12(API 31)开始,ADB加了个专门对付这种情况的参数--bypass-low-target-sdk-block,直接把它加到你的命令里就行:

adb install -t -r -d --bypass-low-target-sdk-block <旧APK路径>

这个参数就是为了解决低Target SDK版本应用降级安装的限制,不过只在Android 12及以上的设备上生效。

3. 修改旧APK的Target SDK版本(进阶操作)

如果上面的方法都不行,你可以试试把旧APK的Target SDK改成和当前版本一样的29,让系统觉得它权限逻辑是兼容的:

  1. 用Apktool反编译旧APK:
    apktool d <旧APK路径>
    
  2. 打开反编译后的AndroidManifest.xml,把android:targetSdkVersion改成29:
    <uses-sdk android:targetSdkVersion="29" android:minSdkVersion="7" ... />
    
  3. 重新编译并签名APK:
    apktool b <反编译后的文件夹> -o modified.apk
    # 用你自己的签名文件签名,没有的话可以生成一个测试签名
    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 modified.apk 你的签名文件.jks
    
  4. 用修改后的APK执行降级安装:
    adb install -t -r -d modified.apk
    

这个方法需要点APK修改的基础,而且签名最好和原APK一致,不然得开启设备的未知来源权限或者禁用签名验证。

你说的那些macOS应用能完成降级,本质上也是用了类似的思路:要么先卸载再恢复数据,要么偷偷修改了APK的Target SDK版本,或者调用了系统的隐藏接口绕过限制,原理和上面的方法差不多。

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

火山引擎 最新活动