zoukankan      html  css  js  c++  java
  • install-软件安装跟push的区别

    今天在做项目的时候,需要往一个user版本的手机中安装一个应用,就在网上查了相应的方法,可以使用如下命令

    adb install -r out/target/product/vanzo6752_lwt_kk/system/priv-app/Mms.apk

    这时候,如果安装成功,终端会提示如下信息

    4160 KB/s (3962707 bytes in 0.930s)
        pkg: /data/local/tmp/Mms.apk
    Success

    所以我们可以看到,它的安装目录是/data/local/tmp

    而如果我们用adb push 安装eng版本的时候,它的安装目录是

    system/priv-app

    现在我们看一下这两个命令的区别,一下内容转载自 http://www.grackertalk.com/?p=48

    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下并且重启手机以后会注册应用程序。
    adb install 用此命令安装的软件位于 data/app 目录,带有参数 -r才能强制安装,为user application。

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


    push
    install


    目录
    system/app
    data/app


    权限
    系统级(权限全开)
    用户级(没全开)


    卸载
    root后删除
    可卸载


    大小
    无限制,自定义
    有限制


    安装
    pm重新注册
    不会重新弄注册

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

    更深一层的分析:
    1、Android系统应用更新机制

    系统为每个应用在AndroidMainfest.xml提供了versionName、versionCode两个属性。

    versionName:String类型,用来给应用的使用者来查看版本.
    versionCode:Integer类型,作为系统判断应用是否能升级的依据。

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

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

    由以上资料分析:

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

    综上,编译会出错。
    猜测:

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

    原文链接:http://www.grackertalk.com/?p=48

  • 相关阅读:
    pandas
    CTC Loss原理
    CTC 的工作原理
    Demystifying JavaScript Closures, Callbacks and IIFEs
    Css compatibility
    Flexbox——快速布局神器
    centos wordpress
    Encog
    D3js
    Lucene学习
  • 原文地址:https://www.cnblogs.com/zhangshuli-1989/p/zhangshuli_install_150409091.html
Copyright © 2011-2022 走看看