install-软件安装跟push的区别
今天在做项目的时候,需要往一个user版本的手机中安装一个应用,就在网上查了相应的方法,可以使用如下命令
adb install -r out/target/product/vanzo6752_lwt_kk/system/priv-app/Mms.apk
这时候,如果安装成功,终端会提示如下信息
KB/s ( bytes in .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
install-软件安装跟push的区别的更多相关文章
- 使用拷贝的方式(adb push) 绕过Android系统和adb install直接安装APK
某些情况下定制的Android系统为了限制用户安装应用,例如电视盒子,车载中控等,通过修改代码屏蔽了正常安装应用的方式 本文探讨如何在 adb shell 具有读写data分区目录的权限前提下,通过a ...
- 转贴:sudo apt-get install 可以安装的一些软件
Ubuntu 下的一些软件安装sudo apt-get install virtualbox#华主席推荐 2007年年度最佳软件,最佳编辑选择奖得主.....sudo apt-get install ...
- [转] npm install 本地安装与全局安装的区别
npm的包安装分为本地安装(local).全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已,比如 npm install grunt # 本地安装 npm install -g ...
- Linux软件安装中RPM与YUM 区别和联系
.tc-nav-row{ height:38px; margin: 8px 15px; } .tc-nav-tab{ text-align: center; color:#333333; line-h ...
- Linux(Ubuntu)使用 sudo apt-get install 命令安装软件的目录在哪?(已解决)
Linux(Ubuntu)使用 sudo apt-get install 命令安装软件的目录在哪? bin文件路径: /usr/bin 库文件路径: /usr/lib/ 其它的图标啊什么的路径 ...
- nodejs npm install全局安装和本地安装的区别
npm的包安装分为本地安装(local).全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已,比如:代码如下:复制代码npm install # 本地安装npm install - ...
- Linux 软件安装到 /usr,/usr/local/ 还是 /opt 目录区别
Linux 的软件安装目录是也是有讲究的,理解这一点,在对系统管理是有益的 /usr:系统级的目录,可以理解为C:/Windows/, /usr/lib理解为C:/Windows/System32./ ...
- Linux 操作系统下,安装软件 apt-get、yum 的区别
Linux 操作系统主要分为两大类: RedHat系列:Redhat.Centos.Fedora等: Debian系列:Debian.Ubuntu等. yum(Yellow dog Updater, ...
- 1.docker介绍、命令、容器、镜像、数据卷、Dockerfile、常用软件安装、推送阿里云
一.docker介绍 1.docker是什么 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各 ...
随机推荐
- JAVA线程队列BlockingQueue
JAVA线程队列BlockingQueue 介绍 BlockingQueue阻塞队列,顾名思义,首先它是一个队列,通过一个共享的队列,可以使得数据由队列的一端输入,从另外一端输出. 常用的队列主要有以 ...
- MySQL Pool
创建连接池 function SqlPool() { this.flag = true;//是否连接过 this.pool = mysql.createPool({ host : 'localhost ...
- BZOJ3645: Maze(FFT多项式快速幂)
Description 众维拉先后在中土大陆上创造了精灵.人类以及矮人,其中矮人是生性喜好常年居住在地下的洞穴的存在,他们挖掘矿物甚至宝石,甚至用他们的勤劳勇敢智慧在地底下创造出了辉煌宏大的宫殿,错综 ...
- rman 备份并异机恢复
1.RMAN 备份脚本 RUN { CONFIGURE RETENTION POLICY DAYS; CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CO ...
- 学习参考《矩阵分析与应用(第二版)张贤达》PDF
要想深入理解机器学习,或者对人工智能的某个领域有所研究,都必须掌握矩阵及其应用. 学习<矩阵分析与应用第2版>时,会发现总结了大量线性代数的知识,主要是给工科生用的.归纳了不少论文中的解法 ...
- hzwer 模拟题 祖孙询问
祖孙询问 题目描述 已知一棵n个节点的有根树.有m个询问.每个询问给出了一对节点的编号x和y,询问x与y的祖孙关系. 输入输出格式 输入格式: 输入第一行包括一个整数n表示节点个数. 接下来n行每行一 ...
- Activiti工作流(4):编写一个HelloWorld
版权声明:本文为博主原创文章,未经博主允许不得转载. 1.使用eclipse的activiti插件画流程图 在resource文件夹下新建一个工作流diagram 右键——new——other...— ...
- 使用UltraEdit配置多行注释和取消多行注释
UltraEdit功能强大,使用方便,成为软件开发者必备的文档和代码编辑工具.有很多人也直接用它来写代码,如C/Java,脚本如:Perl/Tcl/JavaScript 等. 如果用来写代码,有一个不 ...
- hdu1856 More is better (并查集)
More is better Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 327680/102400 K (Java/Others) ...
- msp430在ccsv5下出现的问题总结
一.内存问题 问题描写叙述,报错: program will not fit into available memory. placement with alignment fails for se ...