タグ別アーカイブ: プログラム

[Android] R.javaが消える件


色々ソースをもらってインポートすることが最近はよくあります。

その際、いろんなところでコンパイルエラーが出るんですが、AndroidのBuild Targetなどのバージョンを変えるなどして対応していますが、その中でリソースなどを管理するR.javaが消える事がしばしばあります

コンパイルエラーなども出ないので、はっきりとすぐに分からなかったのですが、以下のサイトでなんとなくみるべきところがわかりました。

http://techbooster.jpn.org/andriod/environment/5796/

リソースをつかさどっているR.javaなのでリソース関連でエラーがある場合に発生するようです。res以下のxmlファイルやAndroidManifest.xmlなど

自分の場合はほぼAndroidManifest.xml の不具合でした。

特に頻繁に多いのが、android:configChanges の項目です。

どうにか対応すると、R.javaができます。 めでたしめでたし!

 

2012/05/08 19:43 追記

http://onno.jp/dev/2011/12/431admob-sdk.html

これでしたAdmobSDKのせいでConfigChangesがエラーでした。

書かれているようにandroid build target を13以上にすると解決したー!!

 

 

 

[Android] dp , sp の単位について


 
pxは使うな

このことはよくきいていたが、では単位として用意されている「dp」「sp」の違いはなんだろう。。。

参考:http://y-anz-m.blogspot.jp/2012/02/androidtextview-settextsize-sp.html

  1. dp  レイアウトの幅などを調整するときに使う
  2. sp  文字のフォントサイズを指定するときに使う

ということらしい。。

spはシステム全体の文字スケールに合わせるとあるが、scaleDensityの値によって大きさが変わるものらしい。本文中の文字など大きさを変わってもししょうがないものについてはこれで行ける。

dpは解像度によって見え方を統一できる単位。レイアウトの大きさやヘッダーやフッターの文字など、一定の大きさからスケールしてほしくないものに対して使える。

ちなみに、

TextView の setTextSize() はspが使われているらしい。

変更するときは

public void setTextSize (int unit, float size)  の第一引数のunitにTypedValueの定数を指定すれば良い

  • COMPLEX_UNIT_DIP : dp, dip
  • COMPLEX_UNIT_MM : mm
  • COMPLEX_UNIT_PT : pt
  • COMPLEX_UNIT_PX : raw pixels
  • COMPLEX_UNIT_SP : sp

 
 

◆◆ 単位に関する参考情報 pxに変換する方法 ◆◆
  •  sp, から pt, px に変換する 
dp から pt に変換する方法(Android dip, dp, から pt, px に変換する)と同じように
getContext().getResources().getDisplayMetrics().scaledDensity
で文字スケールも考慮された比率がとれるので、 これを sp 単位の値にかければ pt, px 単位になります。
 
  • Android dip, dp, から pt, px に変換する

 

以下は以前に自分が書いたJava上からdpを指定するように変換するソース

public static float getDisplayScale(Context context) {
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    DisplayMetrics dm = new DisplayMetrics();
    wm.getDefaultDisplay().getMetrics(dm);
    return dm.scaledDensity;
}

//使うときはActivityのクラス内で、以下のようにする。
float displayScale = getDisplayScale(getContext());
int size = (int) (50 * displayScale + 0.5f);  

// + 0.5fしているのはスペースがintにキャストした時にスペースが潰れないようにするため。
// 繰り上げさせるように。
//sizeをLayoutParamsのサイズに指定するなどすると解像度に
//依存しないdpを指定したようなサイズで設定できる。

 

[Android]実機で作成中アプリケーションのデータディレクトリへアクセスする


Android開発をしていると、実機での動作確認やエミュレータでの動作確認を行うと思います。しかし、実機で動作確認をしながらデータなどの整合性を確認する方法がなかなかに難しい。。。エミュレーターだとRoot権限があるのでデータディレクトリやSQLiteの中身などを見ることはできますが、実機でしか動作しないC2DMや課金の機能を確認する際は不便を感じます。

その中でデータディレクトリを見る方法を教えてもらいました!!
MacのZsh環境からadb シェルコマンドを使って端末を操作します。

参考:http://stackoverflow.com/questions/1043322/why-do-i-get-access-denied-to-data-folder-when-using-adb

まずはアプリの設定
AndroidManifest.xmlでdebuggableを有効にする。

AndroidManifest.xmlのapplicationタグ

<application android:icon="@drawable/icon" 
  android:label="@string/app_name" android:debuggable="true" >

adbコマンドを使ってシェルで入ります。

% adb shell  (端末を指定する場合は % adb -s [DEVICE_ID] shell)

通常アプリのdataディレクトリはPermission Denied となります。

$ ls /data/data/[com.yourpackage]/
/data/data/[com.yourpackage]: No such file or directory

run-asコマンドでアプリを起動しdataディレクトリに入る

$ run-as [com.yourpackage]

そうすると/data/data/[com.yourpackage]/ へカレントディレクトリが移動し
[files][databases][shared_pref]ディレクトリが見えるはず!
shared_prefにあるプリファレンスや更新されたファイルなどのテキストファイルであれば
cat コマンドで中身も見れます。

run-asコマンド最強!!と思った瞬間でした。

