1、下载安装android SDK,可通过浏览器或者相关手机软件下载软件下载需要安装的apk安装文件,把apk文件放到android-sdk-windows\platform-tools下

2、可通过adb相关的命令来启动或者在Eclipse下启动虚拟机,或者通过USB与真机连接

3、使用cmd进入android-sdk-windows\platform-tools目录

4、输入 adb install xxx.apk 如果有开启多个虚拟机或者连接了真机,可使用adb devices显示当前android的机器和abd -s emulator 555XX install xxx.apk进行安装

5、在CMD提示SUCEESS后,可在android虚拟机可找到安装成功的应用

我在安装的时候就遇过以中文名称的apk,安装时报错了Segmentation fault, pm install /data,把apk的文件名改为英文名称,就成正常安装了

把apk安装文件放到进入android-sdk-windows\platform-tools目录,能防止在CMD上安装显示成功,但在虚拟器上未能看到已经安装

附:

下面为网上收集的相关资料:

apk安装常见出错解决方法:

1. 无法识别设备

adb kill-server
然后再adb start-server

2. Segmentation fault, pm install /data…

直接使用adb向模拟器中安装app时报这个错误。

原因很简单,使用豌豆荚下载下来的app很多是用中文命名的,改成英文名重新adb install. 至于为什么,我想设计adb的工程师们根本没有考虑中文支持吧。

3.Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

这个问题出现的背景要说明一下:下载了某app,往里面加了点东西,然后重新打包使用adb install安装。

这是由于Android应用程序的自签名机制导致的。

Android 系统不会安装运行任何一款未经数字签名的apk程序,无论是在模拟器上还是在实际的物理设备上。Android的开发工具(ADT插件和Ant)都可以协 助开发者给apk程序签名,它们都有两种模式:调试模式(debug mode)和发布模式(release mode)。
如果要正式发布 一个Android App,必须使用一个合适的私钥生成的数字证书来给程序签名 ,而不能使用adt插件 或者ant工具 生成的调试证书来发布。

签名的作用
1. 发送者的身份认证。由于开发商可能通过使用相同的 Package Name 来混淆替换已经安装的程序,以此保证签名不同的包不被替换
2. 保证信息传输的完整性。签名对于包中的每个文件进行处理,以此确保包中内容不被替换。

要解决这个错误,需要点专用工具,看雪上比较多,我就不再此贴出来了。

4.Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]

在“卸载”app时,没有通过应用程序管理器卸载,而是直接通过adb删除了/data/app中的相应包。这中方式“卸载”是不彻底的,因为程序安装后还会在其他地方,比如/data/data中建立相关的目录和文件。

在设置-应用程序-管理应用程序里,找到要卸载的app,进行卸载。卸载后再次安装,就不会再出现这个错误了。

5. Failure [INSTALL_FAILED_DEXOPT]
在android4.0源码里面编译出来apk后,用adb install 安装时,报错[INSTALL_FAILED_DEXOPT]。

z:\ics-android\ics-src\out\target\product\generic\system\app>adb install NativeTimer.apk
28 KB/s (10166 bytes in 0.344s)
        pkg: /data/local/tmp/NativeTimer.apk

Failure [INSTALL_FAILED_DEXOPT]

原来在system\app下面的apk是经过优化的,而dex文件不会打包到apk中,dex文件会被优化后,生成odex文件。

z:\ics-android\ics-src\out\target\product\generic\system\app\NativeTimer.apk

z:\ics-android\ics-src\out\target\product\generic\system\app\NativeTimer.odex

这样安装apk时,就会缺少dex文件,导致报错[INSTALL_FAILED_DEXOPT]。

解决办法:

找到未优化过的apk,即
z:\ics-android\ics-src\out\target\product\generic\obj\APPS\NativeTimer_intermediates>adb install package.apk.unaligned
70 KB/s (138806 bytes in 1.912s)
        pkg: /data/local/tmp/package.apk.unaligned
SuccessFailure

6.adb push out of memory

最近做个东西,要修/system/etc/下的hosts文件,目的是通过域名访问内网的服务器,进行手机与内网的测试,这里要说的是如果是连接外网,并不需要如此做法,正因为我们要做测试,不可能用外网,是测成功了再连外网

做法是先在电脑上写好hosts文件内容,如下:

127.0.0.1      localhost
192.168.0.100      www.myhome.com
保存好文件后,通过如下命令进行上传(要有Root权限,即你曾刷过ROM):

adb remount

adb push d:\hosts   /system/etc

之后进入shell模式下 查看是否上传成功

