我想在自己安卓15的手机上安装一个低版本的游戏 app (com.popcap.pvz_na.apk),但是安装包提示不兼容,无法安装。

应用未安装:应用与您的手机不兼容

然后我做了下面的尝试:

  1. adb 安装和 Install with Options
adb install --bypass-low-target-sdk-block ./test.apk

或者在 Install with Options 里选择 Bypass Low Target SDK Block 进行安装。

都是同样的报错:

com.xxx.xxx
INSTALL_FAILED_NO_MATCHING_ABIS:
INSTALL_FAILED_NO_MATCHING_ABIS:
Failed to extract native libraries, res=-113
  1. adb 指定 ABI 安装
adb install --abi armeabi xxx.apk
或者
adb install --abi armeabi-v7 xxx.apk

报错:

Performing Streamed Install
adb: failed to install xxx.apk:
Exception occurred while executing 'install':
java.lang.IllegalArgumentException: ABI armeabi not supported on this device

手机不支持 armeabi 和 armeabi-v7a。大概率只能在虚拟机里安装,不过我还想继续尝试。

  1. MT管理器修改 / apktool修改 使用 MT 管理器查看 apk 并修改后重新打包签名安装,或者使用 apktool 反编译修改后重新打包签名安装。二者效果是类似的。
    java -jar apktool.jar d demo.apk -o demo
    java -jar apktool.jar b demo -o new_demo.apk
    

参考:https://www.yeyulingfeng.com/108924.html 使用MT管理器查看该 apk 的 lib 目录,发现只有 armeabi 目录,我把该目录重命名为 arm64-v8a,然后重新打包签名安装,可以成功安装,且可以打开。但是该 app 运行是会申请通讯录和存储权限,我即使同意了,app 似乎也无法识别到这些权限,导致无法进入。

然后打开 AndroidManifest.xml,发现该 app 申请的权限如下:

    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.VIBRATE"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
    <uses-permission android:name="com.android.vending.CHECK_LICENSE"/>
    <uses-permission android:name="com.android.vending.BILLING"/>
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>

即使我是用 adb pm grant 命令授予了这些权限,app 依然无法识别到这些权限。

目前暂时未解决该问题。