2013/02/25

Nexus10 を工場出荷状態に初期化してみた

Nexus7 を工場出荷状態に初期化してみた に引き続き、Nexus10 も工場出荷状態に戻してみました。
基本はほぼ同じですが。。。
今回も Cygwin on Windows 7 Professional (64bit) で実行しましたが、Linux でも同様に出来ます。

以下、前提条件です。
  • Android SDK がインストールされていること
  • %SDK Location%/platform-tools にパスが通っていること
  • 開発者向けオプション - USBデバッグがONになっていること

ブートローダーのアンロック

Nexus10 を USB で PC に接続し、以下のコマンドを実行します。もしくは、音量UP・DOWNボタン同時押しで電源ON
$ adb.exe reboot bootloader

すると、Nexus10 が再起動し、fastboot モードで立ち上がります。

この状態で以下のコマンドを実行。
$ fastboot oem unlock

ブートローダーをアンロックするか聞かれます。

タッチパネルは効きませんので、音量ボタンで選択し、電源ボタンで決定します。
Yes を選択して少し待つと、以下のようにFASTBOOT STATUS - OKAYoem unlockと表示されます。
これで、ブートローダーのアンロック完了です。

ファクトリーイメージをダウンロード

Nexus10 のファクトリーイメージは以下のサイトからダウンロード出来ます。
Factory Images for Nexus Devices - Android — Google Developers
2013/2/24 時点でのダウンロード先
ダウンロードしたら、解凍しておきます。
$ tar zxf mantaray-jdq39-factory-d79f489e.tgz

ファクトリーイメージの書き込み

解凍したディレクトリにシェルスクリプトが用意されているので、それを実行します。
$ cd mantaray-jdq39
$ ./flash-all

何の音沙汰もなく、少々待たされるので不安になりますが、そのまま待てば自動的に再起動して完了です。

2013/02/24

マルチユーザ環境でSDカードのディレクトリをユーザ毎に分ける

先日、Android のマルチユーザ環境で ユーザID を取得する というエントリを書きました。
その中で、マルチユーザーを意識しなければならない例として、
例えば、「SDカードにデータを保存せざるを得ないが、ユーザは分けたい」場合とか。
と書いたのですがSDカード(外部ストレージ)への保存も適切な方法を用いれば特にマルチユーザーユーザを意識する必要はないようです。

具体的には、マルチユーザであっても、シングルユーザと同様、getExternalFilesDir() 等を使ってディレクトリを取得すれば、各ユーザ毎に割り振られたディレクトリを取得出来ます。
参考: 穀風: AndroidアプリのデータはSDカードのどこに保存すべきか?

Nexus 7 上に2人のユーザ(所有者+1)を作成し、以下のコードを実行してみました。
(実行するには、AndroidManifest に android.permission.WRITE_EXTERNAL_STORAGE の記述が必要です。)
UserManager userManager = (UserManager) getSystemService(USER_SERVICE);
UserHandle handle = Process.myUserHandle();

Log.d(TAG, "uid                               : " + Process.myUid());
Log.d(TAG, "serialNumber                      : " + userManager.getSerialNumberForUser(handle));
Log.d(TAG, "getFilesDir                       : " + getFilesDir());
Log.d(TAG, "getExternalFilesDir               : " + getExternalFilesDir(null));
Log.d(TAG, "getExternalCacheDir               : " + getExternalCacheDir());
Log.d(TAG, "getExternalStorageDirectory       : " + Environment.getExternalStorageDirectory());
Log.d(TAG, "getExternalStoragePublicDirectory : " + Environment.getExternalStoragePublicDirectory(""));

結果は以下です。
所有者
uid                               : 10064
serialNumber                      : 0
getFilesDir                       : /data/data/com.kokufu.android.test.multipleusertest/files
getExternalFilesDir               : /storage/emulated/0/Android/data/com.kokufu.android.test.multipleusertest/files
getExternalCacheDir               : /storage/emulated/0/Android/data/com.kokufu.android.test.multipleusertest/cache
getExternalStorageDirectory       : /storage/emulated/0
getExternalStoragePublicDirectory : /storage/emulated/0

