2010年12月2日 星期四

android 置入external library (.jar)

在eclipse裡面當想要置入額外的library,比如說google library或是別人自己製造的library
使得程式不會出現error,
1.在package explorer裡面點選想要的專案按右鍵,找最下面的properties
2.再找到Java Build Path,
3.Add External JARs
之後找到想要新增加的.jar檔就可以新增library了

快瘋掉,每天都在尋寶要怎樣作

再一次的被搞死

每天都差點死在電腦桌前,無法進入主畫面卡死在登入畫面差點重灌

今天電腦無法登入結果差點重灌
我以為我刪掉nautilus造成無法登入
只在登入畫面,就算密碼帳號打正確也無法進入主畫面,只有畫面閃了一下
後來還是持續在登入畫面

ubuntu 10.04結果後來研究了辦個小時
ctrl+alt+F1  進到別的tty裡面
輸入sudo apt-get install ubuntu-desktop 才恢復


ps.差點死在電腦桌前again

差點被minicom 搞死

今天在設定minicom的路徑的時候
設定他的port

我設定/dev/ttyUSB0

回到home之後輸入minicom他總是跳出/dev/tty/ttyUSB0怎麼改都沒有用
我甚至去/etc/minicom/下面改他的config檔
怎麼改也是都改不了

後來研究兩小時才知道他讀得config檔在~/.minirc.dfl 這個檔案裡面

我只能說超痛苦

每天都被電腦搞

2010年10月10日 星期日

Since the market started

Since my android market started, I have to post aritcle in English from now on......For the use of extending the marketing territory.Cause not everyone speaks tradional Chinese in the world.
So...this is where I am going to start. Posting this article for the memory of the beginning.
Date:2010/10/11

2010年8月20日 星期五

完成自己喜歡的成就感??!!

最近完成自己的一個小型APK也算是造福人群吧?

學會了再接文件檔的時候要依文件檔格式轉檔(如big5)
還有學會可延展示選單的質感設計

都滿屌的捏捏捏捏捏捏捏捏捏

2010年6月2日 星期三

The Javadoc for this element could neither be found in the attached source nor the attached Javadoc.

When building the Android SDK using the Eclipse. You will find that using "tooltip description " is not showing the Java document in Eclipse by hovering the mouse over the method. Note that you will find descriptions " The Javadoc for this element could neither be found in the attached source nor the attached Javadoc."


Solving the problem: go back to the "Available packages" tabs of the AVD manager(which is the SDK device manager in Eclipse) and install the doc package.

done!

搞不懂為什麼我要寫英文......

2010年5月25日 星期二

終於完成自己的mp3 flash player

公司回家後,每天晚上做到三四點也不知道在high什麼
自己爽成這樣......
不過終於完成自己的網頁播放器真的很爽
我在一篇部落格看到,教你怎放播放器
<中文註解 by Jinn : http://blog.yam.com/jinnsblog>
後來修改完以後,歌曲+config檔+playlist檔全部都修改,還放到自己的hinet網路空間去
最差的是只有60M的網路空間可以放,滿殘念的
就先降吧~~~~
要自己做一個的人自己下載吧~~
裡面有教學
是一個好人翻譯的,真感謝他
我有把他傳到我的網頁空間去
要的人可以自行下載來試
http://www.megaupload.com/?d=3ZNPYF0L

 ps.享受你自己 luxurious 的 player 吧

2010年5月7日 星期五

Comptine d'un autre été: l'après midi

Android2.1 Message 從頂層到底層架構flow(2)

媽的我這樣寫真是前無古人後無來者
來吧,上面的framework丟到parcel裡面去
RILRequest初始化的時候,會連接名為rild的socket(也就是rild中s_listen_event綁定的socket),初始化數據傳輸的通道.
rr.mp 是Parcel對象,Parcel是一套簡單的序列化協議,用於將對象(或對象的成員)序列化成字節流,以供傳遞參數之用.這裡可以看到String address和int clirMode都是將依次序列化的成員.在這之前,rr初始化的時候,request號跟request的序列號(自動生成的遞增數),已經成為頭兩個 將被序列化的成員.這為後面的request解析打下了基礎.
接下來是send到handleMessage的流程,send將rr直接傳遞給另 一個線程的handleMessage,handleMessage執行data = rr.mp.marshall()執行序列化操作, 並將data字節流寫入到rild socket.
csdn的opendroid專欄的GSM驅動模塊rild詳細分析
看看就好,從CSDN的opendroid專欄寫過來的上面那一段,不過他是寫dial流程啦,message我還沒寫呢!正要開始,看官注意了!
進入
hardware/ril/libril/ril_event.cpp
------->
n = select(nfds, &rfds, NULL, NULL, ptv);
------->
firePending();
------->
ev->func(ev->fd, 0, ev->param);
------->
ev->func = func;
------->
void ril_event_set(struct ril_event * ev, int fd, bool persist, ril_event_cb func, void * param)
------>
hardware/ril/libril/ril.cpp
------->
static void listenCallback (int fd, short flags, void *param)
上面階段都是listenCallback在調用的=="
------->
ril_event_set (&s_commands_event, s_fdCommand, 1,processCommandsCallback, p_rs);
------->
static void processCommandsCallback(int fd, short flags, void *param)
------->
processCommandBuffer(p_record, recordlen);
------->
RequestInfo *pRI
------->
typedef struct RequestInfo {
int32_t token; //this is not RIL_Token
CommandInfo *pCI;
struct RequestInfo *p_next;
char cancelled;
char local; // responses to local commands do not go back to command process
} RequestInfo;
------->
這裡的pRI就是一個RequestInfo結構指針, 從socket過來的數據流, 前面提到是Parcel處理過的序列化字節流, 這裡會通過反序列化的方法提取出來. 最前面的是request號, 以及token域(request的遞增序列號). 我們更關注這個request號, 前面提到, 上層和rild之間, 這個號是統一的. 它的定義是一個包含ril_commands.h的枚舉, 在ril.cpp中
------->
static CommandInfo s_commands[] = {
#include "ril_commands.h"
};
------->
typedef struct {
int requestNumber;
void (*dispatchFunction) (Parcel &p, struct RequestInfo *pRI);
int(*responseFunction) (Parcel &p, void *response, size_t responselen);
} CommandInfo;
------->
pRI->pCI->dispatchFunction(p, pRI);
對照表在ril_commands.h
找我們message的
{RIL_REQUEST_SEND_SMS, dispatchStrings, responseSMS}
走dispatchStrings
------->
static void dispatchString (Parcel& p, RequestInfo *pRI)
------->
s_callbacks.onRequest(pRI->pCI->requestNumber, string8, sizeof(char *), pRI)
------->
/hardware/ril/reference-ril/reference-ril.c
------->
onRequest (int request, void *data, size_t datalen, RIL_Token t)
------->
case RIL_REQUEST_SEND_SMS:
requestSendSMS(data, datalen, t);
break;
------->
requestSendSMS(void *data, size_t datalen, RIL_Token t)
------->
hardware/ril/reference-ril/atchannel.c
------->
at_send_command_sms(cmd1, cmd2, "+CMGS:", &p_response);
------->
at_send_command_full
------->
at_send_command_full_nolock
------->
err = writeline (command);
寫下去吧= =
------->
written = write (s_fd, s + cur, len - cur);
=======>

