【问题标题】:/tmp directory in Linux Android SDKLinux Android SDK 中的 /tmp 目录
【发布时间】:2016-06-27 15:30:10
【问题描述】:

只是为了修补它,昨晚我安装了 Android Studio/SDK,在安装和使用过程中,它反复炸毁了我的 2Gb /tmp 分区。有什么办法可以告诉这个怪物使用 /tmp 以外的东西,尤其是下载/解压缩?

Fedora 20 版 (Heisenbug)

谢谢

【问题讨论】:

标签: android android-studio


【解决方案1】:

设置-Djava.io.tmpdir=whatever 对我不起作用。 我只是创建了$HOME/tmp/PackageOperation04,然后从/tmp 创建了一个符号链接。

cd ~
mkdir -p tmp/PackageOperation04
cd /tmp
ln -s $HOME/tmp/PackageOperation04

这样,Android SDK 使用我的/home 分区而不是/tmp

【讨论】:

  • 是的,我也不知道在哪里调整初始启动/SDK 下载/配置的​​ VM 选项,我发现它会使用 vmoptions 进行除下载包之外的所有操作。为了引导第一次启动,我必须为 PackageOperation01PackageOperation04 目录执行此操作。
  • 问题是,创建的链接似乎总是在安装的某些步骤中被删除
  • 这似乎是最近 Android SDK 版本中唯一可行的解​​决方案(此处测试 25.2.5)。
  • 文件夹可能会在 android studio 3.0 中更改为 PackageOperation01。请检查 /tmp 中的目录以获取正确的文件夹名称。
  • android-studio 在我的案例中创建了不同的文件夹,并且总是忽略已经存在的文件夹。如果您有同样的问题,请尝试以下 Paul Ratazzi 的解决方案
【解决方案2】:

您可以更改运行 Android Studio 的 Java 虚拟机使用的临时目录的位置。在 Android Studio 2.0 或更高版本中,选择Help -> Edit Custom VM Options。这将在您自己的配置目录中创建安装的 vmoptions 文件的副本,并在编辑器中打开它。添加以下行并重新启动:

-Djava.io.tmpdir=<directory>

其中&lt;directory&gt; 是具有足够空间的分区中目录的绝对路径。如果&lt;directory&gt;不存在,下次启动Android Studio时会创建。

您也可以直接编辑文件(并且需要在 2.0 之前的版本中),但它的位置取决于平台版本和可能的环境变量设置。详情请见Configuring Android Studio: IDE & VM Options, JDK, etc.

另一种解决方案是增加/tmp 的大小,在您的情况下它很可能是tmpfs 分区,因此可以轻松调整大小。

【讨论】:

  • 我尝试了这种方法,将上面的行添加到 studio64.vmoptions(在 AS bin 目录中)。 AS 本身现在使用此 tmpdir,但 SDK 安装程序会忽略它并创建一个 /tmp/PackageOperation01 目录,用于下载和解压缩 SDK。
  • 在我的系统(Ubuntu 16.04 LTS,AS 2.2.2)上,SDK 管理器使用相对于 SDK 位置的临时目录。在不更改整个 SDK 的位置的情况下,我没有办法改变它。也就是说,这似乎是一个完全不同的问题(JVM temp 与 SDK temp),所以也许你的问题会通过一个新的问题得到更好的曝光。
  • 我认为 OP 正在首次运行 AS,此时它将安装最新的 Android SDK。正是该 SDK 的安装“吹”了(他的话)/tmp 目录。从那以后我发现,一旦您安装了初始 SDK,任何进一步的 SDK 安装都将正确使用 -Djava.io.tmpdir 指定的 tmp 目录。
【解决方案3】:

Chris Moller's answer 让我好奇检查源代码是否有更好的方法来解决这个 /tmp/ 问题。我可以看到 Android Studio 2.3 有选项 STUDIO_VM_OPTIONS 允许使用 JDK 选项指定文件。

所以你可以在下面使用 sn-p 并且将使用 /var/tmp/androidTmp 代替 /tmp

echo "-Djava.io.tmpdir=/var/tmp/androidTmp" > ~/android-studio-tmp.fix
STUDIO_VM_OPTIONS=~/android-studio.fix android-studio

【讨论】:

  • 谢谢,vmoptions 文件中的 tmpdir 每次升级都会丢失,真烦人。
  • 对于在下载系统映像时遇到此问题的人,您需要在 $JAVA_OPTIONS 中指定不同的 tmp 目录,而不仅仅是在 $STUDIO_VM_OPTIONS 上(相同的选项,即“-Djava.io.tmpdir”)
【解决方案4】:

在代码中进行了一些探索。解决方案是使用覆盖默认 tmpdir 路径的命令行参数启动 JVM:

-Djava.io.tmpdir=随便

可能有更微妙的方法可以做到这一点,但我所做的只是编辑 .../android-studio/bin/studio.sh 来替换

VM_OPTIONS=""

VM_OPTIONS="-Djava.io.tmpdir=/mnt/disk5/android/tmp"

【讨论】:

  • 参见上面的 Paul Ratazzi 的正确方法(tm)。
  • 错误:无法找到或加载主类 .opt.tmp
【解决方案5】:

来自this comment on a blog post为我工作:

  • 创建目录

    $ mkdir /opt/android-studio/tmp

  • 在 studio.sh 顶部添加:

    export _JAVA_OPTIONS=-Djava.io.tmpdir=/opt/android-studio/tmp

