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的方法)

Android中adb push和adb install的使用区别的更多相关文章

  1. android中The connection to adb is down,问题和解决

    android中The connection to adb is down,问题和解决   自己总结的在android中常会出现的不好解决的问题和方法(其中第三个方法经过了四天的折磨.....哎) 1 ...

  2. adb push和adb install区别

    一般的,Android 应用程序有两种安装方法: 1. 将应用程序的apk文件push到手机中,用如下命令: adb push xxxx.apk /system/app. 2. 用adb instal ...

  3. Android adb push 和 adb pull

    将电脑 D 盘 libreference-ril.so 文件拷贝到安卓设备的 /system/lib 目录下 $ adb remount $ adb root $ adb push D:\libref ...

  4. adb push 和 adb pull命令

    adb push命令 :从电脑上传送文件到手机: adb pull命令 :从手机传送文件到电脑上             @Cocos 下次需要权限的目录可以执行chmod 777 目录名      ...

  5. ADB push 和ADB pull命令

    adb push命令 :从电脑上传送文件到手机: adb pull命令 :从手机传送文件到电脑上      

  6. Android 中this、 getApplicationContext()、getApplication()之间的区别

    this:代表当前,在Activity当中就是代表当前的Activity,换句话说就是Activity.this在Activity当中可以缩写为this. getApplicationContext( ...

  7. Android中dip, dp, px,pt, sp之间的区别:

    Android中dip.dp.sp.pt和px的区别   1.概述 过去,程序员通常以像素为单位设计计算机用户界面.例如:图片大小为80×32像素.这样处理的问题在于,如果在一个每英寸点数(dpi)更 ...

  8. [转载]android中The connection to adb is down,问题和解决

    原网址:http://blog.sina.com.cn/s/blog_5fc93373010164p3.html 今天我出现了第3个错误,于是百度了一下.感觉这篇博客对我挺有帮助,推荐给大家.以下是原 ...

  9. Android中libs目录下armeabi和armeabi-v7a的区别

    armeabi默认选项,支持基于 ARM* v5TE 的设备支持软浮点运算(不支持硬件辅助的浮点计算)支持所有 ARM* 设备 armeabi-v7a支持基于 ARM* v7 的设备支持硬件 FPU ...

随机推荐

  1. Android 捕捉HOME键

    @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_HO ...

  2. Struts2 对Action中所有方法进行输入校验、单个方法进行校验

    index.jsp: <body> <s:fielderror /> <form action="${pageContext.request.contextPa ...

  3. MySQL存储过程的基本函数

    (1).字符串类 CHARSET(str) //返回字串字符集 CONCAT (string2 [,... ]) //连接字串 INSTR (string ,substring ) //返回subst ...

  4. html表单提交的几种方法

    原文地址:http://www.ijser.cn/?p=34 最普通最经常使用最一般的方法就是用submit type..看代码: <form name=”form” method=”post” ...

  5. 安卓图片框架:universal-image-loader的高速使用

    在安卓开发过程中难免会遇到下面几个情况: 1.图片异步载入 2.图片缓存 3.图片显示 4.其他--(忘记了) 以上的这些情况,可能要自己去写不少代码去实现这些功能.并且对于一些新手,可能写了半天,发 ...

  6. Math.round(11.5)等于()Math.round(-11.5)等于()

    几天前去面试,这道简单的题目居然做错了,看来基础就是慢慢积累的.并不断使用和复习才会成为高手,假设基础不是那么熟练.恐怕在成为高手的路上会困难重重.所以在做项目的间歇时间.偶尔回顾一下最基础的知识.是 ...

  7. uva 103 Stacking Boxes(DAG)

    题目连接:103 - Stacking Boxes 题目大意:有n个w维立体, 输出立体互相嵌套的层数的最大值, 并输出嵌套方式, 可嵌套的要求是外层立体的w条边可以分别对应大于内层立体. 解题思路: ...

  8. C++隐式转换

    #include <iostream> using namespace std; class A { int a; public: A(int n):a(n) { cout << ...

  9. UIScrollView中添加一个视图,实现让其始终固定在某个位置

    ScrollView中添加一个视图,实现让其始终固定在某个位置,如最底部的位置.方法是自定义一个继承UIScrollView,重写它的layoutSubviews方法.代码如下: #import &q ...

  10. C#中的线程(一)入门 转

    文章系参考转载,英文原文网址请参考:http://www.albahari.com/threading/ 作者 Joseph Albahari,  翻译 Swanky Wu 中文翻译作者把原文放在了& ...