tired= =..

Android2.1 Message 從頂層到底層架構flow(1)

今天終於有空來寫下message的心得了
忙碌了好久....這篇大家可以轉貼只不過要標示下作者.
在android2.1/package/apps/Mms//src/com/android/mms/ui/ComposeMessageActivity.java
下面有mSendButton就從這邊開始吧,這邊就是系統裡面的message這個application的send按鈕.
從Interface Methods 往下看進入confirmSendMessageIfNeeded().---->sendMessage(true).
接下來在ComposeMessageActivity裡面的sendMessage的mWorkingMessage.send()進入android/mms/data/WorkingMessage.java的send()裡面可以看到prepareForSave確保文字以拷貝.如果是短信的話,就直接跑sendSmsWorker()調用SmsMessageSender sender.sendMessage(threadID).可以看到的是SmsMessagSender在Mms/transaction/SmsMessageSender的路徑.在sendMessage的函數中可以看到有切割的方法在最後面的smsManager.sendMultipartTextMessage()可以看到把message傳到framework傳出去.


接下來到framework
frameworks/base/telephony/java/android/teleph/SmsManager.java
------->
sendTextMessage(destinationAddress,scAddress,parts.get(0),
sentIntent, deliveryIntent);
------->
iccISms.sendText(destinationAddress, scAddress, joshlinkingutf, sentIntent, deliveryIntent);(預設是跑gsmˊˋ)
=======>
frameworks/base/telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java
------->
sendText(String destAddr, String scAddr, String text,PendingIntent sentIntent, PendingIntent deliveryIntent)
------->
sendRawPdu(pdu.encodedScAddress, text.getBytes(), sentIntent, deliveryIntent);
------->
frameworks/base/telephony/java/com/android/internal/telephony/SMSDispatcher.java
------->
sendRawPdu(byte[] smsc, byte[] pdu, PendingIntent sentIntent,PendingIntent deliveryIntent)
------->
sendSms(tracker);
------->
mCm.sendSMS(IccUtils.bytesToHexString(smsc),joshlinkingbytesToString, reply);
------->
/frameworks/base/telephony/java/com/android/internal/telephony/RIL.java
------->
sendSMS (String smscPDU, String pdu, Message result)
------->
RILRequest rr= RILRequest.obtain(RIL_REQUEST_SEND_SMS, result);
(rr是以RIL_REQUEST_SEND_SMS為request號而申請的一個RILRequest對象.這個request號在java框架和rild庫中共享(參考RILConstants.java中這些值的由來,下面hardware/ril用這個command來判斷要作什麼)
send(rr);

------->
send(RILRequest rr)
------->
mSender.obtainMessage(EVENT_SEND, rr);
------->
RILSender mSender;
------->
class RILSender extends Handler implements Runnable;
------->
case EVENT_SEND:
------->
s = mSocket;(開到hardware/ril的socket)


先到這邊吧好累,下去就是c++了還有c

2010年5月6日 星期四

Bob Sinclar & Sahara feat. Shaggy "I Wanna"

cscope trace Java

最近寫了一個vim用的cscope trace Java的script檔
滿不錯得,自己覺得自己寫得挺好的.
將tracejava.sh放在
帳號主目錄 ~/bin 的下面就可以在任何地方打上tracejava.sh就可以用了,挺好的^^~
如下面所示
$ cd ~
$ mkdir bin
$ PATH=~/bin:$PATH
$ chmod a+x ~/bin/repo

或是可以再自己的主目錄下面的.bashrc
加一行

export PATH=${PATH}:~/bin
這樣都可以讓自己的tracejava.sh再任何地方都可以使用

http://www.xun6.com/file/501c91837/tracejava.sh.html

這是我第一篇網誌,也不知道有誰會來^^不過大家能來就是我的福氣
script is free ,enjoy