何か作りたい

平日はSE。休日は何か作りたい。作ったら公開したい。

【Android】仮想端末のファイル書き込み確認手順

FileOutputStream 等で「/data/data/(パッケージ)/files」配下に書き込んだ際に、

「権限ないから見せてあげませーん」を回避する手順

 

#全てプロンプト上で操作

【案1. run-as】

 ①仮想端末起動

②[DOS](ユーザディレクトリ)\AppData\Local\Android\Sdk\platform-tools\adb.exe shell

[DOS]run-as パッケージ名

[DOS]cd files

 

【案2. rootで無理やり】

①仮想端末起動

②[DOS](ユーザディレクトリ)\AppData\Local\Android\Sdk\platform-tools\adb.exe shell

[DOS]generic_x86_64:/ mount -o rw,remount /system

[DOS]su

[DOS]cd /data/data/(パッケージ)/files

 

#ぐぐって出てきたものは案1が圧倒的に多かったけど、

#パッケージ名を毎回打つのがだるいので、案2で定着しそう。

 

 

ついでに、ファイルをPCに取り出す手順。

 

①[DOS]cat (取り出すファイル名) > /sdcard/(ファイル名)

 ※ファイルパスが分かりやすいよう、SDカードにコピーしておく。

②"adb.exe shell" を終了

③adb.exe pull /sdcard/(ファイル名) (ファイル名)

 

【Android】実機デバッグ用の設定

そろそろAndroid Studioの書籍も少しずつ多くなってきたので、本格的に触ってみようかと。

で、確かEclipse+ADTの時にも苦労した実機デバッグの設定を再度行ったのですが、つまづいたのでメモを残しときます。

 

基本的な手順は他のブログでも載ってますが、

  1. Android端末のUSBデバッグを有効にする
  2. Android Studioに「Google USB Driver」をインストール
  3. Android端末をPCにUSB接続
  4. Android Studioの「Android Monitor」の左上に実機名の表示を確認

で完了。

 

ほとんどの機種の場合、上記だけだとNGだと思います。

デバイスマネージャを覗くと分かると思いますが、3.の接続が失敗しています。

(ドライバのインストールに失敗してます。)

 

2. でインストールした「Google USB Driver」は

 >【Android SDKインストール先】\extras\google\usb_driver

に保存されるようですが、"android_winusb.inf"の中身を見ると・・・

(略)

[Google.NTx86]

;Google Nexus One

;Google Nexus S

(略)

[Google.NTamd64]

;Google Nexus One

;Google Nexus S

 

(略)

てな感じで、機種ごとに定義してあるので、ココに載ってない端末を用意してもインストールされるわけがありません。

不親切すぎます!

 

なので、ココに今回接続する端末情報を追加して、このinfファイルをドライバとして更新してあげましょう。

定義情報は、

;Google Nexus One
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02&MI_01

こんな感じで2行あるっぽい。VIDとPIDってのが分かればいいみたいです。

VIDとPIDは、デバイスマネージャの該当項目のプロパティ⇒詳細からハードウェアIDを開いてあげると、

f:id:nabesann203:20151031234519p:plain

こんな感じで載ってます。

REVってのはいらないみたい。

 

ウチの子は数年眠ってた「Xperia Acro」ですが、VID=0FCE、PID=615Cみたいです。

"android_winusb.inf"に追記しました。 

[Google.NTx86]

(略)

;Xperia Acro
%SingleAdbInterface% = USB_Install, USB\VID_0FCE&PID_615C
%CompositeAdbInterface% = USB_Install, USB\VID_0FCE&PID_615C&MI_01

[Google.NTamd64]

(略)

;Xperia Acro
%SingleAdbInterface% = USB_Install, USB\VID_0FCE&PID_615C
%CompositeAdbInterface% = USB_Install, USB\VID_0FCE&PID_615C&MI_01

[USB_Install]

こんな感じ。

忘れずにx86、64の両方に定義してください。

私は片方忘れて30分ほどハマりました。

 

ただ、Acroなんて何年前の端末だって話です。Android 2.3だし。。

安い白ROMでも買おうかなーと思う今日この頃でした。

 

【C#】ディレクトリ名を変更する時に気をつけること

ディレクトリ名の変更をする時は、

DirectoryInfo di = new DirectoryInfo(path);

// 変更後ディレクトリ名(フルパス)

di.MoveTo(di.Parent.FullName + "\\" + 変更後ディレクトリ名) 

とするようです。

ファイル名を変更するというより、移動するって感じみたいですね。

 

で、今回困ったのは、

DirectoryInfo parent = new DirectoryInfo(ParentDirPath); 

DirectoryInfo child = new DirectoryInfo(childDirPath);

 

parent.MoveTo(parent.Parent.FullName + "\\" + 変更後親ディレクトリ名);

child.MoveTo(child.Parent.FullName + "\\" + 変更後子ディレクトリ名);

 てな感じで、親子ディレクトリ両方更新しようとしたわけですよ。

そしたら、子のディレクトリ名変更しようとした時に、「DirectoryNotFoundException」が発生しちゃいました。

 

なんでだー?と思ってデバッグで色々見てたら、

child

    Exists      | true

    FullName | 変更前親ディレクトリ\\子ディレクトリ名

となってました。

勝手に更新してくれないんですね。そりゃそうか。

 

何か術がないかなーと思ったら、DirectoryInfo.Refresh()なんて、如何にもソレっぽいのがありました。

ただ、コレを実行すると、

child

    Exists      | false

    FullName | 変更前親ディレクトリ\\子ディレクトリ名

 ってなっちゃいます。

空気読んでパスを更新して欲しいんですがー。

 

とりあえず、強引に以下で組みました。

string name = child.Name

foreach (DirectoryInfo wk in parent.GetDirectories()) {

    if (wk.Name.equals(name)) {

        child = wk;

    }

}

今は1親1子なのでなんとかなるけど、子供いっぱい出てきたら嫌だなぁ。

とりあえずメモ残し。

 

Android / iOSのアプリ作りたいなーと思って

www.buildinsider.net

両方で動かせないかなーと調べてたら、最近はC#で開発できるみたいですね。

 

でも結局、半分くらいしか共通化できないなら色々面倒そうだなー。

諦めて王道のADTですかね。

 

(追記)

も少し調べてたら、ADTって年内で開発・サポート終了するのですね。寝耳に水でした。

 

qiita.com

 

いい機会なので、Android Studioってのを触ってみようかと。

【DesktopPhotoViewer】1.0.0 公開しました。

www.vector.co.jp

数日前に申請出したけど、さっき確認したら公開されてました。

 

Win7のガジェット機能で、「スライドショー」ってのがあったんですけど、

自分で撮った写真とか写すのに重宝しておりました。

けど、

 ・もうちょっとサイズ大きく表示したい

 ・最前面表示欲しい

などなどありまして、自分で作ってみました。

 

C#でモノを作って公開するのは初めてなので、楽しく開発できました。

まだ欲しい機能いくつかあるので少しずつアップデートしていく予定です。

 

コメント・要望ありましたらお願いします。

 

 

はじめに

はてなブログでびゅーしました。

日ごろ何かアプリを作りたいなーと思いながら特に何も思いつかず。

 

今回キッカケが欲しくてブログを始めた次第です。

作ったアプリの公開とか、小ネタとか書いていけたらいいなーと思います。

 

よろしくお願いします。