ラベル android の投稿を表示しています。 すべての投稿を表示
ラベル android の投稿を表示しています。 すべての投稿を表示

2011年4月7日木曜日

android : リソースファイルのコピー(ローカルフォルダとsdcardの任意のフォルダにコピーする時の違い)

久々にmemo。


res/rawフォルダに格納されているリソースファイルをローカルフォルダ(/data/data/.../files/)にコピーする場合とsdcardにコピーする場合でちょっとだけ違いがあるみたい。


早く言ってよ。。。
これに気づくのにどんだけ時間かかったか。。。


ローカルにコピーするには
openFileOutput(コピーするファイル名, Context.MODE_PRIVATE);


SDcardにコピーするには
FileOutputStream(コピーするファイルのパス);


なんだそうで。。。


具体的には。。。
-----------------
package com.test.copy;


import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Environment;
import android.widget.Toast;


public class copytest extends Activity {


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);


copyRawFile(this, リソースID(例:R.raw.song01), 保存するファイル名(例:"song01.mp3"));


}
-----------------
ここまでは一緒。


ローカルの場合の続き
-----------------
/**
 * リソースをローカルフォルダにコピー。
 * 
 * @param context
 * @param resourceId
 * @param fileName
 */
private void copyRawFile(Context context, int resourceId, String fileName) {
 InputStream input = null;
 OutputStream output = null;
  try {
   input = context.getResources().openRawResource(resourceId);
   output = context.openFileOutput(fileName, Context.MODE_PRIVATE);
   byte[] buff = new byte[1024*4];
   int size = 0;
   while((size = input.read(buff)) >= 0) {
   output.write(buff, 0, size);
   }
     output.flush();
     output.close();
     input.close();
     output = null;
     input = null;
   }catch(Exception e) {
    try {
        if(output != null) output.close();
        if(input != null) input.close();
        }catch(Exception e2){
        }
    }
  }
}
-----------------


SDcard直下の場合の続き
-----------------
/**
 * リソースをSDcardの直下にコピーする
 *
 * @param context
 * @param resourceId
 * @param fileName
 */
private void copyRawFile(Context context, int resourceId, String FileName) {
File copyFile = new File( Environment.getExternalStorageDirectory().getPath()+"/" + FileName );
    InputStream input = null;
    FileOutputStream output = null;
    try {
        input = context.getResources().openRawResource(resourceId);
        output = new FileOutputStream(copyFile);
        byte[] buff = new byte[1024*4];
        int size = 0;
        while((size = input.read(buff)) >= 0) {
         output.write(buff, 0, size);
        }
        output.flush();
        output.close();
        input.close();
        output = null;
        input = null;
        mese();
    }catch(Exception e) {
        try {
            if(output != null) output.close();
            if(input != null) input.close();
        }catch(Exception e2){
        }
    }
}
}
-----------------


だそうです。


なんか意味があるのでしょうが。。。。
気付き難かったなぁ。。。

2011年3月22日火曜日

ターミナルにおける android sdk 内のフォルダ削除

今日は時間が無いので短めに・・・。

開発に煮詰まって色々実験してて、ふとDDMSとかでフォルダ構成を見ていると、
「これまだあったの。。。」的なフォルダがゴロゴロ。。。

削除したいんだけど、中にファイルがあるからrmでは削除できない。。。

中に一杯フォルダも作っちゃったし、気がめいるなぁ。。。

なんて思っていたら

rmの後に-rを加えるだけで良いことが判明!

技術者さんには当たり前の事かもしれませんがアタシにとってはビックニュースでした。

rm -r /フォルダ名

これで完璧!!

2011年3月17日木曜日

android エミュレーター内のアプリケーションの削除

久々のメモ。

最近ふとした事からアンドロイドアプリの開発に取り組んでおりまして。。。

これがなかなかねぇ。。。。

最初はFlasCS5でAIRからの作成をしていたのですが、参考サイトがあまりにも少ないため、
Eclipse + android SDK  でエミュレーターで開発しております。

OSはmac。

実機は高くてね。。。買えないんです。。。

で、作ってみたのは良いものの、これってエミュレーターに載せたアプリはどうやって削除するわけ??って問題がすぐに浮上しまして。

なかなかややこしいのでメモ。

まずはターミナルを使わなきゃいけないのがとっつきにくい!!

バリバリの開発者様なら何て事は無いでしょうが、限りなく素人に近いアタシにはなかなかのもんです。

android sdk にデフォルトで入っているadbってコマンドを使うのだが、このadbってやつをコマンドと呼んで良い物なのかも未だに良くわからない。。。

環境的にはtest.apk を Eclipse経由でエミュレーターにインストールし、android sdk フォルダのなかのtoolsフォルダにadbとRuntime.apkが入っているという前提のメモです。

まずはターミナルでtoolsフォルダに移動

xxx$ cd /Users/xxx/android-sdk-mac_x86/tools/

xxxはmacのユーザー名。cd(多分チェンジディレクトリーの略)コマンドでtoolsフォルダまでのパスを入れると移動できるらしい。。。

▲▲▲▲▲-no-imac-4:tools xxx$

と表示されれば移動完了。

ここからがややこしい。

まず、

▲▲▲▲▲-no-imac-4:tools xxx$ ./adb shell

と入れて中身を表示。

これは中身がわかっていればやらなくても良い事なのだが、どこにアプリのデータがあるのかわからないアタシには必須項目。

▲▲▲▲▲-no-imac-4:tools xxx$ ./adb shell


となるので、
ls

と入れると。。。


# ls
config
cache
sdcard
acct
mnt
d
etc
system
sys
sbin
proc
init.rc
init.goldfish.rc
init
default.prop
data
root
dev
#

と表示されます。

続けて

# cd data
# ls

と入れると。。。


# cd data
# ls
misc
local
app-private
backup
property
app
data
dontpanic
dalvik-cache
system
lost+found
#

と表示され、さらに


# cd data
# ls

と入れると。。。

# cd data
# ls
com.test ← 今回削除したいアプリのパッケージ名
com.android.server.vpn
android.tts
com.android.term
com.android.speechrecorder
com.android.spare_parts
以下省略
#

という風にエミュレーターに入っているパッケージ名がダァ〜っと出てくるので、自分が作ったアプリのパッケージ名を探す。

今回の場合は
com.test

削除したいパッケージ名がある事がわかったので、shellから抜けます。

コマンドは
#exit

といれると、
▲▲▲▲▲-no-imac-4:tools xxx$

に戻れます。

実際の削除は
▲▲▲▲▲-no-imac-4:tools xxx$ ./adb uninstall com.test

と入れて、
▲▲▲▲▲-no-imac-4:tools xxx$ ./adb uninstall com.test
Success

と表示されれば削除完了。

ざっくりまとめると、
インストール:./adb install zzz.apk(アプリケーション名)
アンインストール:./adb uninstall com.zzz(パッケージ名)

だそうです。

ちなみにwindowsのdosプロンプトでは ./adb の ./ はいらないみたい。

ややこしい。。。