だが、、、、databaseはsqlite3コマンドが実機に貼っていないため中身までは見ることは出来ませんでした。
見る方法があれば教えて欲しいです。(Root化なしで)

追記・・・
デバイスでrun-asが使えるものと使えないものがあるみたい。。。
Xperia Nexusは使えたけど。。。自分の持っている国内メーカのもの1機種使えないものがありました。。

[Android] ANTビルドする際の注意 2012/04/12現在


androidでリリースするものをビルドするときに、Android-SDKに用意されているANTタスクを使ってリリースすることがあります。

次のコマンドでプロジェクトのbinいかに「APP-NAME-release.apk」という署名されたファイルができます。事前にkeytoreのファイルとかを「properties」ファイルに定義しておく必要があるのですが。ここは省略します。

その際、自分の環境 「android-sdk-r15」「java1.7.0_3」環境だと生成されたapkファイルをインストールすところで以下のようなエラーが出ました。

INSTALL_PARSE_FAILED_NO_CERTIFICATES

% cd [PROJECTディレクトリ]
% ant release
% cd bin
% adb install

以下を見てみると

http://code.google.com/p/android/issues/detail?id=19567

java7ではAntでビルドできない様です。android-sdk-r17も出たから改善されているかもしれませんが。。。

これですこしはまってしまいました。

普段はeclipseからデバッグ用の署名でビルドしているからわからなかったーーでも解決できてよかった!

これからvimを使い始める人のための便利な使い方Tips


 

3分動画のドットインストールでvimの動画をすべて見たので自分なりに知らなかったことなどをまとめてみます。vimは以前からサーバを操作するときにconfファイルの編集などで使っていました。今後はメインのエディタとして使っていけるように色々便利なコマンドなどを勉強していこうと思います。

コマンドモード

:e [file]:ファイルを開く
:w [file]:ファイル名をつけて保存

 
ノーマルモード

w / b :単語単位の移動
^: 行頭に移動
$: 行末へ移動
f  [文字]: 文字へ飛ぶ。; で次の文字へ飛べる
%(カッコの上で):対応するカッコへ飛ぶ

 
指定行へ移動

[行番号]gg

 
検索について

* / # : 今カーソルが合う位置の単語を検索 (* は前方へ #は後方へ)

 
置換について

コマンドモードから
:s/検索前/置換後 :箇所のみ置換
:s/検索前/置換後/g :行中の検索前をすべて置換する
:%s/検索前/置換後/g:行中の検索前をすべて置換する
:%s/検索前/置換後/gc:確認をしながら行中の検索前をすべて置換する

 
やり直し機能

undo(戻る): u
redo(進む): ctrl+r

 
ウインドウの分割

:sp 上下分割
:vsp 左右分割
ctrl + w + w   : ウインドウ間を移動
:close 分割を閉じる

 
タブ分割

:tabnew:新しいタブを開く
:tabe ファイル名:ファイルをタブで開く

 
タブ間の移動

ノーマルモードで gt
:tabclose:タブを閉じる

 
タブ間で共通の処理をする

:tabdo (例タブ間で置換する :tabdo %s/android/ANDROID/gc

 
インデントを揃えるためのイコール

v ビジュアルモードで範囲を選択して=(イコール)
インデントを揃えることができる。ビジュアルモードで選択しなければその行のみ揃え直す

補完

入力途中で ctrl+n 補完候補が出てくる

 
直前の操作を繰り返す

. ピリオド 超然に行った動作を繰り返す (削除に使えるなど)

 
ビジュアルモード(テキスト選択モード)

v :文字単位のビジュアルモード
Shift + v :行単位のビジュアルモード
ctrl + v :短形のビジュアルモード

 
短形ビジュアルモード(短形選択モード)の応用(一括で変数にプレフィックスなどを付けたい時)

ノーマルモードから
ctrl + v  短形選択モードに入る
プレフィックスを付けたい部分を選択する。
shift + i 挿入モードへ入る。 「my_」など付けたいプレフィックスを入力
ESCキーで戻る。 短形選択していた部分すべてにmy_のプレフィックスが入る。
また、プレフィックス部分を一括で消す場合は、短形選択し、x で選択した部分を削除する。

 
テキストオブジェクト

HTMLやXMLなどの文書構造を一括で削除するなどできる。
<title>タイトル名</title>
オレンジの部分で ノーマルモードからcit と入力するとタイトル名という文字が消えて入力モードとなる。

c / d / y : change(カットされてinsertモードになる) / delete(削除) / copy(ヤンクにコピー)

i / a : 中身か全体化

t / ” / ) /] : tag

例)ーーー
<meta charset=”utf-8“>
utf-8 の部分で ci” と入力するとutf-8が消えて入力モードになる
ーーーーー

 
その他設定

:set number (:set nonumber) 行番号の表示・非表示
:syntax on (:syntax off) 色付け
:set tabstop 4  タブの文字数設定
:set ignorecase (:set noignorecase) 検索時に大文字小文字を区別したくないとき

参考サイト
http://ogawa.s18.xrea.com/fswiki/wiki.cgi?page=Vim%A4%CE%A5%E1%A5%E2
http://d.hatena.ne.jp/Yuzuemon/20110304/1299199079