Ubuntu - 错误:无法创建SD卡

84
我看到很多有关写入SD卡的帖子,但我认为我的问题不同。我无法在构建AVD过程中创建SD卡。
我最初尝试使用Android SDK和AVD Manager来完成此操作,选择
名称:my_avd
目标:Android 2.2 - API Level 8
SD卡:大小:1024 MiB
皮肤:内置:默认(HVGA)
硬件:属性:抽象LCD密度,值:160
这会弹出一个窗口,显示以下消息:
“创建AVD 'my_avd'的结果:
错误:无法创建SD卡。”
我尝试从命令行重复该过程,但收到类似的错误:
alex@alex-desktop:~$ android create avd -n my_avd -t 1 -c 1024M
Android 2.2 is a basic Android platform.
Do you wish to create a custom hardware profile [no]no
Error: Failed to create the SD card.

尝试按照使用mksdcard的说明进行操作同样没有效果;我认为我的基本缺乏Linux经验可能是导致问题的原因。当我尝试使用mksdcard时,它只报告找不到文件或目录。在Linux中是否可以以这种方式使用mksdcard工具?

alex@alex-desktop:~$ mksdcard 1024M ./sdcard.iso
bash: /home/alex/android-sdk-linux_x86/tools/mksdcard: No such file or directory
alex@alex-desktop:~$ sudo android create avd -n my_avd -t 1 -c 1024M

我已经将Android工具目录添加到了我的PATH变量中,但我觉得显然还有其他遗漏。也许是某种访问权限问题?
尝试使用sudo运行android命令似乎也没有帮助:
alex@alex-desktop:~/android-sdk-linux_x86/tools$ sudo ./android create avd -n my_avd -t 1 -c 1024M
Android 2.2 is a basic Android platform.
Do you wish to create a custom hardware profile [no]no
Error: Failed to create the SD card.

我甚至尝试安装Eclipse和ADT插件,从那里运行管理器,但无济于事。非常感谢任何提示。提前警告,我是一个初学者Linux用户,所以即使看起来像是一个很明显的要检查的东西也可能被我忽略掉。


@Alex Pritchard:你可能不需要一个1024M的假SD卡。尝试32M,看看你是否有更好的运气。 - CommonsWare
@CommonsWare 哎呀,32M的SD卡仍然无法创建。 :( - Alex Pritchard
@Alex Pritchard:这很奇怪。图像是在与其余AVD相同的目录中创建的(~/.android/avd/whateveryoucalledit/),因此我无法理解您如何创建AVD但没有带有SD卡的AVD。 - CommonsWare
@CommonsWare 我又读了一些资料,觉得我可能找到了问题所在。我猜测可能是因为我使用的是64位的Linux安装程序,需要安装ia32-libs。我回家后会尝试安装并查看是否有所帮助。 - Alex Pritchard
@Alex Pritchard:是的,我相信你需要它们。实际上没有它们运行起来很让人惊讶。虽然那是很久以前的事情了,但我不得不经历一些曲折才能在我的64位Ubuntu设置上运行Android,虽然我已经忘记了细节。 - CommonsWare
太好了!ia32-libs解决了问题! - Alex Pritchard
18个回答

101

所以我找到了问题。 我使用的是64位Linux安装版,这个版本默认没有安装ia32-libs软件包。因此,mksdcard工具无法运行。安装了这个软件包后,我可以使用AVD管理器轻松地构建AVD。


1
谢谢,ubuntu 12.04 x64,它解决了问题。我只想提醒这些ia32-libs大约有260mb。 - yetanothercoder
43
是的!我找到了一种方法,不需要安装那240个可怕的依赖包。只需安装libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386,而不是ia32-libs。值得称赞的是,这个人通过https://dev59.com/TXE85IYBdhLWcg3wkkfK#10473415救了我的电脑,也希望可以帮助其他人。顺便说一下,我正在使用Linux Mint 13。 - pavel_kazlou
4
在 Fedora 上,运行 dnf install glibc.i686 libstdc++.i686 命令以安装 glibc.i686 和 libstdc++.i686 软件包。 - Dominic Cleal
令人惊讶的是,在2017年仍然需要这个(!),当大多数开发都在x86-64机器上完成... - nimrodm
1
@nimrodm 我对这篇文章的活跃度感到不断惊讶(这是我迄今为止最受欢迎的SO文章,哈哈)。 - Alex Pritchard
显示剩余2条评论

81
在Ubuntu 16.04 LTS x64上,使用Android Studio 2.1(也在2.3.3上进行了测试),从终端运行:
sudo apt-get install lib32stdc++6

1
我手动安装了SDK(没有使用Android Studio),这对我起作用了。 - Cristian Todea
1
除此之外,我还不得不将~/Android/Sdk/emulator/lib64/libstdc++/libstdc++.so.6和libstdc++.so.6.0.18重命名为其他名称,以使模拟器运行。但我只能在没有OpenGL的情况下运行它。--------------- ./emulator @Nexus_4_API_23 无法创建可绘制对象 getGLES2ExtensionString: 无法创建GLES 2.x Pbuffer! 无法获取GLES 2.x扩展字符串! 无法初始化模拟帧缓冲区 模拟器:错误:无法初始化OpenglES仿真,请使用“-gpu off”禁用它。 - Francisco Junior
1
Bingo. Ubuntu 17.04. - mez.pahlan

22

我和你一样遇到了同样的错误,但我已经解决了它,也许可以帮助你(尽管我不认为你的错误是由于像我一样的问题造成的)。

我发现../tools中的所有工具都没有执行权限,所以我使用了

chmod -R 777 ../tools

从命令行运行,最后成功了。


1
感谢您贡献答案。Stack Overflow提供格式化功能以增强您的答案可读性。您可以使用代码格式化来标识Shell命令并将其与其他文本区分开。 - this.josh
工作正常,但这会导致 .txt.xml 等文件具有可执行权限... 很好知道涉及的各个文件。 - funkybro

10

正如其他人已经写过的那样,问题在于您的Linux发行版是64位的,而目前Android虚拟设备AVD)需要x86库才能正常工作。

