タグ別アーカイブ: android

備忘録 Android @Overrideで大量エラーの対処


androidでeclipseを使用している時に新たなワークスペースでインポートするときなど、
「スーパークラスのメソッドをオーバーライドする必要があります」というエラーが大量発生した場合。

よく見ると@Overrideアノテーションのところでエラーとなっている。

なんてことはない、単純にJavaコンパイラーのバージョンが1.5の場合に発生するようです。。。

Javaコンパイラーを1.6以上にしてあげると解決。。

何でだろう、Android以外のプロジェクトでは1.5でも@Override使えていたような気がするんだが??
1.6からだったんだろうかーーーーー?

参考URL:http://techbooster.jpn.org/andriod/environment/6626/

第1回 関西Unity勉強会


リファレンスマニュアルについて。。
UnityのリファレンスはUnityをインストールしたディレクトリにある。それを参考にできる。
その際、サンプルコードはドロップダウンから言語ごとに調べることが出来る!

ゲームを作るに当たりGUIがとても重要

  1. レスポンス
  2. 統一された配置 常にOKボタンは右下に表示するなど
UnityのGUIは毎フレーム表示される。
Updateメソッドと同じようにonGUIメソッドも毎フレーム呼ばれる。
ーー
通常onGUIメソッドで画面に描画するGUIのオブジェクトの宣言と動作を同時に定義する。
onGUI()メソッドは1フレームで2回以上呼ばれるところがある(レンダリングとイベントハンドリング時に呼ばれる)
onGUI()メソッド内ではif文などでボタンクリックした時の処理などを入れていく。ボタン以外の時はこのボタン処理はスキップされる。以下のように定義と処理を同時に書く。
if (GUI.Button(new Rect(100, 110, 200, 30), “Button”)) {
   クリック時の処理
   clickCount++;
   Debug.Log(“Click Button” + clickCount);
}
ーー
VisualStadioとかを使う事もできるが、MonoEditorでしかデバッグは動かない。
[ExecuteInEditMode()] をクラス名の頭につけると、GUIのレンダリングイメージが表示される。
ーー
ボタンなどスキンで一括してスタイルを変更できる。
デフォルトのスキンを変えると、依存しているボタン全てが変わってしますので、カスタムスキンを定義する。
  • 解像度の違う端末に応じてスキンを定義しゲームの中で変更する。
  • ローカライズをする場合も日本語のスキン、英語のスキンなどを用意し、変更する。
ーー
ゲーム中にも日本語文字列を入れるのはちょっと一苦労のようだ。UTF-16のフォントのリソースファイルを用意して、そのリソースファイルを参照するようにする。
日本語フォントを使う方法について調べる。
ライブラリについて
NGUI GUIをライブラリにしている。通常の使い方とは違う。
ex2D Unityの2Dゲームツール。
資料へのリンク
ゲームを作るときの心得的な
ゲームを作った時に、まずはゲームオーバーを作ろう!!
ゲームループを作る。。
 Updateメソッド単位が小ループ!
SMASH.TVというゲームがおもしろいい

[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機種使えないものがありました。。