Android中adb push和adb install的使用区别 转载

本篇文章由史迎春(@三俗小女子)投稿。转载请注明原文地址。

在Android实际开发中,经常会使用adb命令,安装应用程序可以使用adb push 或者adb install。下面就来讲讲这两种安装方式的区别。

  1. adb push 能够指定安装目录。比如执行”adb push xxx.apk system/app” 后,xxx.apk被安装到了system/app目录下,此目录下的软件为上文中提到的system application。(注意,system/app是只读的,所以只有有root权限才能push apk进去,而且在push进去的apk会把原本的apk覆盖掉。)adb push本身的意思是将文件复制到系统中的某个文件夹下,但是将apk push到system/app下并且重启手机以后会注册应用程序。
  2. adb install 用此命令安装的软件位于 data/app 目录,带有参数 -r才能强制安装,为user application。

由以上两条可知,adb install和adb push的apk主要区别有:

push install
目录 system/app data/app
权限 系统级(权限全开) 用户级(没全开)
卸载 root后删除 可卸载
大小 无限制,自定义 有限制
安装 pm重新注册 不会重新弄注册

手动安装的APK版本号和系统内置API版本号一样。

更深一层的分析:

1Android系统应用更新机制

  • 系统为每个应用在AndroidMainfest.xml提供了versionName、versionCode两个属性。
    • versionName:String类型,用来给应用的使用者来查看版本.
    • versionCode:Integer类型,作为系统判断应用是否能升级的依据。

2Android系统内置应用更新判断代码

  • 代码来自frameworks/base/services/java/com/android/server/PackageManagerService.java 中 scanPackageLI函数的package更新判断条件

由以上资料分析:

  1. 同一个AP,若在data/app下有更高版本的app,但是system下有旧版本,则follow旧版本。
  2. 又已知如果有两个以上的AP在同一个进程但是只有一个AP更改了API version则编译会出错
  3. 假设有两个AP:AP1和AP2.两个AP都在API Version更新以后build通过且install进手机。且系统中有内置AP1是旧版本的,重新开机的时候还是会注册旧版本的AP1。则此时,系统中就会出现相同进程但是不同版本的AP1(system/app)和AP2(data/app)

综上,编译会出错。

猜测:

  1. 若同一个进程的AP都用同一版本的SDK编译,push进手机,则可以运行(已验证)。
  2. 若同一进程的AP都用同一个版本的SDK编译。install进手机,则可以运行,前提是删除system/app内所有同一进程AP。(已验证)
  3. 若同一个进程的AP都用同一个版本的SDK编译,push/install进手机都可以(待验证)。

补充:用push时会将原来系统中的对应的apk覆盖掉,所以,最好先备份出来一份,用如下命令:
adb pull /system/app/xxxx.apk /home/

android adb push 与 adb install的比较(两种安装APK的方法)

更多相关文章

  1. Android(安卓)App开发基础篇—64位Win10系统下安装配置开发环境
  2. android工程建立到最后一步提示unsupported template dependency
  3. Android(安卓)4.0 SDK 环境搭建体验 (On Windows 7 Ultimate)
  4. 【Android(安卓)性能优化】应用启动优化 ( 安卓应用启动分析 | L
  5. [Android] [ Android启动流程 ] [ 下 ] [ Zygote、SystemServer
  6. 【Android】Android(安卓)监听apk安装替换卸载广播
  7. ArcGIS API for Android(安卓)案例教程 2
  8. android zygote之启动过程分析
  9. 在Ubuntu中和Android中添加开机自启动的守护进程

随机推荐

  1. Android中的DownloadManager
  2. Android(安卓)Studio获取SHA1值
  3. ANDROID Porting系列三、Build Cookbook
  4. Android(安卓)中文 API (20) —— DatePick
  5. 基于Android(安卓)tess-two工程的数字识
  6. Android使背景灯(Brightness)高亮的方法
  7. Android的CTS测试
  8. 【Android】View绘制过程分析之draw
  9. android spinner自动弹出列表,设置title,Tt
  10. 【Android】【录音】Android录音--AudioR