有人建议安装ia32-libs。 然而,在Ubuntu 14.04 LTS中,您找不到这个库。 我使用了这些替代库来解决问题:lib32z1lib32ncurses5lib32bz2-1.0lib32stdc++

sudo apt-get update
sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc++

3
我所需要的仅是lib32stdc++6。 - Big McLargeHuge

6

我刚遇到了同样的问题。在64位Ubuntu上,没有安装ia32-libs(例如:sudo apt-get install ia32-libs),SDK工具中的任何一个都无法运行。


5
在 elementary OS 和 ubuntu 中,解决方案是安装以下软件包:
sudo apt-get install lib32ncurses5 lib32z1
sudo apt-get install libgcc1:i386

这对我在Kubuntu 17.04上有效。但是仍然必须删除libstdc++。 - Avamander

4

如果您正在使用Kali、Debian Jessie(或Ubuntu 13.10+),请尝试使用

sudo apt-get install lib32stdc++6

代替上述提到的ia32-libs。


4
alex@alex-desktop:~$ mksdcard 1024M ./sdcard.iso
bash: /home/alex/android-sdk-linux_x86/tools/mksdcard: No such file or directory
alex@alex-desktop:~$ sudo android create avd -n my_avd -t 1 -c 1024M

我发现了这个问题,并且找到了解决方法。首先:

cd /home/alex/android-sdk-linux_x86/tools/

然后写下这个:
sudo chmod 755 mksdcard
mksdcard 1024M ./sdcard.iso
sudo android create avd -n my_avd -t 1 -c 1024M

应该可以工作 :)


4
sudo apt-get install lib32stdc++6

在此之后,您可能会遇到以下错误。
Cannot launch AVD in emulator.
Output:
libGL error: unable to load driver: i965_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: i965
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast
X Error of failed request:  GLXBadContext
  Major opcode of failed request:  154 (GLX)
  Minor opcode of failed request:  6 (X_GLXIsDirect)
  Serial number of failed request:  49
  Current serial number in output stream:  48
libGL error: unable to load driver: i965_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: i965
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast
X Error of failed request:  GLXBadContext
  Major opcode of failed request:  154 (GLX)
  Minor opcode of failed request:  6 (X_GLXIsDirect)
  Serial number of failed request:  49
  Current serial number in output stream:  48
libGL error: unable to load driver: i965_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: i965
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast
emulator: WARNING: VM heap size set below hardware specified minimum of 228MB
X Error of failed request:  BadValue (integer parameter out of range for operation)
emulator: WARNING: Setting VM heap size to 384MB
  Major opcode of failed request:  154 (GLX)
  Minor opcode of failed request:  24 (X_GLXCreateNewContext)
  Value in failed request:  0x0
  Serial number of failed request:  33
  Current serial number in output stream:  34
QObject::~QObject: Timers cannot be stopped from another thread

使用以下3个命令来解决这些问题。
mv ~/Android/Sdk/tools/lib64/libstdc++/libstdc++.so.6{,.bak}
mv ~/Android/Sdk/tools/lib64/libstdc++/libstdc++.so.6.0.18{,.bak}
ln -s /usr/lib/libstdc++.so  ~/Android/Sdk/tools/lib64/libstdc++/**

3

我也遇到了这个问题,安装i386软件包后,我成功地为我的Android模拟器创建了一个SD卡。我需要完成两个步骤。

sudo apt-get update
sudo apt-get install ia32-libs

完成这项工作后,我能够创建一个带有SD卡的模拟器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接