adb shell

ping www.myhome.com

如果出现的IP地址是 192.168.0.100表示上传hosts文件成功了。

说到这里,大家可能很想骂我,与题目不符,现在就是出现问题的时候了,

这个文件是上传了,当我每次修改代码再装到手机上运行时,就连不上 www.myhome.com了,搞了半天,原来上传的hosts文件其实并没有持久化到手机系统上的,只是内容载到内存中,装新应用或者重启机子后,就没了。好!那我再次上传hosts文件,就报出:

out of memory 这样的错了,必须要重启手机,才能再次push,这真是太麻烦了,改一次代码就要重启,这算什么嘛

在网上找了几天了,解决办法都是针对模拟器的,真机上出的还是没找到,今天看了论坛上有人要删除系统下的文件,我就看看了,有收获,

解决办法是:
   在recovery状态下连接手机,并进入advance  -mount/system,在PC端CMD中输入以下命令:

adb remount

adb push d:\hosts   /system/etc

之后重新启动,

启动之后进入shell

adb shell

cd  /system/etc

cat hosts

OK,成功打出了修改过的内容,而不会再丢失了,是真得改到手机的Linux系统上了。

看了论坛的内容也贴出来 ,是讲删除系统文件

在recovery状态下连接手机,并进入advance  -mount/system,在PC端CMD中输入以下命令:
   adb shell
    cd /system/app
    ls
    查找到你要删除的文件(如Talk.apk)将其删除之:
   rm  Talk.apk(如果还有同名的只是后缀不同,也可以用Talk.*)
   重启手机就OK了

7. 系统文件删除无权限

mount -o remount,rw -t yaffs2 /dev/block/mtdblock0 /system
chmod 777/system/app

今天下午,我在打开whatsapp的时候,破玩意儿又提示我有新版本要不要更新,于是我选择了Yes。经过缓慢的安装之后,忽然提示我installed unsuccessful。我一下脑袋就大了,我是安装的没有修改的官方包,更新又是自动下载的,为什么还会出现这种情况?

于是我怀疑可能是官方更改了证书,所以需要卸载之后重新安装。于是我打开Drawer准备重新启动whatsapp。没想到虽然whatsapp的图标出现在drawer里面,但是启动的时候却提示我没有安装这个app!
我靠,这还了得,于是我将whatsapp卸载了,然后试图重新安装新版。还是提示我不能安装!
于是我使用adb再次尝试安装,提示我[INSTALL_FAILED_DEXOPT],Google之后发现dexopt根本就不是一个单词,应该是dex和optimize的合成缩写。那么有可能是apk文件包里面的dex文件损坏,于是我把它反编译了出来,尝试重新编译。但是不知道这个东西是用什么编译的,smali根本就不能重新编译回去……只能作罢。
所以假设问题还是出现在手机端。Google了一下,发现这个问题应该是出现在生成dex文件时候发生的错误,但是能搜索到的结果有许多是说由于G1机身空间太小导致的,显然同样的问题不可能出现在刚刚做完app2sd的milestone上面。但是我搜索到了一个如果强制完全卸载app的文章,里面介绍了安装app之后,相关文件分布的路径。
所以我的思路就很清晰了,首先完全卸载,再行安装。
经过试验,发现果然可行!那么提炼一下,可以得出这类问题的通用解决思路。

假设该app名为ketech,安装包名为ketech.apk。

查看/data/app里面是否有名称包含ketech的apk或zip包,有可能为类似com.android.ketech.apk或com.android.ketech.zip的形式,有则删掉。

查看/data/app-priviate里面是否有名称包含ketech的apk,名称形式同上,有则删掉。(做了app2sd的朋友可能还需要查看一下app2sd文件夹里面是否含有此apk包)

查看/data/data下面是否有名称包含ketech的文件夹,名称形式类似于com.android.ketech,有则删掉。

查看/data/system下面的package.xml文件,将包含ketech的项目删掉。

Wipe Dalvik缓存。(方式多样,有些openrecovery自带,就不进行详细解释了)

重新安装即可。

替代方案

单改单个模块下的Android.mk
加入
LOCAL_DEX_PREOPT := false
mm后
在out目录下找到相应apk
直接push到/system/app
当然之前要删除要替换的的*.apk *.odex

版权声明:本文为博主原创文章,未经博主允许不得转载。

