android虚拟机emulator应用安装--使用adb install安装步骤和注意事项

本文详细解析了Android应用安装过程中遇到的问题,包括无法识别设备、Segmentation fault等错误的解决方法,以及如何避免文件名引起的安装失败、防止安装显示成功但虚拟机未显示已安装的应用等问题。此外,提供了将hosts文件持久化到手机系统的方法,以及系统文件删除权限不足的解决方案。文章最后总结了应用安装和系统文件操作的一系列实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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之后,相关文件分布的路径。
所以我的思路就很清晰了,首先完全卸载,再行安装。
经过试验,发现果然可行!那么提炼一下,可以得出这类问题的通用解决思路。

  1. 假设该app名为ketech,安装包名为ketech.apk。
  2. 查看/data/app里面是否有名称包含ketech的apk或zip包,有可能为类似com.android.ketech.apk或com.android.ketech.zip的形式,有则删掉。
  3. 查看/data/app-priviate里面是否有名称包含ketech的apk,名称形式同上,有则删掉。(做了app2sd的朋友可能还需要查看一下app2sd文件夹里面是否含有此apk包)
  4. 查看/data/data下面是否有名称包含ketech的文件夹,名称形式类似于com.android.ketech,有则删掉。
  5. 查看/data/system下面的package.xml文件,将包含ketech的项目删掉。
  6. Wipe Dalvik缓存。(方式多样,有些openrecovery自带,就不进行详细解释了)
  7. 重新安装即可。
替代方案

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

<think>好的,我需要帮用户了解如何在虚拟机安装LSP插件。首先,用户提到的“虚拟机”可能指Android虚拟设备(AVD)或类似VMware的虚拟机,但结合“LSP插件”,更可能是指Android的LSPosed框架。因为LSPosed通常用于安卓系统级修改,常见于虚拟环境中进行模块调试。 接下来,我要确认用户的需求。他们可能想了解在虚拟机安装LSPosed框架的具体步骤,或者安装其他LSP插件。考虑到之前用户询问过系统级修改,比如步数统计异常处理,可能他们需要LSPosed来启用Xposed模块,从而修改系统行为。 需要分步骤说明安装流程。首先,用户需要具备Root权限,因为LSPosed需要系统级访问。然后安装Magisk,因为LSPosed通常作为Magisk模块安装。接下来是安装Riru或Zygisk,这取决于使用的Magisk版本。安装LSPosed模块后,用户需要配置激活模块,最后安装具体的LSP插件。 需要注意不同虚拟机的差异,比如AVD可能需要特定的Magisk版本,或者使用其他工具如Bluestacks。还要提醒用户备份数据,避免操作失误导致系统问题。此外,可能需要开启开发者选项USB调试,特别是如果是在安卓虚拟设备上操作。 可能存在用户对某些术语不熟悉的情况,比如Magisk、Riru、Zygisk,需要适当解释,但用户之前的问题涉及ADBRoot,可能有一定基础。因此,保持步骤清晰,但不过于冗长。 最后,需要检查步骤的正确性,例如Magisk安装流程是否正确,LSPosed的版本兼容性,以及启用模块后的重启步骤。确保用户能够按照指导顺利完成安装,并提示常见问题解决方法,如模块不生效时的处理办法。</think>以下是虚拟机环境下安装LSPosed框架的**详细操作指南**(以Android虚拟设备为例): --- ### 一、基础环境准备 #### 1. 系统要求 $$ \begin{cases} \text{Android 7.0+ (推荐Android 11+)} \\ \text{已获取Root权限} \\ \text{Magisk 24.0+} \\ \text{启用Zygisk(Magisk设置中开启)} \end{cases} $$ #### 2. 必要组件 ```markdown - [Magisk](https://github.com/topjohnwu/Magisk/releases) - [LSPosed](https://github.com/LSPosed/LSPosed/releases) - [Shamiko](https://github.com/LSPosed/LSPosed.github.io/releases)(可选,用于隐藏Root) ``` --- ### 二、核心安装流程 #### 步骤1:Magisk环境配置 ```bash # 在虚拟机终端执行: adb push Magisk-v25.2.apk /data/local/tmp adb shell "pm install -t /data/local/tmp/Magisk-v25.2.apk" adb reboot ``` > **验证**:安装后打开Magisk应用,检查`Zygisk`状态为「已启用」 #### 步骤2:安装LSPosed模块 ```markdown 1. 将LSPosed的ZIP包放入虚拟机存储 2. Magisk → 模块 → 从本地安装 → 选择ZIP包 3. 重启设备两次(首次初始化需要完整加载Zygote) ``` #### 步骤3:验证安装 ```bash # 通过ADB检查服务状态 adb shell "ls /data/adb/lspd" adb shell "getprop | grep lsposed" ``` > 预期输出应包含`[lsposed.status]: [active]` --- ### 三、进阶配置方案 #### 1. 隐藏Root检测(可选) ```markdown 1. 安装Shamiko模块 2. 在Magisk设置中: - 开启「遵守排除列表」 - 配置排除列表(如银行类App) 3. 重启设备 ``` #### 2. 模块管理界面 $$ \text{访问方式} \begin{cases} \text{A. 桌面快捷方式} \\ \text{B. ADB命令启动:} \\ \quad \text{adb shell am start -n org.lsposed.manager/org.lsposed.manager.ui.MainActivity} \\ \text{C. 文件管理器访问:} \\ \quad \text{/data/adb/lspd/manager.apk} \end{cases} $$ --- ### 四、常见问题排查表 | 现象 | 解决方案 | 命令验证 | |----------------------|----------------------------|----------------------------| | 模块未生效 | 检查Zygisk状态 | `adb shell "magisk --zygote"` | | 界面无限重启 | 禁用冲突模块 | `adb shell "pm disable <模块包名>"` | | Magisk显示未安装 | 修复boot镜像 | `fastboot flash boot magisk_patched.img` | | Xposed模块兼容问题 | 开启「传统Xposed模式」 | 修改`/data/adb/lspd/config.xml` | --- ### 五、虚拟机特殊优化 #### 1. 针对AVD的调整 ```markdown - 修改模拟器启动参数: `emulator -avd <名称> -writable-system -selinux permissive` - 扩展系统分区: `resize2fs /dev/block/sda1 2G` ``` #### 2. 性能优化配置 ```xml <!-- 修改config.ini --> hw.ramSize=4096 disk.dataPartition.size=4G vm.heapSize=256 ``` --- **重要提示**:在虚拟机调试时建议使用`Android x86`镜像而非ARM翻译镜像,可避免模块加载失败。若需测试银行类App的隐藏效果,推荐使用基于Android 9的虚拟机镜像(API 28)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值