2011-03-08

7-zip と 9patch と Apk Manager

9patchについてちょっと試してみたのでメモ
参考になるか分かりませんが、実行は自己責任で。

テストにはstatusbar_background.9.pngを使ってみました。

まずは、Apk Managerの使い方はこちらなどを参考に


デフォルトのframework-res.apkをデコンパイル。

projectsに出来たframework-res.apkフォルダの中の
statusbar_background.9.pngを参考に、
28x40のサイズなので26x38のpng画像を用意。

(私は24x34を用意して9patchで26x38になりました。
ただの間違いですが、とくに問題はないようです。)

で、こちらなどを参考に、9patch実行。デフォルトそのままで。
Draw 9-patch - ソフトウェア技術ドキュメントを勝手に翻訳
statusbar_background.9.pngにリネームしておきます。

それを、7-zipで変更したいframework-res.apkの
drawable-hdpiに上書き。

7-zipについてはこちらなどを参考に
7-zipの使い方

ほいで、出来たframework-res.apkを差し替える。
私はrecovery2eを導入したのでupdate.zipを
作って差し替えました。

recovery2eとupdate.zipについては
前回のエントリを参考に(ならないかも…)

その実行結果がこちら↓





すごく残念なことになりました。
(ちなみにデフォルトホームでpng画像は透過してます。)

そこで、始めに用意したpng画像を9patch処理をせずに
名前だけstatusbar_background.9.pngに変更。
それを前と同じやり方で7-zipで上書き。


その実行結果がこちら↓




きれいになりました。

が、一つ問題が。
このframework-res.apkをApk Managerで
デコンパイル→何もせずコンパイル。
なんか、エラーが出ます。

原因はこちら↓










9patchじゃなくなってる。

9patch処理を省いたせいかと思い始めに作った方を
確認すると↓









ここで既に9patchじゃなくなってる。

端っこが黒かったのはこのせいみたい。

で、Apk Managerで9patchを差し替えて
コンパイルしてみると↓






エラーが。
statusbar_background.pngの方を消し忘れたのが原因みたい。

statusbar_background.pngを消して再度コンパイル。
今度は大丈夫みたい。


あとは、keepフォルダのstatusbar_background.9.pngを削除。
resources.arscも忘れずに削除。

出来たframework-res.apkを差し替えると↓




見た目は同じ。
でも、framework-res.apkの中は










ちょっと違う。
ちゃんとstatusbar_background.9.pngになってる。
statusbar_background.pngも無い。

7-zipで9patchを差し替える場合はちょっと注意が必要かも。
まあ、7-zipでpngだけ差し替える分には関係ないけど。

xdaとかから拾ってきたthemeの、framework-res.apkも
デコンパイルしてみると、同じようになってるところがあるから
7-zipで差し替えてるのかも。
sc-02b用に作り変えるときは要確認。

まあ、私は某掲示板でいただいたthemeを元にして
ちょっと変更するだけなんだけど…。

ありがとう5z○nさん。

2011-03-04

sc-02b framework 入れ替え

某掲示板に書いてあったのを実行してみたので、
とりあえず自分用にメモ。
実行するのは、自己責任で。

まずこちらを。 recovery2e導入方法 そのままです。

特に何もないですが、adb の場合は、
adb push (絶対パス)\recovery2e /sdcard/recovery2e/
でやった方が良いかも。未確認ですが。私はusbでつないで放り込みました。 

ほいで、どこからともなくframework等の入ったzipを
入手します(以後framework.zipとします)。

で、変更する前にzipの中を確認して、変更対象のファイルを
/system/framework/ とか、/system/app/などから抜き出しておきます。

例(cpでsdに持ってくるだけなら、remountはいらないみたい)
cp /system/framework/framework-res.apk /sdcard/

(以下しばらく、defaultに戻すためのupdate.zip作成メモ)

そして、こちらなどを参考にして、
http://bird-memo.seesaa.net/article/164901537.html

framework.zipファイルの中をどっかに解凍して、
(今回の場合META-INFフォルダと、systemフォルダでした。)
update-scriptの一番上(必ずそこにあるかは分かりませんが)を

ui_print("--= Now Installing: default Theme =-");

とかに変更。まあ、表示される文字列を変更するだけなので、適当に。

で、systemフォルダの中のframework、appフォルダの中身を、
抜き出したdefaultのものに変更。上書きなんかで。

ほいで、META-INF と systemフォルダをLhazとかを使って
まとめてzipファイルに。名前は、update.zipで。

で、どこからともなくAuto-signを入手。(上のブログのリンクとかから)
使い方はこちらなどを参考に。(というか、そのまま)
http://acc.komugi.net/?%E3%83%84%E3%83%BC%E3%83%AB/AutoSign

出来上がったupdate_signed.zipは、どこかに保存。
使うときはupdate.zipにリネーム。
私はこれを使ってもとに戻せましたが、まあ、責任は持てません。

(ここまでdefaultのupdate.zip作成メモ)

ほいで、frameworkの変更。

framework.zip(入手してきた入れ替えたいframework)
をupdate.zipにリネームして

adb push (絶対パス)\update.zip /sdcard/
adb shell
su
reboot recovery

追記
adb reboot recovery
だけでいいみたい。

で、ボリュームボタンの下を押してupdate.zipを選択。ホームボタンを押す。



←ここ。














そんだけ。
なんか、おかしなとこがあるかも。
まあ、うまくいくとは限らないのでくれぐれも自己責任で。

