某些情况下定制的Android系统为了限制用户安装应用,例如电视盒子,车载中控等,通过修改代码屏蔽了正常安装应用的方式

本文探讨如何在 adb shell 具有读写data分区目录的权限前提下,通过adb push 拷贝方式绕过Android系统和adb install直接安装apk到Android系统,适用于对Android系统和adb指令操作有一定基础的读者

测试环境: 夜神模拟器(Android5.1)
测试应用: QQ音乐车机版 爱奇艺音乐 爱奇艺Android版

前置条件: adb shell具有root权限,可读写data分区

      通过执行 adb connect localhost:62001,可以使用命令行环境连接到模拟器内部的Android环境

步骤:

1.根据下载的apk文件,准备拷贝文件,具体:
(1) 在电脑上使用解压软件打开apk文件,并根据AndroidManifest.xml或代码目录结构(一般以com开头)获取软件包名(可以使用jadx解析apk后查看AndroidManifest的manifest标签的package属性)

(2) 创建文件夹,命名为形如"包名-1",拷贝apk文件到该文件夹并重名为base.apk

(3) 将apk中lib文件加解压出来,并参考如下[Android系统支持库类型与lib库内文件夹名对应关系]修改so文件所在文件夹的名称

(4) 若lib文件夹下只有一套so库(一个文件夹),直接拷贝软件解压后的lib文件夹到新建的形如"包名-1"文件夹

(5) 若lib文件夹下存在多套so库(多个文件夹),则参考如下[Android系统支持库类型及优先级顺序],保留并优先级最高的so文件所在文件夹(64位>32位)

(6) 执行 adb push "包名-1" /data/app/"包名-1" 将文件拷贝至Andorid系统/data/app目录下并重启系统

(7) 重启系统后,此时桌面应该已显示安装的应用,若打开时出现停止运行错误,一般由于找不到对应的so库导致,请继续执行如下第2步

2.修改Android系统packages.xml系统存储的应用信息

(1) 执行 adb pull /data/system/packages.xml . (注意第二个参数是'.',表示电脑当前目录) 将Android系统的packages.xml文件拷贝至电脑,该文件存储了Android系统应用的信息

(2) 根据apk包名查找 "package" 标签,定位到前面通过拷贝安装至Android系统的应用的信息内容

(3) 确认并在当前package标签下是否补充 primaryCpuAbi 属性, 内容为第1步第5小节所保留的so文件夹原名(即应用提供给Android的系统支持库的类型名称),例如:

<package name="com.musicqiyi.mvideo" codePath="/data/app/com.musicqiyi.mvideo-1" nativeLibraryPath="/data/app/com.musicqiyi.mvideo-1/lib"
primaryCpuAbi="armeabi" flags="48708" ft="1699e32eb38" it="1699e32ebd1" ut="1699e32ebd1" version="2" userId="10031">
...
</package>

(4) 执行 adb push packages.xml /data/system 将修改后的packages.xml文件覆盖拷贝至Android系统并重启,确认应用是否可以正常运行

(5) 若应用打开时仍出现错误,可能是并非首次安装该应用到Android系统中,请尝试如下第3步

3.创建数据文件夹内容和删除dex缓存(非必须)

(1) 执行 adb shell 并定位到 /data/data 目录,在当前目录创建一个文件夹,名称为apk的包名 mkdir -p '包名'

(2) 在包名文件夹内创建软链接文件,将apk安装目录下的so库文件夹链接到当前目录下 ln -s lib /data/app/'包名-1'/lib/'so库文件夹'

(3) 定位到 /data/dalvik 目录, 执行 rm -rf * 清空系统对应用的dex缓存

(4) 重启系统

Android系统支持库类型及优先级顺序
adb shell下执行cat system/build.prop | grep 'ro.product.cpu.'

# ro.product.cpu.abi and ro.product.cpu.abi2 are obsolete,
# use ro.product.cpu.abilist instead.
ro.product.cpu.abi=x86
ro.product.cpu.abilist=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist64=

Android系统支持库类型与lib库内文件夹名对应关系

/* /libcore/libart/src/main/java/dalvik/system/VMRuntime.java */
private static final Map<String, String> ABI_TO_INSTRUCTION_SET_MAP= new HashMap<String, String>();
static {ABI_TO_INSTRUCTION_SET_MAP.put("armeabi", "arm");ABI_TO_INSTRUCTION_SET_MAP.put("armeabi-v7a", "arm");ABI_TO_INSTRUCTION_SET_MAP.put("mips", "mips");ABI_TO_INSTRUCTION_SET_MAP.put("mips64", "mips64");ABI_TO_INSTRUCTION_SET_MAP.put("x86", "x86");ABI_TO_INSTRUCTION_SET_MAP.put("x86_64", "x86_64");ABI_TO_INSTRUCTION_SET_MAP.put("arm64-v8a", "arm64");
}