ユーザ1
uid                               : 1010064
serialNumber                      : 12
getFilesDir                       : /data/user/10/com.kokufu.android.test.multipleusertest/files
getExternalFilesDir               : /storage/emulated/10/Android/data/com.kokufu.android.test.multipleusertest/files
getExternalCacheDir               : /storage/emulated/10/Android/data/com.kokufu.android.test.multipleusertest/cache
getExternalStorageDirectory       : /storage/emulated/10
getExternalStoragePublicDirectory : /storage/emulated/10

各ユーザ毎に外部ストレージが作成されているのがわかります。
逆に言うと、ユーザ間で外部ストレージを共有することは出来ないということですね。

2013/02/23

AndroidアプリのデータはSDカードのどこに保存すべきか?

元ネタは↓。
Storage Options | Android Developers

Androidアプリを開発していると、大きなデータを扱わなければならないことが多々あります。
そのようなデータをSDカードに保存する場合、どこに保存すべきなのでしょうか。

2013/02/06

Android のマルチユーザ環境で ユーザID を取得する

Android 4.2 から本格的にマルチユーザ環境が使えるようになりました。
ユーザとしては喜ばしい機能ですが、開発者としては新たな問題の種になりそうで辛いところです。

出来る事ならば、ユーザの違いなど意識しない作りにしたいところですが、どうしても意識しないといけない場面はありそう。
例えば、「SDカードにデータを保存せざるを得ないが、ユーザは分けたい」場合とか。

そんな時に、どのユーザで実行されているのかということをアプリが知る方法がないか調べてみました。
2013/2/24 追記
「SDカードにデータを保存せざるを得ないが、ユーザは分けたい」場合とか。と書いたのですが、SDカードにデータを保存するときもマルチユーザを意識する必要はありませんでした。
穀風: マルチユーザ環境でSDカードのディレクトリをユーザ毎に分ける

2013/02/03

Hulu を Ubuntu のブラウザで見ると字幕が文字化け

昨日に続いて、文字化けネタです。

2015/7/11 追記
Hulu が使用するフォントが MS ゴシック から AR PL UMing CN に変わったようです。
ご注意ください。
穀風: Hulu の文字化けを直す on Ubuntu 14.04

私がメインで使用しているマシンの OS は Ubuntu 12.04 なのですが、その Chrome や Firefox で Hulu を見ると、字幕が文字化けしてしまうのです。

解決方法は提示されているが…

他にも同じ問題で悩んでいる方はいるようで、Ubuntu 日本語フォーラムでは中国語のフォントを置き換えることで日本語を表示できるようにする方法が紹介されています。

私もこの方法で字幕を表示できるようにしていたのですが、昨日からまた文字化けが発生するようになってしまいました。
というのも、この方法はフォントキャッシュを再生成するとダメになってしまうのです。
昨日はフォント周りをいろいろいじったので…

というわけで、別の方法を探ってみることに。
いろいろ試してみたのですが、最終的には MS Gothic という名前を持つ日本語フォントを作成すれば良いという結論に達しました。
以下、その方法です。

2013/02/02

KeePass2 on Ubuntu 12.04 LTS の文字化けを直す

2016/7/13 追記
各項目だけでなく、検索窓も文字化けしてしまったので、修正しました。
KeePass2 on Ubuntu の文字化けを直す
新しいマシンに Ubuntu 12.04 LTS を入れて、KeePass2 をインストールしたのですが、見事に文字化けしてしまいました。
さすがに本物を見せるのは怖いのでテストを作成しました
~/.config/KeePass/KeePass.config.xml を見てみると、以下のような記述が。
<StandardFont>
 <Family>Microsoft Sans Serif</Family>
 <Size>8.25</Size>
 <GraphicsUnit>Point</GraphicsUnit>
 <Style>Regular</Style>
 <OverrideUIDefault>false</OverrideUIDefault>
</StandardFont>

そりゃぁ、Microsoft Sans Serif はインストールされてないわな。

このあと、手で ~/.config/KeePass/KeePass.config.xml を書き換えてみたりとかしたんですが、よくよく考えてみたら、設定画面からフォントの設定を変更すれば良いだけでした。

Tools → Options... → Interfaceタブ → Select List Font
私は TakaoPGothic を選択しましたが、日本語を含むフォントであれば何でも良いはずです。

これで、以下のように日本語が表示されるようになりました。