2016/01/27

drawable の横にビックリマークが表示されるのはエラーではない

@ Android Studio 1.4

Android Studio で layout を編集していると drawable の横にビックリマーク (Exclamation mark) が表示されることがあります。
結論からいうと、これはエラーではありません。
Android Studio がサムネイルをレンダリング出来なかったために表示されるマークです。
大抵の場合、drawable に XML を指定している場合に表示されるはずです。

このエリアにサムネイル表示される機能は便利ですが、この表示の仕方はちょっと紛らわしいですね。

2016/01/13

VirtualBox の Shared Folders でシンボリックリンクを作れるようにする

デフォルトでは Shared Folders 上にシンボリックリンクを作成することはできない

VirtualBox のクライアントOS が Unix系の場合、その Shared Folders 上でシンボリックリンクを貼りたいということはよくあるかと思います。
しかし、普通に Shared Folders を設定しただけでは、クライアントOS上で以下のようなエラーが出てしまいます。

$ cd /media/sf_Documents/env
$ ln -s lib lib64
ln: failed to create symbolic link `lib64': Read-only file system

シンボリックリンク作成可能にする

ホストOS上で以下を実行します。
最後の 1 を忘れるとエラーになりますのでご注意を。

$ VBoxManage setextradata "${VMの名前}" VBoxInternal2/SharedFoldersEnableSymlinksCreate/${SharedFolderの名前} 1

きちんと設定されているか確認する

ホストOS上で以下を実行して、SharedFoldersEnableSymlinksCreate が設定されていれば次の起動からシンボリックリンクの作成が有効になっているはずです。

$ VBoxManage getextradata "${VMの名前}" enumerate           [~]
Key: GUI/LastCloseAction, Value: PowerOff
Key: GUI/LastGuestSizeHint, Value: 720,400
Key: GUI/LastNormalWindowPosition, Value: 583,142,960,432,max
Key: VBoxInternal2/SharedFoldersEnableSymlinksCreate/${SharedFolderの名前}, Value: 1

2016/01/12

Android Studio で Gradle wrapper をアップグレードする方法

Gradle wrapper は便利ですが、 場合によっては新しい機能を使うため等、Gradle のバージョンを上げなければならない時があります。
そんな時に Gradle wrapper で使用している Gradle のバージョンを上げる方法です基本的、ビルドが通っている間は無闇にビルドツールのバージョンを安易に変えるべきではありません

Gradle wrapper を使っていることを確認する

File → Settings → Build, Execution, Deployment → Build Tools → Gradle

Use default gradle wrapper (recommended) が選択されていることを確認します。

Gradle wrapper を更新する

プロジェクトのトップディレクトリで、以下を実行します。
2.8 のところは対象のバージョンに変更してください。

$ ${Android-studio}/gradle/gradle-2.8/bin/gradle wrapper --gradle-version 2.8

Android Studio でさらに更新する

この状態でプロジェクトのトップディレクトリ直下にある build.gradle を開きます。
すると、以下のようなメッセージが出るので、OK, apply suggestion! を押せばオーケーです

You can configure Gradle wrapper to use distribution with sources. It will provide IDE with Gradle API/DSL documentation.


2016/01/11

'defaultConfig' cannot be applied to '(Groovy.lang.Closure)' が出た時の対処方法

Android StudioAndroid Studio ver. 1.5.1 でタイトルのような Warning が出るようになってしまいました。

これは Android Studio を手作業で更新するなどして、指定した gradle のバージョンがインストールされていない場合android-studio ディレクトリ中に存在しない時に起こるようです。

修正方法としては、gradle wrapper を使うのが良さそうです。

File → Settings → Build, Execution, Deployment → Build Tools → Gradle

Use default gradle wrapper (recommended) を選択。

gradle wrapper を使いたくない場合は Use local gradle distribution を選択し、Gradle home のパスを正しく設定しなおしてもオーケーです。

2016/01/05

LD_LIBRARY_PATH を設定しても反映されないことがある

@ Ubuntu 14.04 LTS

システム全体でライブラリパスを指定したかったので、/etc/environment に以下を追記したのですが反映されませんでした他の環境変数は反映されているのに

/etc/environment
LD_LIBRARY_PATH=/usr/local/hoge/lib

LD_LIBRARY_PATH の設定が反映されないファイルがある

調べてみると、大分前からそういう仕様だそうです知らなかった…
システムワイドに LD_LIBRARY_PATH を指定することってあまり無いからなー


LD_LIBRARY_PATH についての説明から抜粋

Note: You can only set this environment variable inside an interactive shell. Since Ubuntu 9.04 Jaunty Jackalope, LD_LIBRARY_PATH cannot be set in $HOME/.profile, /etc/profile, nor /etc/environment files. You must use /etc/ld.so.conf.d/*.conf configuration files. See Launchpad bug #366728 for more information.

(意訳)
この環境変数はインタラクティブシェルの中でのみ設定できます。Ubuntu 9.04 以降では、LD_LIBRARY_PATH を $HOME/.profile, /etc/profile, /etc/environment の中で設定することは出来ません。 /etc/ld.so.conf.d/*.conf の中で設定する必要があります。さらに詳しい情報は Launchpad bug #366728 を参照してください。


というわけで、以下のファイルに LD_LIBRARY_PATH を記述しても反映されません。
  • $HOME/.profile
  • /etc/profile
  • /etc/environment

解決方法1: システム全体で使いたい場合

/etc/ld.so.conf.d 以下に新たなファイルを作り、各行にライブラリパスを追加します。

/etc/ld.so.conf.d/hoge.conf
# コメントも書けます
/usr/local/hoge/lib
/usr/local/hoge/share/lib

/etc/ld.so.cache を再構築するため、以下を実行します。

$ sudo ldconfig

ビルドしてみると、リンクが通るはずです。
ただ、この状態で LD_LIBRARY_PATH 環境変数を見てみても、先ほどのパスは追加されていません。
その代わり、以下のようにリンクされるライブラリのリストを取得することができます。

$ ldconfig -p
1418 libs found in cache `/etc/ld.so.cache'
        libzinnia.so.0 (libc6,x86-64) => /usr/lib/libzinnia.so.0
        libzephyr.so.4 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libzephyr.so.4
        libzeitgeist-2.0.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libzeitgeist-2.0.so.0
        libzeitgeist-1.0.so.1 (libc6,x86-64) => /usr/lib/libzeitgeist-1.0.so.1
        libz.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libz.so.1
        libz.so.1 (libc6) => /usr/lib32/libz.so.1