【讨论】:

    【解决方案6】:

    另一种选择是临时增加/tmp 分区的大小。为此,您需要执行以下操作:sudo mount -o remount,size=10G /tmp/

    这会将您的分区大小增加到 10GB。请使用df -h 检查一切是否顺利。

    【讨论】:

      【解决方案7】:

      在 android studio 淹没了我的 4GB tmp 分区后,我成功地将系统映像手动解压缩到 Sdk/system-images/android-xx ...

      因此我们只需解压到正确的位置

      显然它会为每次下载创建一个 /tmp/PackageOperationxx,执行下载,要求您继续,解压缩 tmp 中的内容并将其移动到正确的位置。

      认真的android家伙......

      【讨论】:

        【解决方案8】:

        像其他人所说的那样设置 java.io.tmpdir 曾经对我有用,但在 Android Studio 3.0.1 中解压缩系统映像仍在使用 /tmp。它不能可靠地使用相同的 PackageOperation0x 目录,所以我真的不想要它们的特殊符号链接,就像 user3150128 的答案一样。

        由于只是在需要新的 SDK 和图像时才会出现问题,因此我运行了一次 Android Studio,并通过在命令行中设置 TMPDIR 成功完成了更新:

        $ TMPDIR=/path/to/bigger/tmp/dir /path/to/android/studio.sh
        

        【讨论】:

          【解决方案9】:

          您可以为您的/tmp 使用文件:

          作为根:

          创建所需大小的文件((例如 10 GiB /tmp 大小):

          dd if=/dev/zero of=/path/to/your/tmp_dir bs=1024M count=10
          

          在上面创建一个文件系统:

          mke2fs -j /path/to/your/tmp_dir
          

          分区准备就绪,挂载它:

          mount -t ext3 -o loop /path/to/your/tmp_dir /tmp
          

          来源:https://www.yourhowto.net/increase-tmp-partition-size-linux/

          【讨论】:

            【解决方案10】:

            在之前的建议对我不起作用之后,我想添加另一个(不是很干净)的解决方案:

            在开始安装新的虚拟设备时(仍然使用 /tmp)文件

            ~/Android/Sdk/system-images/android-< version >/google_apis/x86/.installer/.installData
            

            已创建,其中包含临时路径。取消下载,编辑所需文件夹的临时路径,然后重新安装设备。

            我后来意识到解决方案添加-Djava.io.tmpdir=&lt; tempdir &gt; 正如 Paul Ratazzi 通过 Help -> Edit Custom VM Options 所建议的那样,它对我不起作用,因为它已添加到 android-studio/bin/studio64.vmoptions 但将其添加到 android-studio/bin/studio.vmoptions 反而为我完成了这项工作。这可能是更好的方法......

            【讨论】:

              【解决方案11】:

              我与“设备上没有剩余空间”问题斗争了将近一周。 (我不会被打败!)我尝试了在这里和其他网站上找到的所有内容,但问题仍然存在。我终于使用以下方法完全安装了 Android Studio 并正常工作:

              1. 我在一个 100G 空间的分区上创建了一个名为 PackageOperation01 的文件夹。
              2. 我去了tmp目录并删除了我认为可以安全删除的所有内容,包括PackageOperation01文件夹。
              3. tmp 目录中,我创建了一个指向我创建的新PackageOperation01 文件夹的链接。
              4. 我将链接命名为PackageOperation01。这让我可以安装几乎所有东西。

              我仍然有两个错误(..“没有空格...”)。回到tmp 目录,我发现我指向PackageOperation01 的链接已被安装程序删除,并创建了一个名为PackageOperation07 的新目录。

              1. 我从tmp 中删除了PackageOperation07,并在PackageOperation01 旁边的大分区上创建了一个名为PackageOperation07 的新文件夹。
              2. 我重新创建了指向 PackageOperation01 文件夹的链接,并创建了指向 PackageOperation07 文件夹的新链接。

              这次 Android Studio 安装没有错误。

              【讨论】:

                【解决方案12】:

                使用符号链接的解决方案将不起作用,因为在存在目录或链接 /tmp/PackageOperation0* Android Studio 会创建一个目录 /tmp/PackageOperation0* + 1。

                例如,我们创建了一个符号链接 /tmp/PackageOperation01 并开始下载系统映像,Android Studio 只需创建目录 /tmp/PackageOperation02 即可使用。

                【讨论】:

                  【解决方案13】:

                  我通过将 tmpfs 参考文件夹更改为 /var/tmp 来解决它。在 android-studio.sh 中包含 #!bin/sh 的行之后添加:

                  导出 TMPFS=/var/tmp

                  【讨论】:

                    【解决方案14】:

                    我有一个使用符号链接的替代版本。其他解决方案对我不起作用,因为 PackageOperation0* 符号链接总是被删除。但是在这个文件夹中为解压缩文件夹创建一个符号链接确实有效:

                    cd ~
                    mkdir -p tmp/PackageOperation01
                    mkdir -p tmp/PackageOperation01/unzip
                    cd /tmp/PackageOperation01
                    ln -s $HOME/tmp/PackageOperation01/unzip unzip
                    

                    【讨论】:

                      【解决方案15】:

                      这是我所做和工作的:

                      mkdir -p ~/PackageOperation01 /tmp/PackageOperation01
                      sudo mount --bind PackageOperation01 /tmp/PackageOperation01
                      $ANDROID_HOME/tools/bin/sdkmanager "system-images;android-29;google_apis;x86_64"
                      

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2021-10-21
                        • 2021-01-04
                        • 2011-12-26
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2018-04-28
                        • 2017-12-05
                        相关资源
                        最近更新 更多