使用adb安装遇到的一些坑的更多相关文章

  1. Appium环境的安装以及一路上的坑

    Appium环境的安装以及一路上的坑 第一步环境的安装 l  javaJDK的安装以及环境变量的配置这个我就不说了网上的教程全都是,搜一个安装一下吧 l  AndroidSDK的安装也是如此我是直接安 ...

  2. 在flask服务里面执行adb 安装命令

    今天讲的是我在flask服务里执行adb install 命令,被坑了一天 需求是我们的安卓打包机器和我们的自动化机器不是同一台,管理人也不一样,想让每次打包后能通知到我们的服务器,然后执行后续的操作 ...

  3. android 入门-使用adb安装及卸载apk

     我想用adb 安装apk 到设备上现在出现了2个. 提示我没有找到设备    安装不用进去adb shell 这是你存放apk文件夹路径 下面安装apk到手机上(usb一定要连接成功否则读取不到手机 ...

  4. 【APP问题定位(三)】adb安装

    先来剧透一下我们需要使用的工具 bin包               一个安装目录,可以免安装直接调用adb命令 Android SDK platform tools 下面依次为大家介绍,第1个和第2 ...

  5. adb安装apk

    1.    安装配置 1.1安装包 下载adb.zip,解压至本机 1.2环境配置 将adb安装路径加入path中 2.    安装apk 使用数据线将Android手机与电脑连接,打开手机usb调试 ...

  6. adb导出安卓 把手机内存文件导入到电脑里 adb安装软件

    记得先找对路劲adb shellls 最上面的ls: ./ 打头的没有权限.而下面的这些acct sdcard等 都有权限. 然后cd sdcardls 看下目录,发现gxm文件夹在sdcard下面. ...

  7. flutter 安装过程遇到的坑

    Flutter是一个移动应用程序的软件开发工具包(SDK),用一个代码库构建高性能.高保真的iOS和Android应用程序.目标是使开发人员能够为Android和iOS提供自然的高质量的应用,在滚动行 ...

  8. 安装redis时候的坑

    安装redis时候的坑 随手记录一下,以此为借鉴. 1.按照需求下载redis服务 redis可视化文件 2.安装及环境搭建 修改服务里redis.windows-service.conf文件,或者r ...

  9. adb安装启动Touch校正软件

    /********************************************************************************* * adb安装启动Touch校正软 ...

随机推荐

  1. 【spring源码分析】BeanDefinitionRegistryPostProcessor接口可自定义bean加入IOC

    自定义BeanDefinitionRegistryPostProcessor BeanDefinitionRegistryPostProcessor继承自BeanFactoryPostProcesso ...

  2. shell command

    查看网卡流量报告  sar  -n  DEV  kill pid  ps  -ef  |grep xxx  |grep -v grep  |awk '{print $2}'   |xargs   ki ...

  3. Scala中的Map使用例子

    Map结构是一种非常常见的结构,在各种程序语言都有对应的api,由于Spark的底层语言是Scala,所以有必要来了解下Scala中的Map使用方法. (1)不可变Map特点: api不太丰富 如果是 ...

  4. 使用kubebapps 管理helm 仓库已经应用使用Monocular专门提供helm 仓库查找

    Monocular 从1.0 开始专注于helm 的UI展示,对于部署以及维护已经去掉了,官方也提供了相关的说明以及 推荐了几个可选的部署工具,从使用以及架构上来说kubeapps 就是Monocul ...

  5. cookie和session机制

    一.cookie和session机制之间的差别和联系 1.cookie机制 Cookie意为"甜饼",是由W3C组织提出,最早由Netscape社区发展的一种机制. 眼下Cooki ...

  6. Python之安装pip

    安装Python之后,命令行语句定位到其安装目录下的Scripts目录 如我的安装目录是:D:\python\Scripts 然后执行命令:easy_install.exe pip就会开始安装pip ...

  7. preload 与 prefetch 的区别

    Preload 浏览器会在遇到如下link标签时,立刻开始下载main.js(不阻塞parser),并放在内存中,但不会执行其中的JS语句. 只有当遇到script标签加载的也是main.js的时候, ...

  8. react-router v4.0 知识点

    react-router 提供了一个withRouter组件 withRouter可以包装任何自定义组件,将react-router 的 history,location,match 三个对象传入. ...

  9. spring-IOC容器(一)

    ApplicationContext 代表IOC容器(控制反转) ApplicationContext的主要实现类: ——ClassPathXmlApplicationContext:从类路径下加载配 ...

  10. kafka_2.11-0.8.2.1生产者producer的Java实现

    转载自:http://blog.csdn.net/ch717828/article/details/50818261 1. 开启Kafka Consumer 首先选择集群的一台机器,打开kafka c ...