Android模拟器有一个奇怪的问题。我通过Android AVD管理器创建了一个虚拟设备(新创建的模拟器,平台2.1和API级别7)。我已尝试使用标准设置和添加的硬件参数,用于更大(256 MB)的设备RAM大小,但没有任何改变。
我需要将文件送到系统分区来测试项目(称为haggle),但由于某种原因,系统分区从开始就没有空间。
aa a@aaa /home/haggle-0.2-android
$ adb -s emulator-5554 shell
# df
df
/dev: 47084K total, 0K used, 47084K available (block size 4096)
/sqlite_stmt_journals: 4096K total, 0K used, 4096K available (block size 4096)
/system: 73600K total, 73600K used, 0K available (block size 4096)
/data: 65536K total, 18464K used, 47072K available (block size 4096)
/cache: 65536K total, 1156K used, 64380K available (block size 4096)
如您所见,系统分区有0K可用空间。当连接非根HTC Nexus One并执行相同操作时,我会得到以下值:
/dev: 108896K total, 0K used, 108896K available (block size 4096)
/sqlite_stmt_journals: 4096K total, 0K used, 4096K available (block size 4096)
/system: 148480K total, 116364K used, 32116K available (block size 4096)
/data: 200960K total, 22296K used, 178664K available (block size 4096)
/cache: 97280K total, 1852K used, 95428K available (block size 4096)
/sdcard: 3864064K total, 118496K used, 3745568K available (block size 32768)
为什么模拟器上的系统分区从一开始就有0K可用空间,我该怎么做才能改变它?即使我使用mount / remount使分区可写,我也得到相同的0K值。
任何提示?
答案 0 :(得分:28)
找到答案:)
启动模拟器时,您可以通过-partition-size x emulator_name指定分区大小。
通过终端完成。 例如:
emulator -partition-size 125 @AVD1
OR
emulator -partition-size 125 -avd AVD1
请注意,大小必须大于当前系统分区大小。 对于Android4.0.3模拟器,默认大小已经是168,因此将新分区大小设置为更大的值,如256
答案 1 :(得分:5)
如今,-partition-size
更改/ system / data分区,但不更改/ system分区空间。
例如,如果要安装完整的GApp,则需要更多空间。
在https://unix.stackexchange.com/questions/104790/how-to-setup-a-growable-loopback-device
中记录了在Unix中执行此操作的一般过程简而言之:
cp system.img system-extended.img
)system-extended.img
增加到所需的尺寸(例如,truncate system-extended.img -s 2G
)resizefs system-extended.img
或resize2fs system-extended.img
)-system <path/to/system-extended.img>
参数调用模拟器时使用新的img文件。 -writable-system
参数也可以派上用场。答案 2 :(得分:1)
我在尝试在Android Q(如果需要的话是Android TV)上@ssice的答案时遇到问题。
显然,system.img现在是GPT分区磁盘映像。
您可以通过运行file system.img
来确认:
system.img: DOS/MBR boot sector; partition 1 : ID=0xee, start-CHS (0x0,0,2), end-CHS (0x87,130,59), startsector 1, 2177023 sectors, extended partition table (last)
如果您也遇到这种情况,可以在Linux上执行以下操作:
truncate -s 3G system.img
fdisk system.img
g
用于新的GPT分区表n
用于新分区。选择分区号1;接受将覆盖整个磁盘的分区的默认设置w
用于保存更改$ fdisk system.img
Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): g
Created a new GPT disklabel (GUID: 2E6B87B6-5492-47E0-A164-A148E24445A0).
Command (m for help): n
Partition number (1-128, default 1):
First sector (2048-6291422, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-6291422, default 6291422):
Created a new partition 1 of type 'Linux filesystem' and of size 3 GiB.
Command (m for help): w
The partition table has been altered.
Syncing disks.
system.img
作为回送设备
losetup -fP system.img
/dev/loopN
中分配了/dev/loop1
(例如,losetup -a | grep system.img
)来抓取resize2fs /dev/loop1p1
(/dev/loop1
分区1)答案 3 :(得分:0)
我发现了问题。 SDK_MANAGER 文件夹位于我的D盘(D:/ასერ/?dwe + joan/SKD_MANAGER
)中的NON-STANDARD字符目录中
这就是为什么它无法获得正确的分区大小。我将** SDK_MANAGER *移动到D:/ ** SDK_MANAGER *并解决了问题!
(所以,谁有错误消息,如“无效的系统分区大小”或“恐慌:无法打开avd1”,这篇文章可能有所帮助)
答案 4 :(得分:0)
对于通过源构建的Android 10模拟器,以下解决方案效果很好:
$ emulator -partition-size 8192 -writable-system
如果已经启动了模拟器,则必须清除并重新构建它:
$ make installclean
$ rm out/target/product/generic_x86_64/*qcow2
$ make
$ emulator -partition-size 8192 -writable-system
已在 aosp_car_x86_64 目标上成功测试。