adbを使って、androidのエミュレータ内のsqlite3やプリファレンスをチェックする

アンドロイド開発で、sqliteのデータや、
プリファレンスの中身を見たい時のチェック方法メモ。

まずadbが使える状況で、

$ adb devices

で、利用できるデバイス一覧が表示されます。

$ adb devices
List of devices attached 
37c70c34320b3d7 device

利用したいデバイスを下記コマンドで指定し、shell。

$ adb -s emulator-5554 shell

するとエミュレータ内で色々コマンドが実行できるようになる。

#ls
#pwd
#cd
#cat
・・・等々

本題のsqlite3やプリファレンスのデータを見るにはまず、そのファイルの場所にいきます。

◆プリファレンスの場所は下記、

#cat /data/data/対象のアプリのパッケージ名/shared_prefs/プリファレンス名.xml

実はxml形式だったのね。

◆sqlite3のデータの場所は下記、

#sqlite3 /data/data/対象のアプリのパッケージ名/databases/データベース名.db 
あとは好きなようにsqlite3のコマンドで、.tableしたりselectしたりできます。

 

 

Windowsで文字コード一括変換に便利なツールメモ・・

日ごろから、mac、Linux、Windowsで、コードを回しまくっていて、
しょっちゅう文字コードを変換するので、便利なツールないかと思っていたらあったのでメモ。

http://www.kashim.com/kanjitranslator/index.html
kashim.comさんの KanjiTranslator というのが便利でした。

Windowsのシェルでもいけるのですが、Winではコマンドプロンプトを滅多に開かないので、
ツールに頼ります。。(汗)

 

Android UIスレッド操作まとめも

Androidアプリに埋め込む配布用のSDKを作っていて、メインアプリになるべく影響ない作りにしたいと思って開発しており、ネックになった部分を整理したいのでまとめも!
(javaはじめたばっかりなので、なんでもご指摘くださいm(_ _;)m)