2011-03-02

sc-02b 2.2.1 SharedPreferenceの保存場所

要root。自己責任で。↓ここを参考にしました。
http://forum.xda-developers.com/showpost.php?p=9778957&postcount=15980

/data/data/アプリのパッケージ名/shared_prefs から、
/dbdata/databases/アプリのパッケージ名/shared_prefs
に変わってる…。

作ってた音楽プレイヤーアプリが変だと思ったら…。
上のサイトを参考にして、フォルダ(アプリのパッケージ名のフォルダ)ごと
消してやったら、元に戻った。


アンインストールしてもこのフォルダは残ったままなので、
直接消すしか無いみたい。

アンインストール→フォルダ削除→再インストール 
↑これがいいかな。面倒くさいけど。

アップデート後アプリがなんかおかしかったら
まあ、試してみるのもいいかも。

もちろん、自己責任で。

2011/03/04追記
docomoにメールで問い合わせたら
「分かんね」とのことでした。

samsungからは返事が無い。
問い合わせたとこが間違ってたのかもしれない。
まあ、そんな感じです。

2011-02-24

sc-02b フォント変更(日本語フォントの欧文も利用)

追記(2011/03/02)
タイトルにも書きましたが、フォントの日本語、欧文両方を使用します。
それぞれ別のフォントを利用したい方は、まあ、通りすぎてください。
追記ここまで。

メモ (参考にしておかしなことになっても責任は取れません。自己責任で。)

DroidSans.ttf, DroidSans-Bold.ttfにDroidSansJapanese.ttfから
リンクを貼って使用することを前提としています。

sdcardにfontとか適当なフォルダを用意する

元のフォンとの保存
コマンドプロンプト
cp /system/fonts/DroidSans.ttf /sdcard/font/
cp /system/fonts/DroidSans-Bold.ttf /sdcard/font/
cp /system/fonts/DroidSansJapanese.ttf /sdcard/font/


入れ替えたいフォントをDroidSansJapanese.ttfにリネーム
sdcard直下に置いとく

入れ替え
コマンドプロンプト

adb shell
su
mount -o remount,rw /dev/block/mtdblock3 /system
cp /sdcard/DroidSansJapanese.ttf /system/fonts/DroidSansJapanese.ttf
rm /system/fonts/DroidSans.ttf
ln -s /system/fonts/DroidSansJapanese.ttf /system/fonts/DroidSans.ttf
rm /system/fonts/DroidSans-Bold.ttf
ln -s /system/fonts/DroidSansJapanese.ttf /system/fonts/DroidSans-Bold.ttf
reboot

以上。

rmはいらないかも。

フォントのリネームをしないで(用意したフォントをcustomfont.ttfとすると)
cp /sdcard/customfont.ttf /system/fonts/
rm /system/fonts/DroidSansJapanese.ttf
ln -s /system/fonts/customfont.ttf /system/fonts/DroidSansJapanese.ttf
(Sans,Sans-Boldも同様)
でもいけるかも。試してないけど。

/data/fonts/customfont.ttf として上と同じでもいいかも。
ただ、初期化?ファクトリーリセット?何かをするを残念な事に
なったりならなかったりするらしい。

2010-12-29

mediaplayerを作ってみる(14)

ファイルを忍者に置いておきます。

http://sattva.asasvata.net/Entry/28/

前回の遺産がなくなったので、なかなか進みません。
まあ、それだけでもないんですが。

プリファレンスを追加しました。思ったより簡単でした。
というか、簡単なのにしました。

onStop()で、書き込み。


@Override
public void onStop() {
super.onStop();
musicPlayer.stop();

SharedPreferences pref = getSharedPreferences("SDMP", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();

editor.putString("directory_name", musicDirList.get(musicPlayer.getDirNum()));

editor.putString("file_name",
musicFileList.get(musicPlayer.getMusicNum()));

editor.commit();
}

onStart()で、読み込み。

@Override
public void onStart() {
super.onStart();
SharedPreferences pref = getSharedPreferences("SDMP", MODE_PRIVATE);
String dirName = pref.getString("directory_name", "");
String fileName = pref.getString("file_name", "");
int dirNum = 0;
int fileNum = 0;
if (musicDirList.contains(dirName)) {
mflm.musicFileListMaker(dirName, musicFileList);    
addNumList();
if (musicFileList.contains(fileName)) {
dirNum = musicDirList.indexOf(dirName);
fileNum = musicFileList.indexOf(fileName);
}
}
spinner.setSelection(dirNum);
mflm.musicFileListMaker(musicDirList.get(dirNum), fileListForListView);
mflm.musicFileListMaker(musicDirList.get(dirNum), musicFileList);
addNumList();

musicPlayer.setDirNum(dirNum);
musicPlayer.setCount(fileNum);
//listViewの変更と通知
listView.setAdapter(listAdapter);
musicPlayer.setListView(listView);
listView.clearChoices();
listView.setItemChecked(fileNum, true);
if (fileNum == 0) listView.setSelection(fileNum);
else listView.setSelection(fileNum - 1);
}

流れでonItemSelectedとかも変わってますが、
実行するタイミングが変わっただけで、やってることは同じ。

intではなくStringで書き込んだのは、その方がいいかなーと。
ディレクトリやファイルの場所は、追加、削除で変わるので。

まあ、場所が変わると読み込まないので、無かったことになります。
その辺が、簡単の限界。おまけ程度です。

次は、まあ、そのうち。