常见的Android系统支持库与cpu对应关系

转载于:https://www.cnblogs.com/applex007/p/10571853.html

使用拷贝的方式(adb push) 绕过Android系统和adb install直接安装APK相关推荐

  1. 【Android 教程系列第 31 篇】通过 adb install 命令安装 apk 时提示 signatures do not match previously installed version

    这是[Android 教程系列第 31 篇],如果觉得有用的话,欢迎关注专栏. 遇到的一个小问题,做下记录. 一:问题描述 在使用 adb install 命令安装 apk 时,提示的内容如下 主要提 ...

  2. Android:从assets资源目录下安装apk

    原文链接:http://blog.csdn.net/annkie/article/details/8150807 为了实现将第三方apk内置在assets资源目录下,再进行安装的目的. 首先将需要安装 ...

  3. 深入理解Android系统和Linux系统的关系

    深入理解Android系统和Linux系统的关系 参考链接: 1.理解android和linux内核的关系_keepdoingit的专栏-CSDN博客_android和linux内核 2.Androi ...

  4. android cmd 卸载,CMD 控制台操作卸载安装apk、卸载系统默认应用

    adb设置 添加环境变量 添加一个名为"Android_adb"的系统变量(变量名随便只要上下一致即可),变量值就是你的sdk地址"C:\AndrodiStudioSDK ...

  5. Android android.uid.system的应用调用安装apk失败

    背景 最近项目开发过程中用到安装apk的功能.把从服务器下载下来的apk安装到机器中.安装过程中遇到的问题记录一下. 问题 安装过程中提示解析软件包时出现问题. 说明:本文是针对运行的apk在Mani ...

  6. 【Android 插件化】VirtualApp 接入 ( 安装 APK 插件应用 | 启动插件 APK 应用 | MainActivity 安装启动插件完整代码 )

    文章目录 一.安装 APK 插件应用 二.启动插件 APK 应用 三.MainActivity 完整代码 四.博客源码 一.安装 APK 插件应用 调用 VirtualCore.get().insta ...

  7. android studio 提高编译的速度,安装apk过慢问题解决

    从eclipse转到android studio,总觉得编译速度或者安装到手机上的速度会变很快,现实是仍然很慢,所以就搜如何提高build速度,安装真机上apk能快一点,步骤如下: 1.修改andro ...

  8. android 安装 apk 7.0,android 7.0及以上版本安装apk

    第一:在AndroidManifest.xml文件下 android:name="android.support.v4.content.FileProvider" android: ...

  9. android apk自动安装包下载,Android实现应用下载并自动安装apk包

    安装: String str = "/CanavaCancel.apk"; String fileName = Environment.getExternalStorageDire ...

最新文章

  1. 2400门课:MIT 开放迄今最全 计算机+电气工程课程
  2. NLP领域的ImageNet时代:词嵌入已死,语言模型当立
  3. 云通讯平台:为更多游戏玩家解放双手
  4. 关于YOLO算法的备忘
  5. 获得AndroidManifest.xml文件中meta-data的value值
  6. 百度App Objective-C/Swift 组件化混编之路(二)- 工程化
  7. LeetCode刷题指南(一)
  8. ORA-28000: the account is locked 解决方法
  9. T4 Templates and the Entity Framework
  10. 零基础学python图文版-给伸手党的福利:Python 新手入门引导
  11. Context Encoding for Semantic Segmentation-CVPR2018【论文理解】
  12. 基于matlab的适应度曲线的代码,matlab常用的几个适应度评价函数分析.docx
  13. MATLAB基础学习系列二——矩阵
  14. PL/SQL基础题型
  15. QWT官方例子--barchart
  16. cannot be cast to com.xxx.xxx.model.User] with root cause
  17. MATLAB自动控制:分析系统动态特性(超调量,上升时间,峰值时间,调整时间)和静态特性(稳态误差)
  18. Python 当当网数据分析
  19. 2019年 -- 最新前端面试题攻略
  20. java中判断对象中某个属性是否为空

热门文章

  1. 洛谷 P1463 [SDOI2005]反素数ant P1820 寻找AP数
  2. 基于深度学习的图像风格转换
  3. SLF4J: Class path contains multiple SLF4J bindings.
  4. WPF 自定义命令 以及 命令的启用与禁用
  5. failed to load kernel library!处理办法
  6. 请郎平回归执教中国女排
  7. xp速度比服务器系统,让Windows XP跑得更快更稳
  8. 线性回归 php,PHP实现简单线性回归之数学库的重要性
  9. 如何系统自学python_如何系统地自学 Python?
  10. Python数据结构:插入排序