上記の通り、メインアプリに影響をなるべくなくすために何をしたらいいか考えたみた結果、
SDKの処理は非同期でやることにした。 (jarファイルで配布する予定)
今回はUIの操作も必要なので、方法として2点あるようだ・・・(かな?

HandlerThreadを扱う方法とAsyncTaskを使う方法があるようで。
AndroidではUIの処理はシングルスレッドで、別タスクから処理は、そのシングルスレッドにジョブ登録するように利用する必要があるとの事。
AsyncTaskを使う場合は、メインのシングルスレッドにジョブを投げるよう意識する必要はないみたいですが。

 

■HandlerでUIスレッド(シングルスレッド)にジョブをpostするパターン

下記記事を参考にさせていただきました!ありがとうございます!
http://pentan.info/android/app/handler.html
http://www.adamrocker.com/blog/261/what-is-the-handler-in-android.html

UIスレッド操作はメインのスレッド以外から直接操作はできないので、
Handlerを使って、メインスレッドにタスクとしてpostしてあげる。
というのが必要との事。

Handler h= new Handler();

h.post(new Runnable() {
  @Override
  public void run() {
    textView.setText("helloworld!"); //UI操作OK!
  }
});

また、操作方法にはpostDelayedなどを使って一定時間ごとの処理も可能。

 

■AsyncTaskを使うパターン

参考にさせていただいたサイト!ありがとうございます!
http://android.keicode.com/basics/async-asynctask.php
http://labs.techfirm.co.jp/android/cho/1079
http://wikiwiki.jp/android/?AsyncTask%A4%C7%A5%D0%A5%C3%A5%AF%A5%B0%A5%E9%A5%A6%A5%F3%A5%C9%BD%E8%CD%FD%A4%F2%B9%D4%A4%A6

 

new MyAsyncAppTask().execute(api_key);
class MyAsyncTask extends AsyncTask<String, Integer, String[]>{ //
 @Override
 protected void onPreExecute() { 
 //準備処理を書く
 }
@Override
 protected void onProgressUpdate(Integer... values) {
 //進捗状況
 }
@Override
 protected void onCancelled() {
 //キャンセル
 }
@Override
protected String[] doInBackground(String... api_key) {
 //処理を書く※注意ここではUI処理はしない
 return strArr;
 }
@Override
 protected void onPostExecute(String[] str) {
 //処理完了時実行、doInBackgroundの戻り値など使って処理もできる。(UI処理も)
 }
}

 extends AsyncTask<型, 型, 型>
1つ目の型 = excute()の引数の型
2つ目の型 =  onProgressUpdateの引数の型
3つ目の型 = doInBackgroundの引数の型

・onPostExecuteの引数には「…」はいれない。

せっかく調べたので、メモ。

android-sdk マニフェストで、SurfaceViewの画面サイズが小さくなるのを防ぐ

アンドロイドのSurfaceViewを使っていて、端末によって画面サイズが小さくなってしまっていたので、色々調べてみた。

最初は完全にjavaコードのほうを疑っていて、

setFixedSize(getWidth(),getHeight());

など色々試してみたが、実は簡単に解決できた。
マニフェストで下記のandroid:anyDensity をfalseにして解決。

<supports-screens
 android:anyDensity="false"
 android:largeScreens="true"
 android:normalScreens="true"
 android:smallScreens="true" />

android:anyDensityにて解像度や密度を調整できるようです。
また、SdkVersionのバージョンによってデフォルトの設定など異なるようなのです。

下記サイト参考にさせていただきましたありがとうございます!

http://wavetalker.blog134.fc2.com/blog-entry-52.htmlhttp://d.hatena.ne.jp/Kazzz/20101127/p1

admob androidアプリに導入時のメモ(version4.3.1に妥協

結構はまったので、メモ。
admobは日本語ドキュメントがないので、結構はまりました。
特に、admob SDKバージョン4.3.1ではまってしまったのですが、admobの広告表示領域に、下記のようなエラーが表示されて解決できませんでした。。

"You must have AdActivity declared in AndroidManifest.xml with configChanges." 

下記、googleのドキュメントを何度読んでもエラーの原因がわからず、、
http://code.google.com/intl/ja/mobile/ads/docs/android/fundamentals.html

ネット上でも、同様な記事がたくさんありましたが探したものすべてを試してみましたが、結局解決せず、さすがに妥協してバージョン4.3.1ではなく、4.0.4を入れるとあっさり動きました。。(汗
version4.0.4は上記ドキュメントのサンプルより利用しました。

そもそも、上記ドキュメントのサンプルもSDKのバージョンが4.0.4なので本当に4.3.1が動くのか検証もできませんでした。
せめて最新VerのSDKサンプルがあれば納得がいくのですが。

Android版のSDK4.3.1で、コード(XMLに記述しない方法)で書いてうまくいった方是非ご教授いただけますと幸いです!(汗汗

 

コマンドラインからjavaを実行&外部ライブラリ指定メモ

Androidじゃない普通のJavaをはじめてみました!

まずコマンドラインからの操作をメモ。

文字出力サンプル(HellowWorld.javaファイル)

class HelloWorld {
 public static void main ( String[] args) {
 System.out.println( "hello world" + args[0]);
 }
}
#javac HelloWolrd.java   //javacで .javaファイルをコンパイル
#java HelloWolrd HOGE      //コンパイルして作られたHelloWorld.classを実行
hello worldHOGE     //出力結果

外部ライブラリを使用する場合

#javac -class 外部ライブラリ名.jar Hoge.java
#java -classpath 外部ライブラリ名.jar Hoge //コンパイル時と実行時両方外部ファイルを教えてあげる必要がある。

google analytics(アナリティクス)のイベントトラッキングを試してみたメモ

グーグルアナリティクスイベントという機能がありますが、一度も使った事がなかったので、
設定したメモを残します。

まずAnalyticsでイベント情報の確認は下記で確認できます。

google analytics イベント トラッキング

今回は簡単なaタグを押した際にイベント情報を計測する方法を下記に記載します。

<a href="http://example.com" >test</a>

たとえば上記リンクタグをクリックした際にイベント情報を設定する例、

<a onclick="_gaq.push(['_trackEvent','カテゴリ','アクション','ラベル',100]);" href="http://example.com" >test</a>

上記のようにonclickを設定してあげるだけ。
細かい設定情報は、Google先生のこちらをご参照!