...

解決方法2: 特定ユーザの設定ファイルに記述する

特定のユーザだけが使いたいのであれば、 $HOME/.bashrc 等、インタラクティブシェルにのみ反映されるようなファイルに記述すればオーケーです。

2016/01/04

テキストモードで起動する for Ubuntu

たまにしか使わないので、備忘録としてこの方法はブートローダとして GRUB を使っている場合にのみ有効です

一度だけの場合

GRUB の画面が出てきたらカウントダウンが終わる前に e を押します。
GRUB の画面が出てこない場合は、起動直後に ESC を押すと出てくるはずそれでも出てこない場合は、ブートローダに GRUB を使っていない可能性があります

GRUB の画面
ここで e を押す

ブートコマンドの編集モードに入るので、quiet splashtext に変更します。

< linux      /boot/vmlinuz-x.xx.x-xx-generic root=UUID=yyyy ro  quiet splash $vt_handoff
---
> linux      /boot/vmlinuz-x.xx.x-xx-generic root=UUID=yyyy ro  text $vt_handoff

ブートコマンドの編集画面

構成によっては少々見づらいかもしれませんが、ゆっくり探すとあるはずです。
変更し終わったら、 Ctrl-x もしくは F11 でブートします。

この方法では、再起動すると元の設定に戻ります。
グラフィックボードのドライバをインストールする場合など、一時的に CUI にしたい場合に有用です。

永続的に変更する場合

設定ファイルを以下のように編集します。

/etc/default/grub
11c11
< GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
---
> GRUB_CMDLINE_LINUX_DEFAULT="text"

その後、update-grub をしないと設定が反映されないので注意これを忘れて何度も再起動したことがあります

$ sudo update-grub